From 0eb014aeeb2ee589dbb3bef28e3cbd15023cd174 Mon Sep 17 00:00:00 2001 From: Brett Smith Date: Tue, 10 Jul 2018 11:36:07 -0400 Subject: [PATCH] patreon: New importer for payouts. --- README.rst | 15 +++++++++++++++ import2ledger/importers/patreon.py | 28 ++++++++++++++++++++++++++++ setup.py | 2 +- tests/data/PatreonPayouts.csv | 4 ++++ tests/data/imports.yml | 16 ++++++++++++++++ 5 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 tests/data/PatreonPayouts.csv diff --git a/README.rst b/README.rst index 190897b..3cdc32a 100644 --- a/README.rst +++ b/README.rst @@ -201,6 +201,21 @@ Patreon ``patreon income ledger entry`` Imports one transaction per patron per month. Generated from Patreon's monthly patron report CSVs. +``patreon payout ledger entry`` + Imports one transaction per month for that month's payout. Generated from Patreon's payout report CSV. + + This template can use these variables: + + =============== =========================================================== + Name Contents + =============== =========================================================== + pledges_amount A decimal with the amount paid out by Patreon to pledges + you've made + --------------- ----------------------------------------------------------- + transfer_amount A decimal with the amount paid out by Patreon to your bank + account + =============== =========================================================== + ``patreon cardfees ledger entry`` Imports one expense transaction per month for that month's credit card fees. Generated from Patreon's earnings report CSV. diff --git a/import2ledger/importers/patreon.py b/import2ledger/importers/patreon.py index ae347be..e1ee210 100644 --- a/import2ledger/importers/patreon.py +++ b/import2ledger/importers/patreon.py @@ -34,6 +34,34 @@ class IncomeImporter(_csv.CSVImporterBase): } +class PayoutImporter(_csv.CSVImporterBase): + AMOUNT_KEY = 'Total funds deducted from creator balance' + PLEDGE_KEY = 'Funds used for pledges to other creators' + TRANSFER_KEY = 'Funds transferred to you' + NEEDED_FIELDS = frozenset([ + 'Month', + TRANSFER_KEY, + PLEDGE_KEY, + AMOUNT_KEY, + ]) + ENTRY_SEED = { + 'currency': 'USD', + 'payee': 'Patreon', + } + + def _read_row(self, row): + amount = strparse.currency_decimal(row[self.AMOUNT_KEY]) + if not amount: + return None + else: + return { + 'amount': amount, + 'date': strparse.date(row['Month'], '%Y-%m'), + 'pledges_amount': strparse.currency_decimal(row[self.PLEDGE_KEY]), + 'transfer_amount': strparse.currency_decimal(row[self.TRANSFER_KEY]), + } + + class FeeImporterBase(_csv.CSVImporterBase): ENTRY_SEED = { 'currency': 'USD', diff --git a/setup.py b/setup.py index 859ff7a..fa81058 100755 --- a/setup.py +++ b/setup.py @@ -30,7 +30,7 @@ REQUIREMENTS['tests_require'] = [ setup( name='import2ledger', description="Import different sources of financial data to Ledger", - version='0.5', + version='0.6', author='Brett Smith', author_email='brettcsmith@brettcsmith.org', license='GNU AGPLv3+', diff --git a/tests/data/PatreonPayouts.csv b/tests/data/PatreonPayouts.csv new file mode 100644 index 0000000..47617da --- /dev/null +++ b/tests/data/PatreonPayouts.csv @@ -0,0 +1,4 @@ +Month,Funds transferred to you,Funds used for pledges to other creators,Total funds deducted from creator balance +2018-03,$0,$0,$0 +2018-04,$123.45,$0,$123.45 +2018-05,"$2,345.67",$0,"$2,345.67" diff --git a/tests/data/imports.yml b/tests/data/imports.yml index 3a809be..b0216d7 100644 --- a/tests/data/imports.yml +++ b/tests/data/imports.yml @@ -62,6 +62,22 @@ country_code: CZ country_name: Czech Republic +- source: PatreonPayouts.csv + 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"] + 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"] + currency: USD + - source: StripePayments.csv importer: stripe.PaymentImporter expect: