importers.amazon: Initial version.
This commit is contained in:
parent
11eccb60dd
commit
25c6454e2d
1 changed files with 66 additions and 0 deletions
66
import2ledger/importers/amazon.py
Normal file
66
import2ledger/importers/amazon.py
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
import datetime
|
||||||
|
import itertools
|
||||||
|
|
||||||
|
from . import _csv
|
||||||
|
from .. import strparse
|
||||||
|
|
||||||
|
class NewMonthEarnings(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class MonthlyEarnings:
|
||||||
|
def __init__(self):
|
||||||
|
self.dates = []
|
||||||
|
self.amounts = []
|
||||||
|
|
||||||
|
def in_same_month(self, date):
|
||||||
|
try:
|
||||||
|
start_date = self.dates[0]
|
||||||
|
except IndexError:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return start_date.year == date.year and start_date.month == date.month
|
||||||
|
|
||||||
|
def add(self, row):
|
||||||
|
date = strparse.date(strparse.slice_words(row['Date Shipped'], 0), '%Y-%m-%d')
|
||||||
|
amount = strparse.currency_decimal(row['Ad Fees($)'])
|
||||||
|
if self.in_same_month(date):
|
||||||
|
self.dates.append(date)
|
||||||
|
self.amounts.append(amount)
|
||||||
|
else:
|
||||||
|
raise NewMonthEarnings()
|
||||||
|
|
||||||
|
def report(self):
|
||||||
|
return {
|
||||||
|
'amount': sum(self.amounts),
|
||||||
|
'date': max(self.dates),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class EarningsImporter(_csv.CSVImporterBase):
|
||||||
|
SENTINEL_ROW = {
|
||||||
|
'Ad Fees($)': '0',
|
||||||
|
'Date Shipped': '1979-07-09',
|
||||||
|
}
|
||||||
|
NEEDED_FIELDS = frozenset(SENTINEL_ROW.keys())
|
||||||
|
TEMPLATE_KEY = 'template amazon earnings'
|
||||||
|
ENTRY_SEED = {
|
||||||
|
'currency': 'USD',
|
||||||
|
'payee': 'Amazon',
|
||||||
|
}
|
||||||
|
|
||||||
|
def __init__(self, input_file):
|
||||||
|
super().__init__(input_file)
|
||||||
|
self.in_csv = itertools.chain(self.in_csv, [self.SENTINEL_ROW])
|
||||||
|
self.earnings = MonthlyEarnings()
|
||||||
|
|
||||||
|
def _read_row(self, row):
|
||||||
|
try:
|
||||||
|
self.earnings.add(row)
|
||||||
|
except NewMonthEarnings:
|
||||||
|
retval = self.earnings.report()
|
||||||
|
self.earnings = MonthlyEarnings()
|
||||||
|
self.earnings.add(row)
|
||||||
|
else:
|
||||||
|
retval = None
|
||||||
|
return retval
|
Loading…
Reference in a new issue