From 61b9683743016743aaee1ed0ba40601a35759c0c Mon Sep 17 00:00:00 2001 From: Ben Sturmfels Date: Fri, 19 Sep 2025 17:21:47 +1000 Subject: [PATCH] Add !date and !decimal YAML constructors to avoid unsafe parsing mode At some point the defaults for pyyaml were switched to safe parsing mode, so that the previous arbitrary Python YAML tags like "!!python/object/apply:datetime.date [2017, 9, 1]" no longer work. A better way is to define our own explicit constructors to avoid unsafe mode. --- tests/data/imports.yml | 887 ++++++++++++++++++++-------------------- tests/test_importers.py | 20 +- 2 files changed, 458 insertions(+), 449 deletions(-) diff --git a/tests/data/imports.yml b/tests/data/imports.yml index 0f02c8f..b6d81b7 100644 --- a/tests/data/imports.yml +++ b/tests/data/imports.yml @@ -2,13 +2,14 @@ importer: patreon.Income2017Importer expect: - payee: Alex Jones - date: !!python/object/apply:datetime.date [2017, 9, 1] - amount: !!python/object/apply:decimal.Decimal ["1500.00"] + # PyYAML 6 appears to require UnsafeLoader to handle complex Python tags. + date: !date "2017-09-01" + amount: !decimal "1500.00" currency: USD email: alex@example.org - payee: Dakota Doe - date: !!python/object/apply:datetime.date [2017, 9, 1] - amount: !!python/object/apply:decimal.Decimal ["12.00"] + date: !date "2017-09-01" + amount: !decimal "12.00" currency: USD email: ddoe@example.org @@ -19,15 +20,15 @@ email: ajones@example.com tier: Even tier patreon_id: "1234567" - date: !!python/object/apply:datetime.date [2020, 8, 1] - amount: !!python/object/apply:decimal.Decimal ["2"] + date: !date "2020-08-01" + amount: !decimal "2" currency: USD - payee: Breonna email: breonna@example.org tier: Odd tier patreon_id: "234567" - date: !!python/object/apply:datetime.date [2020, 8, 2] - amount: !!python/object/apply:decimal.Decimal ["5.00"] + date: !date "2020-08-02" + amount: !decimal "5.00" currency: USD - source: PatreonPatronReport_2020-10-01.csv @@ -37,15 +38,15 @@ email: ajones@example.com tier: Even tier patreon_id: "1234567" - date: !!python/object/apply:datetime.date [2020, 8, 1] - amount: !!python/object/apply:decimal.Decimal ["2"] + date: !date "2020-08-01" + amount: !decimal "2" currency: USD - payee: Breonna email: breonna@example.org tier: Odd tier patreon_id: "234567" - date: !!python/object/apply:datetime.date [2020, 8, 2] - amount: !!python/object/apply:decimal.Decimal ["5.00"] + date: !date "2020-08-02" + amount: !decimal "5.00" currency: USD - source: PatreonPatronReport_2020-11-01.csv @@ -55,27 +56,27 @@ email: ajones@example.com tier: Even tier patreon_id: "1234567" - date: !!python/object/apply:datetime.date [2020, 8, 1] - amount: !!python/object/apply:decimal.Decimal ["2"] + date: !date "2020-08-01" + amount: !decimal "2" currency: USD - payee: Breonna email: breonna@example.org tier: Odd tier patreon_id: "234567" - date: !!python/object/apply:datetime.date [2020, 8, 2] - amount: !!python/object/apply:decimal.Decimal ["5.00"] + date: !date "2020-08-02" + amount: !decimal "5.00" currency: USD - source: PatreonEarnings.csv importer: patreon.ServiceFeesImporter expect: - payee: Patreon - date: !!python/object/apply:datetime.date [2017, 9, 1] - amount: !!python/object/apply:decimal.Decimal ["61.73"] + date: !date "2017-09-01" + amount: !decimal "61.73" currency: USD - payee: Patreon - date: !!python/object/apply:datetime.date [2017, 10, 1] - amount: !!python/object/apply:decimal.Decimal ["117.03"] + date: !date "2017-10-01" + amount: !decimal "117.03" currency: USD - source: PatreonEarnings2020.csv @@ -85,75 +86,75 @@ email: fjones@example.com user_id: "32101234" event_id: "30123456" - date: !!python/object/apply:datetime.date [2020, 12, 3] + date: !date "2020-12-03" currency: USD - amount: !!python/object/apply:decimal.Decimal ["5"] - tax_amount: !!python/object/apply:decimal.Decimal ["1"] - net_amount: !!python/object/apply:decimal.Decimal ["4.31"] - platform_fee: !!python/object/apply:decimal.Decimal ["0.25"] - processing_fee: !!python/object/apply:decimal.Decimal ["0.44"] - currency_fee: !!python/object/apply:decimal.Decimal ["0"] + amount: !decimal "5" + tax_amount: !decimal "1" + net_amount: !decimal "4.31" + platform_fee: !decimal "0.25" + processing_fee: !decimal "0.44" + currency_fee: !decimal "0" - payee: Barbara Johnson email: bjohnson@example.com user_id: "2345678" event_id: "34567890" - date: !!python/object/apply:datetime.date [2020, 12, 2] + date: !date "2020-12-02" currency: USD - amount: !!python/object/apply:decimal.Decimal ["6.06"] - tax_amount: !!python/object/apply:decimal.Decimal ["1.27"] - net_amount: !!python/object/apply:decimal.Decimal ["5.14"] - platform_fee: !!python/object/apply:decimal.Decimal ["0.31"] - processing_fee: !!python/object/apply:decimal.Decimal ["0.42"] - currency_fee: !!python/object/apply:decimal.Decimal ["0.19"] + amount: !decimal "6.06" + tax_amount: !decimal "1.27" + net_amount: !decimal "5.14" + platform_fee: !decimal "0.31" + processing_fee: !decimal "0.42" + currency_fee: !decimal "0.19" - payee: Alex Jones email: ajones@example.com user_id: "7654321" event_id: "456789090" - date: !!python/object/apply:datetime.date [2020, 12, 1] + date: !date "2020-12-01" currency: USD - amount: !!python/object/apply:decimal.Decimal ["14"] - tax_amount: !!python/object/apply:decimal.Decimal ["0"] - net_amount: !!python/object/apply:decimal.Decimal ["12.64"] - platform_fee: !!python/object/apply:decimal.Decimal [".7"] - processing_fee: !!python/object/apply:decimal.Decimal [".66"] - currency_fee: !!python/object/apply:decimal.Decimal ["0"] + amount: !decimal "14" + tax_amount: !decimal "0" + net_amount: !decimal "12.64" + platform_fee: !decimal ".7" + processing_fee: !decimal ".66" + currency_fee: !decimal "0" - source: PatreonEarnings.csv importer: patreon.CardFeesImporter expect: - payee: Patreon - date: !!python/object/apply:datetime.date [2017, 9, 1] - amount: !!python/object/apply:decimal.Decimal ["52.47"] + date: !date "2017-09-01" + amount: !decimal "52.47" currency: USD - payee: Patreon - date: !!python/object/apply:datetime.date [2017, 10, 1] - amount: !!python/object/apply:decimal.Decimal ["99.47"] + date: !date "2017-10-01" + amount: !decimal "99.47" currency: USD - source: PatreonVat.csv importer: patreon.VATImporter expect: - payee: Patreon - date: !!python/object/apply:datetime.date [2017, 9, 1] - amount: !!python/object/apply:decimal.Decimal ["2.00"] + date: !date "2017-09-01" + amount: !decimal "2.00" currency: USD country_code: AT country_name: Austria - payee: Patreon - date: !!python/object/apply:datetime.date [2017, 9, 1] - amount: !!python/object/apply:decimal.Decimal ["3.30"] + date: !date "2017-09-01" + amount: !decimal "3.30" currency: USD country_code: BE country_name: Belgium - payee: Patreon - date: !!python/object/apply:datetime.date [2017, 10, 1] - amount: !!python/object/apply:decimal.Decimal ["0.40"] + date: !date "2017-10-01" + amount: !decimal "0.40" currency: USD country_code: BG country_name: Bulgaria - payee: Patreon - date: !!python/object/apply:datetime.date [2017, 10, 1] - amount: !!python/object/apply:decimal.Decimal ["6.05"] + date: !date "2017-10-01" + amount: !decimal "6.05" currency: USD country_code: CZ country_name: Czech Republic @@ -162,26 +163,26 @@ importer: patreon.PayoutImporter expect: - payee: Patreon - date: !!python/object/apply:datetime.date [2018, 4, 1] - amount: !!python/object/apply:decimal.Decimal ["123.45"] - pledges_amount: !!python/object/apply:decimal.Decimal ["0"] - transfer_amount: !!python/object/apply:decimal.Decimal ["123.45"] + date: !date "2018-04-01" + amount: !decimal "123.45" + pledges_amount: !decimal "0" + transfer_amount: !decimal "123.45" currency: USD - payee: Patreon - date: !!python/object/apply:datetime.date [2018, 5, 1] - amount: !!python/object/apply:decimal.Decimal ["2345.67"] - pledges_amount: !!python/object/apply:decimal.Decimal ["0"] - transfer_amount: !!python/object/apply:decimal.Decimal ["2345.67"] + date: !date "2018-05-01" + amount: !decimal "2345.67" + pledges_amount: !decimal "0" + transfer_amount: !decimal "2345.67" currency: USD - source: StripePayments.csv importer: stripe.PaymentImporter expect: - payee: Dakota Smith - date: !!python/object/apply:datetime.date [2017, 11, 8] - amount: !!python/object/apply:decimal.Decimal ["100.00"] - fee: !!python/object/apply:decimal.Decimal ["3"] - tax: !!python/object/apply:decimal.Decimal ["0"] + date: !date "2017-11-08" + amount: !decimal "100.00" + fee: !decimal "3" + tax: !decimal "0" currency: USD payment_id: ch_oxuish6phae2Raighooghi3U customer_id: cus_DohSheeQu8eng3 @@ -189,10 +190,10 @@ payout_id: po_aeYees2ahtier8ohju7Eeyie description: "Payment for invoice #102" - payee: Dakota Jones - date: !!python/object/apply:datetime.date [2017, 10, 28] - amount: !!python/object/apply:decimal.Decimal ["50.00"] - fee: !!python/object/apply:decimal.Decimal ["1.4"] - tax: !!python/object/apply:decimal.Decimal ["0"] + date: !date "2017-10-28" + amount: !decimal "50.00" + fee: !decimal "1.4" + tax: !decimal "0" currency: USD payment_id: ch_hHee9ef1aeyee1ruo7ochee9 customer_id: cus_iepae2Iecae8Ei @@ -204,65 +205,65 @@ importer: stripe.PayoutImporter expect: - payee: Stripe - date: !!python/object/apply:datetime.date [2017, 11, 30] - amount: !!python/object/apply:decimal.Decimal ["-50"] + date: !date "2017-11-30" + amount: !decimal "-50" currency: USD - payment_count: !!python/object/apply:decimal.Decimal ["0"] - payment_gross: !!python/object/apply:decimal.Decimal ["0"] - payment_fees: !!python/object/apply:decimal.Decimal ["0"] - payment_net: !!python/object/apply:decimal.Decimal ["0"] - refund_count: !!python/object/apply:decimal.Decimal ["1"] - refund_gross: !!python/object/apply:decimal.Decimal ["-50"] - refund_fees: !!python/object/apply:decimal.Decimal ["0"] - refund_net: !!python/object/apply:decimal.Decimal ["-50"] - collected_fee_count: !!python/object/apply:decimal.Decimal ["0"] - collected_fee_gross: !!python/object/apply:decimal.Decimal ["0"] - collected_fee_refund_count: !!python/object/apply:decimal.Decimal ["0"] - collected_fee_refund_gross: !!python/object/apply:decimal.Decimal ["0"] - adjustment_count: !!python/object/apply:decimal.Decimal ["0"] - adjustment_gross: !!python/object/apply:decimal.Decimal ["0"] - adjustment_fees: !!python/object/apply:decimal.Decimal ["0"] - adjustment_net: !!python/object/apply:decimal.Decimal ["0"] - validation_count: !!python/object/apply:decimal.Decimal ["0"] - validation_fees: !!python/object/apply:decimal.Decimal ["0"] - retried_payout_count: !!python/object/apply:decimal.Decimal ["0"] - retried_payout_net: !!python/object/apply:decimal.Decimal ["0"] - total_count: !!python/object/apply:decimal.Decimal ["1"] - total_gross: !!python/object/apply:decimal.Decimal ["-50"] - total_fees: !!python/object/apply:decimal.Decimal ["0"] - total_net: !!python/object/apply:decimal.Decimal ["-50"] + payment_count: !decimal "0" + payment_gross: !decimal "0" + payment_fees: !decimal "0" + payment_net: !decimal "0" + refund_count: !decimal "1" + refund_gross: !decimal "-50" + refund_fees: !decimal "0" + refund_net: !decimal "-50" + collected_fee_count: !decimal "0" + collected_fee_gross: !decimal "0" + collected_fee_refund_count: !decimal "0" + collected_fee_refund_gross: !decimal "0" + adjustment_count: !decimal "0" + adjustment_gross: !decimal "0" + adjustment_fees: !decimal "0" + adjustment_net: !decimal "0" + validation_count: !decimal "0" + validation_fees: !decimal "0" + retried_payout_count: !decimal "0" + retried_payout_net: !decimal "0" + total_count: !decimal "1" + total_gross: !decimal "-50" + total_fees: !decimal "0" + total_net: !decimal "-50" payout_id: po_faegh6aeghishuethuoSoT2i destination_id: ba_chu0Woop5queewi2Ea1Aibah balance_txid: txn_EiKahrazei3aeMohk7EeDigh failure_txid: "" - payee: Stripe - date: !!python/object/apply:datetime.date [2017, 11, 29] - amount: !!python/object/apply:decimal.Decimal ["146.50"] + date: !date "2017-11-29" + amount: !decimal "146.50" currency: USD - payment_count: !!python/object/apply:decimal.Decimal ["2"] - payment_gross: !!python/object/apply:decimal.Decimal ["150"] - payment_fees: !!python/object/apply:decimal.Decimal ["3.5"] - payment_net: !!python/object/apply:decimal.Decimal ["146.5"] - refund_count: !!python/object/apply:decimal.Decimal ["0"] - refund_gross: !!python/object/apply:decimal.Decimal ["0"] - refund_fees: !!python/object/apply:decimal.Decimal ["0"] - refund_net: !!python/object/apply:decimal.Decimal ["0"] - collected_fee_count: !!python/object/apply:decimal.Decimal ["0"] - collected_fee_gross: !!python/object/apply:decimal.Decimal ["0"] - collected_fee_refund_count: !!python/object/apply:decimal.Decimal ["0"] - collected_fee_refund_gross: !!python/object/apply:decimal.Decimal ["0"] - adjustment_count: !!python/object/apply:decimal.Decimal ["0"] - adjustment_gross: !!python/object/apply:decimal.Decimal ["0"] - adjustment_fees: !!python/object/apply:decimal.Decimal ["0"] - adjustment_net: !!python/object/apply:decimal.Decimal ["0"] - validation_count: !!python/object/apply:decimal.Decimal ["0"] - validation_fees: !!python/object/apply:decimal.Decimal ["0"] - retried_payout_count: !!python/object/apply:decimal.Decimal ["0"] - retried_payout_net: !!python/object/apply:decimal.Decimal ["0"] - total_count: !!python/object/apply:decimal.Decimal ["2"] - total_gross: !!python/object/apply:decimal.Decimal ["150"] - total_fees: !!python/object/apply:decimal.Decimal ["3.5"] - total_net: !!python/object/apply:decimal.Decimal ["146.5"] + payment_count: !decimal "2" + payment_gross: !decimal "150" + payment_fees: !decimal "3.5" + payment_net: !decimal "146.5" + refund_count: !decimal "0" + refund_gross: !decimal "0" + refund_fees: !decimal "0" + refund_net: !decimal "0" + collected_fee_count: !decimal "0" + collected_fee_gross: !decimal "0" + collected_fee_refund_count: !decimal "0" + collected_fee_refund_gross: !decimal "0" + adjustment_count: !decimal "0" + adjustment_gross: !decimal "0" + adjustment_fees: !decimal "0" + adjustment_net: !decimal "0" + validation_count: !decimal "0" + validation_fees: !decimal "0" + retried_payout_count: !decimal "0" + retried_payout_net: !decimal "0" + total_count: !decimal "2" + total_gross: !decimal "150" + total_fees: !decimal "3.5" + total_net: !decimal "146.5" payout_id: po_Do9pathoo9Pu8jaePhahJa0e destination_id: ba_chu0Woop5queewi2Ea1Aibah balance_txid: txn_ahsaixiene6Thie1aiti3tuo @@ -273,32 +274,32 @@ expect: - payee: Python Person A ledger template: nbpy2017 invoice ledger entry - date: !!python/object/apply:datetime.date [2017, 10, 19] - amount: !!python/object/apply:decimal.Decimal ["80.00"] - tickets_sold: !!python/object/apply:decimal.Decimal ["1"] - ticket_price: !!python/object/apply:decimal.Decimal ["80.00"] + date: !date "2017-10-19" + amount: !decimal "80.00" + tickets_sold: !decimal "1" + ticket_price: !decimal "80.00" ticket_rate: Early Bird (Ticket - Individual Supporter) - shirts_sold: !!python/object/apply:decimal.Decimal ["1"] - shirt_price: !!python/object/apply:decimal.Decimal ["0"] + shirts_sold: !decimal "1" + shirt_price: !decimal "0" shirt_rate: "Complimentary for ticket holder (Supporter-level and above) (T-Shirt - Men's/Straight Cut Size L)" currency: USD status: Invoice invoice_id: "83" - invoice_date: !!python/object/apply:datetime.date [2017, 10, 19] + invoice_date: !date "2017-10-19" - payee: Python Person A ledger template: nbpy2017 payment ledger entry - date: !!python/object/apply:datetime.date [2017, 10, 19] - amount: !!python/object/apply:decimal.Decimal ["80.00"] - tickets_sold: !!python/object/apply:decimal.Decimal ["1"] - ticket_price: !!python/object/apply:decimal.Decimal ["80.00"] + date: !date "2017-10-19" + amount: !decimal "80.00" + tickets_sold: !decimal "1" + ticket_price: !decimal "80.00" ticket_rate: Early Bird (Ticket - Individual Supporter) - shirts_sold: !!python/object/apply:decimal.Decimal ["1"] - shirt_price: !!python/object/apply:decimal.Decimal ["0"] + shirts_sold: !decimal "1" + shirt_price: !decimal "0" shirt_rate: "Complimentary for ticket holder (Supporter-level and above) (T-Shirt - Men's/Straight Cut Size L)" currency: USD status: Payment invoice_id: "83" - invoice_date: !!python/object/apply:datetime.date [2017, 10, 19] + invoice_date: !date "2017-10-19" payment_id: ch_ahr0ue8lai1ohqu4Gei4Biem stripe_id: ch_ahr0ue8lai1ohqu4Gei4Biem @@ -307,31 +308,31 @@ expect: - payee: Python Person B ledger template: nbpy2017 invoice ledger entry - date: !!python/object/apply:datetime.date [2017, 12, 3] - amount: !!python/object/apply:decimal.Decimal ["50.00"] - tickets_sold: !!python/object/apply:decimal.Decimal ["1"] - ticket_price: !!python/object/apply:decimal.Decimal ["50.00"] + date: !date "2017-12-03" + amount: !decimal "50.00" + tickets_sold: !decimal "1" + ticket_price: !decimal "50.00" ticket_rate: Ticket - Unaffiliated Individual - shirts_sold: !!python/object/apply:decimal.Decimal ["0"] - shirt_price: !!python/object/apply:decimal.Decimal ["0"] + shirts_sold: !decimal "0" + shirt_price: !decimal "0" shirt_rate: "" status: Invoice currency: USD - invoice_date: !!python/object/apply:datetime.date [2017, 12, 3] + invoice_date: !date "2017-12-03" invoice_id: "304" - payee: Python Person B ledger template: nbpy2017 payment ledger entry - date: !!python/object/apply:datetime.date [2017, 12, 3] - amount: !!python/object/apply:decimal.Decimal ["50.00"] - tickets_sold: !!python/object/apply:decimal.Decimal ["1"] - ticket_price: !!python/object/apply:decimal.Decimal ["50.00"] + date: !date "2017-12-03" + amount: !decimal "50.00" + tickets_sold: !decimal "1" + ticket_price: !decimal "50.00" ticket_rate: Ticket - Unaffiliated Individual - shirts_sold: !!python/object/apply:decimal.Decimal ["0"] - shirt_price: !!python/object/apply:decimal.Decimal ["0"] + shirts_sold: !decimal "0" + shirt_price: !decimal "0" shirt_rate: "" status: Payment currency: USD - invoice_date: !!python/object/apply:datetime.date [2017, 12, 3] + invoice_date: !date "2017-12-03" payment_id: ch_eishei9aiY8aiqu4lieYiu9i stripe_id: ch_eishei9aiY8aiqu4lieYiu9i invoice_id: "304" @@ -341,31 +342,31 @@ expect: - payee: Python Person C ledger template: nbpy2017 invoice ledger entry - date: !!python/object/apply:datetime.date [2017, 9, 5] - amount: !!python/object/apply:decimal.Decimal ["60.00"] - tickets_sold: !!python/object/apply:decimal.Decimal ["0"] - ticket_price: !!python/object/apply:decimal.Decimal ["0"] + date: !date "2017-09-05" + amount: !decimal "60.00" + tickets_sold: !decimal "0" + ticket_price: !decimal "0" ticket_rate: Ticket - Talk Proposer - shirts_sold: !!python/object/apply:decimal.Decimal ["2"] - shirt_price: !!python/object/apply:decimal.Decimal ["30.00"] + shirts_sold: !decimal "2" + shirt_price: !decimal "30.00" shirt_rate: "T-Shirt - Men's/Straight Cut Size M" status: Invoice currency: USD - invoice_date: !!python/object/apply:datetime.date [2017, 9, 5] + invoice_date: !date "2017-09-05" invoice_id: "11" - payee: Python Person C ledger template: nbpy2017 payment ledger entry - date: !!python/object/apply:datetime.date [2017, 9, 5] - amount: !!python/object/apply:decimal.Decimal ["60.00"] - tickets_sold: !!python/object/apply:decimal.Decimal ["0"] - ticket_price: !!python/object/apply:decimal.Decimal ["0"] + date: !date "2017-09-05" + amount: !decimal "60.00" + tickets_sold: !decimal "0" + ticket_price: !decimal "0" ticket_rate: Ticket - Talk Proposer - shirts_sold: !!python/object/apply:decimal.Decimal ["2"] - shirt_price: !!python/object/apply:decimal.Decimal ["30.00"] + shirts_sold: !decimal "2" + shirt_price: !decimal "30.00" shirt_rate: "T-Shirt - Men's/Straight Cut Size M" status: Payment currency: USD - invoice_date: !!python/object/apply:datetime.date [2017, 9, 5] + invoice_date: !date "2017-09-05" payment_id: ch_daer0ahwoh9oDeiqu2eimoD7 stripe_id: ch_daer0ahwoh9oDeiqu2eimoD7 invoice_id: "11" @@ -376,12 +377,12 @@ header_cols: 12 expect: - payee: Amazon - date: !!python/object/apply:datetime.date [2016, 12, 20] - amount: !!python/object/apply:decimal.Decimal ["4.24"] + date: !date "2016-12-20" + amount: !decimal "4.24" currency: USD - payee: Amazon - date: !!python/object/apply:datetime.date [2017, 1, 7] - amount: !!python/object/apply:decimal.Decimal ["-.08"] + date: !date "2017-01-07" + amount: !decimal "-.08" currency: USD - source: Benevity2018.csv @@ -389,17 +390,17 @@ header_rows: 11 header_cols: 17 expect: - - date: !!python/object/apply:datetime.date [2017, 10, 28] + - date: !date "2017-10-28" currency: USD disbursement_id: ABCDE12345 - amount: !!python/object/apply:decimal.Decimal [20] - net_amount: !!python/object/apply:decimal.Decimal [20] - donation_amount: !!python/object/apply:decimal.Decimal [20] - match_amount: !!python/object/apply:decimal.Decimal [0] - match_amount: !!python/object/apply:decimal.Decimal [0] - donation_fee: !!python/object/apply:decimal.Decimal [0] - match_fee: !!python/object/apply:decimal.Decimal [0] - merchant_fee: !!python/object/apply:decimal.Decimal [0] + amount: !decimal 20 + net_amount: !decimal 20 + donation_amount: !decimal 20 + match_amount: !decimal 0 + match_amount: !decimal 0 + donation_fee: !decimal 0 + match_fee: !decimal 0 + merchant_fee: !decimal 0 fee_comment: null payee: Dakota Smith corporation: Company A @@ -408,16 +409,16 @@ frequency: One-time transaction_id: 67890QWERT ledger template: benevity donations ledger entry - - date: !!python/object/apply:datetime.date [2017, 10, 30] + - date: !date "2017-10-30" currency: USD disbursement_id: ABCDE12345 - amount: !!python/object/apply:decimal.Decimal [25] - net_amount: !!python/object/apply:decimal.Decimal [25] - donation_amount: !!python/object/apply:decimal.Decimal [25] - match_amount: !!python/object/apply:decimal.Decimal [0] - donation_fee: !!python/object/apply:decimal.Decimal [0] - match_fee: !!python/object/apply:decimal.Decimal [0] - merchant_fee: !!python/object/apply:decimal.Decimal [0] + amount: !decimal 25 + net_amount: !decimal 25 + donation_amount: !decimal 25 + match_amount: !decimal 0 + donation_fee: !decimal 0 + match_fee: !decimal 0 + merchant_fee: !decimal 0 fee_comment: null payee: Dakota Smith corporation: Company A @@ -426,16 +427,16 @@ frequency: One-time transaction_id: 67890WERTY ledger template: benevity donations ledger entry - - date: !!python/object/apply:datetime.date [2017, 10, 19] + - date: !date "2017-10-19" currency: USD disbursement_id: ABCDE12345 - amount: !!python/object/apply:decimal.Decimal [10] - net_amount: !!python/object/apply:decimal.Decimal [10] - donation_amount: !!python/object/apply:decimal.Decimal [0] - match_amount: !!python/object/apply:decimal.Decimal [10] - donation_fee: !!python/object/apply:decimal.Decimal [0] - match_fee: !!python/object/apply:decimal.Decimal [0] - merchant_fee: !!python/object/apply:decimal.Decimal [0] + amount: !decimal 10 + net_amount: !decimal 10 + donation_amount: !decimal 0 + match_amount: !decimal 10 + donation_fee: !decimal 0 + match_fee: !decimal 0 + merchant_fee: !decimal 0 fee_comment: null payee: Anonymous corporation: Company B @@ -444,16 +445,16 @@ frequency: Unknown transaction_id: 67890ERTYU ledger template: benevity donations ledger entry - - date: !!python/object/apply:datetime.date [2017, 10, 19] + - date: !date "2017-10-19" currency: USD disbursement_id: ABCDE12345 - amount: !!python/object/apply:decimal.Decimal [20] - net_amount: !!python/object/apply:decimal.Decimal [20] - donation_amount: !!python/object/apply:decimal.Decimal [0] - match_amount: !!python/object/apply:decimal.Decimal [20] - donation_fee: !!python/object/apply:decimal.Decimal [0] - match_fee: !!python/object/apply:decimal.Decimal [0] - merchant_fee: !!python/object/apply:decimal.Decimal [0] + amount: !decimal 20 + net_amount: !decimal 20 + donation_amount: !decimal 0 + match_amount: !decimal 20 + donation_fee: !decimal 0 + match_fee: !decimal 0 + merchant_fee: !decimal 0 fee_comment: null payee: Anonymous corporation: Company B @@ -462,17 +463,17 @@ frequency: Unknown transaction_id: 67890RTYUI ledger template: benevity donations ledger entry - - date: !!python/object/apply:datetime.date [2017, 10, 19] + - date: !date "2017-10-19" currency: USD disbursement_id: ABCDE12345 - amount: !!python/object/apply:decimal.Decimal [30] - net_amount: !!python/object/apply:decimal.Decimal [30] - donation_amount: !!python/object/apply:decimal.Decimal [30] - match_amount: !!python/object/apply:decimal.Decimal [0] + amount: !decimal 30 + net_amount: !decimal 30 + donation_amount: !decimal 30 + match_amount: !decimal 0 payee: Anonymous - donation_fee: !!python/object/apply:decimal.Decimal [0] - match_fee: !!python/object/apply:decimal.Decimal [0] - merchant_fee: !!python/object/apply:decimal.Decimal [0] + donation_fee: !decimal 0 + match_fee: !decimal 0 + merchant_fee: !decimal 0 fee_comment: null corporation: Company B project: "" @@ -486,16 +487,16 @@ header_rows: 11 header_cols: 21 expect: - - date: !!python/object/apply:datetime.date [2017, 10, 28] + - date: !date "2017-10-28" currency: USD disbursement_id: ABCDE12345 - amount: !!python/object/apply:decimal.Decimal [20] - net_amount: !!python/object/apply:decimal.Decimal [20] - donation_amount: !!python/object/apply:decimal.Decimal [20] - match_amount: !!python/object/apply:decimal.Decimal [0] - donation_fee: !!python/object/apply:decimal.Decimal [0] - match_fee: !!python/object/apply:decimal.Decimal [0] - merchant_fee: !!python/object/apply:decimal.Decimal [0] + amount: !decimal 20 + net_amount: !decimal 20 + donation_amount: !decimal 20 + match_amount: !decimal 0 + donation_fee: !decimal 0 + match_fee: !decimal 0 + merchant_fee: !decimal 0 fee_comment: null payee: Dakota Smith corporation: Company A @@ -504,16 +505,16 @@ frequency: One-time transaction_id: 67890QWERT ledger template: benevity donations ledger entry - - date: !!python/object/apply:datetime.date [2017, 10, 30] + - date: !date "2017-10-30" currency: USD disbursement_id: ABCDE12345 - amount: !!python/object/apply:decimal.Decimal [25] - net_amount: !!python/object/apply:decimal.Decimal [25] - donation_amount: !!python/object/apply:decimal.Decimal [25] - match_amount: !!python/object/apply:decimal.Decimal [0] - donation_fee: !!python/object/apply:decimal.Decimal [0] - match_fee: !!python/object/apply:decimal.Decimal [0] - merchant_fee: !!python/object/apply:decimal.Decimal [0] + amount: !decimal 25 + net_amount: !decimal 25 + donation_amount: !decimal 25 + match_amount: !decimal 0 + donation_fee: !decimal 0 + match_fee: !decimal 0 + merchant_fee: !decimal 0 fee_comment: null payee: Dakota Smith corporation: Company A @@ -522,16 +523,16 @@ frequency: One-time transaction_id: 67890WERTY ledger template: benevity donations ledger entry - - date: !!python/object/apply:datetime.date [2017, 10, 19] + - date: !date "2017-10-19" currency: USD disbursement_id: ABCDE12345 - amount: !!python/object/apply:decimal.Decimal [10] - net_amount: !!python/object/apply:decimal.Decimal [10] - donation_amount: !!python/object/apply:decimal.Decimal [0] - match_amount: !!python/object/apply:decimal.Decimal [10] - donation_fee: !!python/object/apply:decimal.Decimal [0] - match_fee: !!python/object/apply:decimal.Decimal [0] - merchant_fee: !!python/object/apply:decimal.Decimal [0] + amount: !decimal 10 + net_amount: !decimal 10 + donation_amount: !decimal 0 + match_amount: !decimal 10 + donation_fee: !decimal 0 + match_fee: !decimal 0 + merchant_fee: !decimal 0 fee_comment: null payee: Anonymous corporation: Company B @@ -540,16 +541,16 @@ frequency: Unknown transaction_id: 67890ERTYU ledger template: benevity donations ledger entry - - date: !!python/object/apply:datetime.date [2017, 10, 19] + - date: !date "2017-10-19" currency: USD disbursement_id: ABCDE12345 - amount: !!python/object/apply:decimal.Decimal [20] - net_amount: !!python/object/apply:decimal.Decimal [20] - donation_amount: !!python/object/apply:decimal.Decimal [0] - match_amount: !!python/object/apply:decimal.Decimal [20] - donation_fee: !!python/object/apply:decimal.Decimal [0] - match_fee: !!python/object/apply:decimal.Decimal [0] - merchant_fee: !!python/object/apply:decimal.Decimal [0] + amount: !decimal 20 + net_amount: !decimal 20 + donation_amount: !decimal 0 + match_amount: !decimal 20 + donation_fee: !decimal 0 + match_fee: !decimal 0 + merchant_fee: !decimal 0 fee_comment: null payee: Anonymous corporation: Company B @@ -558,16 +559,16 @@ frequency: Unknown transaction_id: 67890RTYUI ledger template: benevity donations ledger entry - - date: !!python/object/apply:datetime.date [2017, 10, 19] + - date: !date "2017-10-19" currency: USD disbursement_id: ABCDE12345 - amount: !!python/object/apply:decimal.Decimal [30] - net_amount: !!python/object/apply:decimal.Decimal [30] - donation_amount: !!python/object/apply:decimal.Decimal [30] - match_amount: !!python/object/apply:decimal.Decimal [0] - donation_fee: !!python/object/apply:decimal.Decimal [0] - match_fee: !!python/object/apply:decimal.Decimal [0] - merchant_fee: !!python/object/apply:decimal.Decimal [0] + amount: !decimal 30 + net_amount: !decimal 30 + donation_amount: !decimal 30 + match_amount: !decimal 0 + donation_fee: !decimal 0 + match_fee: !decimal 0 + merchant_fee: !decimal 0 fee_comment: null payee: Anonymous corporation: Company B @@ -576,16 +577,16 @@ frequency: Recurring transaction_id: 67890TYUIO ledger template: benevity donations ledger entry - - date: !!python/object/apply:datetime.date [2017, 10, 18] + - date: !date "2017-10-18" currency: USD disbursement_id: ABCDE12345 - amount: !!python/object/apply:decimal.Decimal [20] - net_amount: !!python/object/apply:decimal.Decimal ["19.55"] - donation_amount: !!python/object/apply:decimal.Decimal [10] - match_amount: !!python/object/apply:decimal.Decimal [10] - donation_fee: !!python/object/apply:decimal.Decimal [".1"] - match_fee: !!python/object/apply:decimal.Decimal [".2"] - merchant_fee: !!python/object/apply:decimal.Decimal [".15"] + amount: !decimal 20 + net_amount: !decimal "19.55" + donation_amount: !decimal 10 + match_amount: !decimal 10 + donation_fee: !decimal ".1" + match_fee: !decimal ".2" + merchant_fee: !decimal ".15" fee_comment: null payee: Anonymous corporation: Company C @@ -594,16 +595,16 @@ frequency: Unknown transaction_id: 67890YUIOP ledger template: benevity donations ledger entry - - date: !!python/object/apply:datetime.date [2017, 10, 21] + - date: !date "2017-10-21" currency: USD disbursement_id: ABCDE12345 - amount: !!python/object/apply:decimal.Decimal [20] - net_amount: !!python/object/apply:decimal.Decimal ["19.55"] - donation_amount: !!python/object/apply:decimal.Decimal [10] - match_amount: !!python/object/apply:decimal.Decimal [10] - donation_fee: !!python/object/apply:decimal.Decimal [".1"] - match_fee: !!python/object/apply:decimal.Decimal [".2"] - merchant_fee: !!python/object/apply:decimal.Decimal [".15"] + amount: !decimal 20 + net_amount: !decimal "19.55" + donation_amount: !decimal 10 + match_amount: !decimal 10 + donation_fee: !decimal ".1" + match_fee: !decimal ".2" + merchant_fee: !decimal ".15" fee_comment: null payee: Anonymous corporation: Company C @@ -618,16 +619,16 @@ header_rows: 11 header_cols: 23 expect: - - date: !!python/object/apply:datetime.date [2019, 10, 28] + - date: !date "2019-10-28" currency: USD disbursement_id: ABCDE12345 - amount: !!python/object/apply:decimal.Decimal [20] - net_amount: !!python/object/apply:decimal.Decimal [20] - donation_amount: !!python/object/apply:decimal.Decimal [20] - match_amount: !!python/object/apply:decimal.Decimal [0] - donation_fee: !!python/object/apply:decimal.Decimal [0] - merchant_fee: !!python/object/apply:decimal.Decimal [0] - match_fee: !!python/object/apply:decimal.Decimal [0] + amount: !decimal 20 + net_amount: !decimal 20 + donation_amount: !decimal 20 + match_amount: !decimal 0 + donation_fee: !decimal 0 + merchant_fee: !decimal 0 + match_fee: !decimal 0 fee_comment: "" payee: Dakota Smith corporation: Company A @@ -636,16 +637,16 @@ frequency: One-time transaction_id: 67890QWERT ledger template: benevity donations ledger entry - - date: !!python/object/apply:datetime.date [2019, 10, 30] + - date: !date "2019-10-30" currency: USD disbursement_id: ABCDE12345 - amount: !!python/object/apply:decimal.Decimal [25] - net_amount: !!python/object/apply:decimal.Decimal [25] - donation_amount: !!python/object/apply:decimal.Decimal [25] - match_amount: !!python/object/apply:decimal.Decimal [0] - donation_fee: !!python/object/apply:decimal.Decimal [0] - merchant_fee: !!python/object/apply:decimal.Decimal [0] - match_fee: !!python/object/apply:decimal.Decimal [0] + amount: !decimal 25 + net_amount: !decimal 25 + donation_amount: !decimal 25 + match_amount: !decimal 0 + donation_fee: !decimal 0 + merchant_fee: !decimal 0 + match_fee: !decimal 0 fee_comment: "" payee: Dakota Smith corporation: Company A @@ -654,16 +655,16 @@ frequency: One-time transaction_id: 67890WERTY ledger template: benevity donations ledger entry - - date: !!python/object/apply:datetime.date [2019, 10, 19] + - date: !date "2019-10-19" currency: USD disbursement_id: ABCDE12345 - amount: !!python/object/apply:decimal.Decimal [10] - net_amount: !!python/object/apply:decimal.Decimal [10] - donation_amount: !!python/object/apply:decimal.Decimal [0] - match_amount: !!python/object/apply:decimal.Decimal [10] - donation_fee: !!python/object/apply:decimal.Decimal [0] - merchant_fee: !!python/object/apply:decimal.Decimal [0] - match_fee: !!python/object/apply:decimal.Decimal [0] + amount: !decimal 10 + net_amount: !decimal 10 + donation_amount: !decimal 0 + match_amount: !decimal 10 + donation_fee: !decimal 0 + merchant_fee: !decimal 0 + match_fee: !decimal 0 fee_comment: "" payee: Anonymous corporation: Company B @@ -672,16 +673,16 @@ frequency: Unknown transaction_id: 67890ERTYU ledger template: benevity donations ledger entry - - date: !!python/object/apply:datetime.date [2019, 10, 19] + - date: !date "2019-10-19" currency: USD disbursement_id: ABCDE12345 - amount: !!python/object/apply:decimal.Decimal [20] - net_amount: !!python/object/apply:decimal.Decimal [20] - donation_amount: !!python/object/apply:decimal.Decimal [0] - match_amount: !!python/object/apply:decimal.Decimal [20] - donation_fee: !!python/object/apply:decimal.Decimal [0] - merchant_fee: !!python/object/apply:decimal.Decimal [0] - match_fee: !!python/object/apply:decimal.Decimal [0] + amount: !decimal 20 + net_amount: !decimal 20 + donation_amount: !decimal 0 + match_amount: !decimal 20 + donation_fee: !decimal 0 + merchant_fee: !decimal 0 + match_fee: !decimal 0 fee_comment: "" payee: Anonymous corporation: Company B @@ -690,16 +691,16 @@ frequency: Unknown transaction_id: 67890RTYUI ledger template: benevity donations ledger entry - - date: !!python/object/apply:datetime.date [2019, 10, 19] + - date: !date "2019-10-19" currency: USD disbursement_id: ABCDE12345 - amount: !!python/object/apply:decimal.Decimal [30] - net_amount: !!python/object/apply:decimal.Decimal [30] - donation_amount: !!python/object/apply:decimal.Decimal [30] - match_amount: !!python/object/apply:decimal.Decimal [0] - donation_fee: !!python/object/apply:decimal.Decimal [0] - merchant_fee: !!python/object/apply:decimal.Decimal [0] - match_fee: !!python/object/apply:decimal.Decimal [0] + amount: !decimal 30 + net_amount: !decimal 30 + donation_amount: !decimal 30 + match_amount: !decimal 0 + donation_fee: !decimal 0 + merchant_fee: !decimal 0 + match_fee: !decimal 0 fee_comment: "" payee: Anonymous corporation: Company B @@ -708,16 +709,16 @@ frequency: Recurring transaction_id: 67890TYUIO ledger template: benevity donations ledger entry - - date: !!python/object/apply:datetime.date [2019, 10, 18] + - date: !date "2019-10-18" currency: USD disbursement_id: ABCDE12345 - amount: !!python/object/apply:decimal.Decimal [20] - net_amount: !!python/object/apply:decimal.Decimal ["19.55"] - donation_amount: !!python/object/apply:decimal.Decimal [10] - match_amount: !!python/object/apply:decimal.Decimal [10] - donation_fee: !!python/object/apply:decimal.Decimal [".3"] - merchant_fee: !!python/object/apply:decimal.Decimal [".15"] - match_fee: !!python/object/apply:decimal.Decimal [0] + amount: !decimal 20 + net_amount: !decimal "19.55" + donation_amount: !decimal 10 + match_amount: !decimal 10 + donation_fee: !decimal ".3" + merchant_fee: !decimal ".15" + match_fee: !decimal 0 fee_comment: "" payee: Anonymous corporation: Company C @@ -726,16 +727,16 @@ frequency: Unknown transaction_id: 67890YUIOP ledger template: benevity donations ledger entry - - date: !!python/object/apply:datetime.date [2019, 10, 21] + - date: !date "2019-10-21" currency: USD disbursement_id: ABCDE12345 - amount: !!python/object/apply:decimal.Decimal [20] - net_amount: !!python/object/apply:decimal.Decimal ["19.55"] - donation_amount: !!python/object/apply:decimal.Decimal [10] - match_amount: !!python/object/apply:decimal.Decimal [10] - donation_fee: !!python/object/apply:decimal.Decimal [".3"] - merchant_fee: !!python/object/apply:decimal.Decimal [".15"] - match_fee: !!python/object/apply:decimal.Decimal [0] + amount: !decimal 20 + net_amount: !decimal "19.55" + donation_amount: !decimal 10 + match_amount: !decimal 10 + donation_fee: !decimal ".3" + merchant_fee: !decimal ".15" + match_fee: !decimal 0 fee_comment: "" payee: Anonymous corporation: Company C @@ -748,9 +749,9 @@ - source: BrightFunds.xls importer: brightfunds.DonorReportXLSImporter expect: - - date: !!python/object/apply:datetime.date [2017, 10, 20] + - date: !date "2017-10-20" currency: USD - amount: !!python/object/apply:decimal.Decimal [120] + amount: !decimal 120 payee: Dakota Smith corporation: Company company_name: "" @@ -764,9 +765,9 @@ - source: BrightFunds.csv importer: brightfunds.DonorReportImporter expect: - - date: !!python/object/apply:datetime.date [2020, 10, 01] + - date: !date "2020-10-01" currency: USD - amount: !!python/object/apply:decimal.Decimal [15] + amount: !decimal 15 payee: Company corporation: Company company_name: Company @@ -776,9 +777,9 @@ fund: "" on_behalf_of: Employed Person type: MatchingTransaction - - date: !!python/object/apply:datetime.date [2020, 9, 24] + - date: !date "2020-09-24" currency: USD - amount: !!python/object/apply:decimal.Decimal [15] + amount: !decimal 15 payee: Employed Person corporation: Company company_name: Company @@ -792,172 +793,172 @@ - source: OReillyRoyalties.csv importer: oreilly.RoyaltiesImporter expect: - - date: !!python/object/apply:datetime.date [2018, 3, 31] - start_date: !!python/object/apply:datetime.date [2018, 3, 1] + - date: !date "2018-03-31" + start_date: !date "2018-03-01" paid_date: null currency: USD - amount: !!python/object/apply:decimal.Decimal ["11.96"] + amount: !decimal "11.96" payee: "O'Reilly Media, Inc." - - date: !!python/object/apply:datetime.date [2018, 2, 28] - start_date: !!python/object/apply:datetime.date [2018, 2, 1] - paid_date: !!python/object/apply:datetime.date [2018, 3, 29] + - date: !date "2018-02-28" + start_date: !date "2018-02-01" + paid_date: !date "2018-03-29" currency: USD - amount: !!python/object/apply:decimal.Decimal ["20.83"] + amount: !decimal "20.83" payee: "O'Reilly Media, Inc." - - date: !!python/object/apply:datetime.date [2018, 1, 31] - start_date: !!python/object/apply:datetime.date [2018, 1, 1] - paid_date: !!python/object/apply:datetime.date [2018, 3, 29] + - date: !date "2018-01-31" + start_date: !date "2018-01-01" + paid_date: !date "2018-03-29" currency: USD - amount: !!python/object/apply:decimal.Decimal ["8.51"] + amount: !decimal "8.51" payee: "O'Reilly Media, Inc." - - date: !!python/object/apply:datetime.date [2017, 3, 31] - start_date: !!python/object/apply:datetime.date [2017, 3, 1] - paid_date: !!python/object/apply:datetime.date [2017, 4, 28] + - date: !date "2017-03-31" + start_date: !date "2017-03-01" + paid_date: !date "2017-04-28" currency: USD - amount: !!python/object/apply:decimal.Decimal ["26.91"] + amount: !decimal "26.91" payee: "O'Reilly Media, Inc." - - date: !!python/object/apply:datetime.date [2017, 1, 31] - start_date: !!python/object/apply:datetime.date [2017, 1, 1] - paid_date: !!python/object/apply:datetime.date [2017, 4, 28] + - date: !date "2017-01-31" + start_date: !date "2017-01-01" + paid_date: !date "2017-04-28" currency: USD - amount: !!python/object/apply:decimal.Decimal ["12.33"] + amount: !decimal "12.33" payee: "O'Reilly Media, Inc." - - date: !!python/object/apply:datetime.date [2016, 12, 31] - start_date: !!python/object/apply:datetime.date [2016, 12, 1] - paid_date: !!python/object/apply:datetime.date [2017, 4, 28] + - date: !date "2016-12-31" + start_date: !date "2016-12-01" + paid_date: !date "2017-04-28" currency: USD - amount: !!python/object/apply:decimal.Decimal ["9.15"] + amount: !decimal "9.15" payee: "O'Reilly Media, Inc." - - date: !!python/object/apply:datetime.date [2016, 9, 30] - start_date: !!python/object/apply:datetime.date [2016, 9, 1] - paid_date: !!python/object/apply:datetime.date [2016, 12, 16] + - date: !date "2016-09-30" + start_date: !date "2016-09-01" + paid_date: !date "2016-12-16" currency: USD - amount: !!python/object/apply:decimal.Decimal ["26.19"] + amount: !decimal "26.19" payee: "O'Reilly Media, Inc." - - date: !!python/object/apply:datetime.date [2016, 8, 31] - start_date: !!python/object/apply:datetime.date [2016, 8, 1] - paid_date: !!python/object/apply:datetime.date [2016, 11, 30] + - date: !date "2016-08-31" + start_date: !date "2016-08-01" + paid_date: !date "2016-11-30" currency: USD - amount: !!python/object/apply:decimal.Decimal ["27.58"] + amount: !decimal "27.58" payee: "O'Reilly Media, Inc." - - date: !!python/object/apply:datetime.date [2010, 3, 31] - start_date: !!python/object/apply:datetime.date [2010, 1, 1] - paid_date: !!python/object/apply:datetime.date [2010, 3, 31] + - date: !date "2010-03-31" + start_date: !date "2010-01-01" + paid_date: !date "2010-03-31" currency: USD - amount: !!python/object/apply:decimal.Decimal ["73.85"] + amount: !decimal "73.85" payee: "O'Reilly Media, Inc." - source: OReillyPayments.csv importer: oreilly.PaymentsImporter expect: - - date: !!python/object/apply:datetime.date [2018, 3, 29] - paid_date: !!python/object/apply:datetime.date [2018, 3, 29] + - date: !date "2018-03-29" + paid_date: !date "2018-03-29" currency: USD - amount: !!python/object/apply:decimal.Decimal ["29.34"] + amount: !decimal "29.34" payee: "O'Reilly Media, Inc." - - date: !!python/object/apply:datetime.date [2017, 4, 27] - paid_date: !!python/object/apply:datetime.date [2017, 4, 28] + - date: !date "2017-04-27" + paid_date: !date "2017-04-28" currency: USD - amount: !!python/object/apply:decimal.Decimal ["26.91"] + amount: !decimal "26.91" payee: "O'Reilly Media, Inc." - - date: !!python/object/apply:datetime.date [2017, 4, 24] - paid_date: !!python/object/apply:datetime.date [2017, 4, 28] + - date: !date "2017-04-24" + paid_date: !date "2017-04-28" currency: USD - amount: !!python/object/apply:decimal.Decimal ["21.48"] + amount: !decimal "21.48" payee: "O'Reilly Media, Inc." - - date: !!python/object/apply:datetime.date [2016, 12, 16] - paid_date: !!python/object/apply:datetime.date [2016, 12, 16] + - date: !date "2016-12-16" + paid_date: !date "2016-12-16" currency: USD - amount: !!python/object/apply:decimal.Decimal ["26.19"] + amount: !decimal "26.19" payee: "O'Reilly Media, Inc." - - date: !!python/object/apply:datetime.date [2016, 11, 29] - paid_date: !!python/object/apply:datetime.date [2016, 11, 30] + - date: !date "2016-11-29" + paid_date: !date "2016-11-30" currency: USD - amount: !!python/object/apply:decimal.Decimal ["27.58"] + amount: !decimal "27.58" payee: "O'Reilly Media, Inc." - - date: !!python/object/apply:datetime.date [2010, 3, 31] - paid_date: !!python/object/apply:datetime.date [2010, 3, 31] + - date: !date "2010-03-31" + paid_date: !date "2010-03-31" currency: USD - amount: !!python/object/apply:decimal.Decimal ["73.85"] + amount: !decimal "73.85" payee: "O'Reilly Media, Inc." - source: YourCause.csv importer: yourcause.DonationsImporter expect: - - date: !!python/object/apply:datetime.date [2018, 12, 20] + - date: !date "2018-12-20" currency: USD original_currency: USD payment_id: "10006789" transaction_id: 2-34567891 - amount: !!python/object/apply:decimal.Decimal [12] - original_amount: !!python/object/apply:decimal.Decimal [12] - received_amount: !!python/object/apply:decimal.Decimal [12] - donor_amount: !!python/object/apply:decimal.Decimal [12] - match_amount: !!python/object/apply:decimal.Decimal [0] + amount: !decimal 12 + original_amount: !decimal 12 + received_amount: !decimal 12 + donor_amount: !decimal 12 + match_amount: !decimal 0 dedication_type: "" dedication: "" designation: Note payee: Dakota Smith donor: Dakota Smith corporation: Company A - - date: !!python/object/apply:datetime.date [2018, 12, 31] + - date: !date "2018-12-31" currency: USD original_currency: USD payment_id: "10006789" transaction_id: 2-34567893 - amount: !!python/object/apply:decimal.Decimal [14] - original_amount: !!python/object/apply:decimal.Decimal [14] - received_amount: !!python/object/apply:decimal.Decimal [14] - donor_amount: !!python/object/apply:decimal.Decimal [14] - match_amount: !!python/object/apply:decimal.Decimal [0] + amount: !decimal 14 + original_amount: !decimal 14 + received_amount: !decimal 14 + donor_amount: !decimal 14 + match_amount: !decimal 0 dedication_type: "" dedication: "" designation: "" payee: Anonymous donor: Anonymous corporation: Company B - - date: !!python/object/apply:datetime.date [2018, 12, 20] + - date: !date "2018-12-20" currency: USD original_currency: USD payment_id: "10006789" transaction_id: 2-34567895 - amount: !!python/object/apply:decimal.Decimal [12] - original_amount: !!python/object/apply:decimal.Decimal [12] - received_amount: !!python/object/apply:decimal.Decimal [12] - donor_amount: !!python/object/apply:decimal.Decimal [0] - match_amount: !!python/object/apply:decimal.Decimal [12] + amount: !decimal 12 + original_amount: !decimal 12 + received_amount: !decimal 12 + donor_amount: !decimal 0 + match_amount: !decimal 12 dedication_type: "" dedication: "" designation: Note payee: Company A donor: Dakota Smith corporation: Company A - - date: !!python/object/apply:datetime.date [2018, 12, 31] + - date: !date "2018-12-31" currency: USD original_currency: USD payment_id: "10006789" transaction_id: 2-34567897 - amount: !!python/object/apply:decimal.Decimal [14] - original_amount: !!python/object/apply:decimal.Decimal [14] - received_amount: !!python/object/apply:decimal.Decimal [14] - donor_amount: !!python/object/apply:decimal.Decimal [0] - match_amount: !!python/object/apply:decimal.Decimal [14] + amount: !decimal 14 + original_amount: !decimal 14 + received_amount: !decimal 14 + donor_amount: !decimal 0 + match_amount: !decimal 14 dedication_type: "" dedication: "" designation: "" payee: Company B donor: Anonymous corporation: Company B - - date: !!python/object/apply:datetime.date [2018, 12, 15] + - date: !date "2018-12-15" currency: USD original_currency: GBP payment_id: "10006789" transaction_id: 2-34567899 - amount: !!python/object/apply:decimal.Decimal ["12.50"] - original_amount: !!python/object/apply:decimal.Decimal [10] - received_amount: !!python/object/apply:decimal.Decimal ["12.50"] - donor_amount: !!python/object/apply:decimal.Decimal ["12.50"] - match_amount: !!python/object/apply:decimal.Decimal [0] + amount: !decimal "12.50" + original_amount: !decimal 10 + received_amount: !decimal "12.50" + donor_amount: !decimal "12.50" + match_amount: !decimal 0 dedication_type: "" dedication: "" designation: "" @@ -968,7 +969,7 @@ - source: EventBrite.csv importer: eventbrite.SalesImporter expect: - - date: !!python/object/apply:datetime.date [2018, 11, 27] + - date: !date "2018-11-27" currency: USD event_name: First Event event_id: "12345678901" @@ -977,13 +978,13 @@ payee: Alex Jones corporation: "" ticket_type: Discount Ticket - quantity: !!python/object/apply:decimal.Decimal ["1"] - amount: !!python/object/apply:decimal.Decimal ["10"] - total_fees: !!python/object/apply:decimal.Decimal ["3.99"] - eventbrite_fees: !!python/object/apply:decimal.Decimal ["2.99"] - payment_fees: !!python/object/apply:decimal.Decimal ["1"] - tax: !!python/object/apply:decimal.Decimal [0] - - date: !!python/object/apply:datetime.date [2018, 12, 6] + quantity: !decimal "1" + amount: !decimal "10" + total_fees: !decimal "3.99" + eventbrite_fees: !decimal "2.99" + payment_fees: !decimal "1" + tax: !decimal 0 + - date: !date "2018-12-06" currency: USD event_name: First Event event_id: "12345678901" @@ -992,13 +993,13 @@ payee: Bret Baker corporation: "" ticket_type: Regular Ticket - quantity: !!python/object/apply:decimal.Decimal ["1"] - amount: !!python/object/apply:decimal.Decimal ["30"] - total_fees: !!python/object/apply:decimal.Decimal ["3.99"] - eventbrite_fees: !!python/object/apply:decimal.Decimal ["2.99"] - payment_fees: !!python/object/apply:decimal.Decimal ["1"] - tax: !!python/object/apply:decimal.Decimal [0] - - date: !!python/object/apply:datetime.date [2019, 1, 7] + quantity: !decimal "1" + amount: !decimal "30" + total_fees: !decimal "3.99" + eventbrite_fees: !decimal "2.99" + payment_fees: !decimal "1" + tax: !decimal 0 + - date: !date "2019-01-07" currency: USD event_name: First Event event_id: "12345678901" @@ -1007,13 +1008,13 @@ payee: Cam Smith corporation: SampleCo ticket_type: Premium Ticket - quantity: !!python/object/apply:decimal.Decimal ["1"] - amount: !!python/object/apply:decimal.Decimal ["60"] - total_fees: !!python/object/apply:decimal.Decimal ["6.39"] - eventbrite_fees: !!python/object/apply:decimal.Decimal ["4.39"] - payment_fees: !!python/object/apply:decimal.Decimal ["2"] - tax: !!python/object/apply:decimal.Decimal [0] - - date: !!python/object/apply:datetime.date [2019, 1, 23] + quantity: !decimal "1" + amount: !decimal "60" + total_fees: !decimal "6.39" + eventbrite_fees: !decimal "4.39" + payment_fees: !decimal "2" + tax: !decimal 0 + - date: !date "2019-01-23" currency: EUR event_name: Second Event event_id: "12345678902" @@ -1022,34 +1023,34 @@ payee: Jam Jones corporation: "" ticket_type: Discount Ticket - quantity: !!python/object/apply:decimal.Decimal ["1"] - amount: !!python/object/apply:decimal.Decimal ["25"] - total_fees: !!python/object/apply:decimal.Decimal ["3.99"] - eventbrite_fees: !!python/object/apply:decimal.Decimal ["2.99"] - payment_fees: !!python/object/apply:decimal.Decimal ["1"] - tax: !!python/object/apply:decimal.Decimal [0] + quantity: !decimal "1" + amount: !decimal "25" + total_fees: !decimal "3.99" + eventbrite_fees: !decimal "2.99" + payment_fees: !decimal "1" + tax: !decimal 0 - source: GitHubSponsors.csv importer: github.SponsorsImporter expect: - - date: !!python/object/apply:datetime.date [2020, 1, 2] + - date: !date "2020-01-02" payee: exampleA handle: exampleA email: ajones@example.com transaction_id: ch_1Gabcdefghijklmnopqrstuv - amount: !!python/object/apply:decimal.Decimal ["1"] + amount: !decimal "1" currency: USD - - date: !!python/object/apply:datetime.date [2020, 1, 3] + - date: !date "2020-01-03" payee: exampleB handle: exampleB email: "" transaction_id: 1023ABCD5678EFGHI - amount: !!python/object/apply:decimal.Decimal ["10"] + amount: !decimal "10" currency: USD - - date: !!python/object/apply:datetime.date [2020, 1, 4] + - date: !date "2020-01-04" payee: exampleC handle: exampleC email: info@example.com transaction_id: ch_1Gabcdefghijklmnopqrstuw - amount: !!python/object/apply:decimal.Decimal ["120"] + amount: !decimal "120" currency: USD diff --git a/tests/test_importers.py b/tests/test_importers.py index 01d66e6..605cffe 100644 --- a/tests/test_importers.py +++ b/tests/test_importers.py @@ -6,7 +6,6 @@ import importlib import itertools import pathlib import shutil -import re import pytest import yaml @@ -14,14 +13,23 @@ from import2ledger import importers, strparse from . import DATA_DIR -try: - load_yaml = yaml.full_load -except AttributeError: - load_yaml = yaml.load + +def decimal_constructor(loader, node): + value = loader.construct_scalar(node) + return decimal.Decimal(value) + + +def date_constructor(loader, node): + value = loader.construct_scalar(node) + return datetime.date.fromisoformat(value) + class TestImporters: + Loader = yaml.Loader + Loader.add_constructor('!decimal', decimal_constructor) + Loader.add_constructor('!date', date_constructor) with pathlib.Path(DATA_DIR, 'imports.yml').open() as yaml_file: - test_data = load_yaml(yaml_file) + test_data = yaml.load(yaml_file, Loader=Loader) for test in test_data: test['source'] = DATA_DIR / test['source']