Skip to content

Commit 4807e62

Browse files
authored
Merge pull request #179 from rambo/issue-25
Implement "since" to addrecurring management command
2 parents db71da1 + e820452 commit 4807e62

File tree

3 files changed

+45
-11
lines changed

3 files changed

+45
-11
lines changed

project/asylum/utils.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
# -*- coding: utf-8 -*-
2+
import calendar
3+
import datetime
24
import importlib
35
import random
46

@@ -26,3 +28,19 @@ def get_random_objects(klass, num=1):
2628
random_index = random.randint(0, count - 1)
2729
ret.append(klass.objects.all()[random_index])
2830
return ret
31+
32+
33+
# Adapted from http://www.ianlewis.org/en/python-date-range-iterator
34+
def months(from_date=None, to_date=None):
35+
from_date = from_date or datetime.datetime.now().date()
36+
while to_date is None or from_date <= to_date:
37+
yield from_date
38+
from_date = from_date + datetime.timedelta(days=calendar.monthrange(from_date.year, from_date.month)[1])
39+
return
40+
41+
42+
def datetime_proxy(delta=datetime.timedelta(days=1)):
43+
"""Used by management commands needing datetime X days ago"""
44+
now_yesterday = datetime.datetime.now() - delta
45+
start_yesterday = datetime.datetime.combine(now_yesterday.date(), datetime.datetime.min.time())
46+
return start_yesterday.isoformat()
Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,33 @@
11
# -*- coding: utf-8 -*-
2+
import datetime
3+
import itertools
4+
5+
import dateutil.parser
26
from creditor.models import RecurringTransaction
37
from django.core.management.base import BaseCommand, CommandError
8+
from django.utils import timezone
9+
10+
from asylum.utils import datetime_proxy, months
411

512

613
class Command(BaseCommand):
714
help = 'Gets all RecurringTransactions and runs conditional_add_transaction()'
815

16+
def add_arguments(self, parser):
17+
parser.add_argument('since', type=str, nargs='?', default=datetime_proxy(), help='Run for each month since the date, defaults to yesterday midnight')
18+
919
def handle(self, *args, **options):
20+
since_parsed = timezone.make_aware(dateutil.parser.parse(options['since']))
21+
if options['verbosity'] > 2:
22+
print("Processing since %s" % since_parsed.isoformat())
23+
1024
for t in RecurringTransaction.objects.all():
11-
ret = t.conditional_add_transaction()
12-
if ret:
13-
if options['verbosity'] > 1:
14-
print("Created transaction %s" % ret)
25+
if options['verbosity'] > 2:
26+
print("Processing: %s" % t)
27+
for month in months(since_parsed, timezone.now()):
28+
if options['verbosity'] > 2:
29+
print(" month %s" % month.isoformat())
30+
ret = t.conditional_add_transaction(month)
31+
if ret:
32+
if options['verbosity'] > 1:
33+
print("Created transaction %s" % ret)

project/holviapp/management/commands/import_holvidata.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,19 @@
44

55
import dateutil.parser
66
from django.core.management.base import BaseCommand, CommandError
7+
from django.utils import timezone
78
from holviapp.importer import HolviImporter
89
from holviapp.utils import list_invoices, list_orders
910

10-
11-
def yesterday_proxy():
12-
now_yesterday = datetime.datetime.now() - datetime.timedelta(days=1)
13-
start_yesterday = datetime.datetime.combine(now_yesterday.date(), datetime.datetime.min.time())
14-
return start_yesterday.isoformat()
11+
from asylum.utils import datetime_proxy
1512

1613

1714
class Command(BaseCommand):
1815
help = 'Import transaction data from Holvi API'
1916

2017
def add_arguments(self, parser):
2118
parser.add_argument('--all', action='store_true', help='Import all Holvi transactions (WARNING: this may take forever)')
22-
parser.add_argument('since', type=str, nargs='?', default=yesterday_proxy(), help='Import transactions updated since datetime, defaults to yesterday midnight')
19+
parser.add_argument('since', type=str, nargs='?', default=datetime_proxy(), help='Import transactions updated since datetime, defaults to yesterday midnight')
2320

2421
def handle(self, *args, **options):
2522
if (not options['since']
@@ -28,7 +25,7 @@ def handle(self, *args, **options):
2825
invoice_filters = {}
2926
order_filters = {}
3027
if not options.get('all', False):
31-
since_parsed = dateutil.parser.parse(options['since'])
28+
since_parsed = timezone.make_aware(dateutil.parser.parse(options['since']))
3229
if options['verbosity'] > 1:
3330
print("Importing since %s" % since_parsed.isoformat())
3431
invoice_filters['update_time_from'] = since_parsed.isoformat()

0 commit comments

Comments
 (0)