-
-
Notifications
You must be signed in to change notification settings - Fork 227
Expand file tree
/
Copy pathresets.py
More file actions
58 lines (41 loc) · 1.53 KB
/
resets.py
File metadata and controls
58 lines (41 loc) · 1.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
from datetime import date, datetime, timedelta
from dateutil.relativedelta import relativedelta
def _today():
return date.today()
def _timestamp(start, end):
return int(start.timestamp()), int(end.timestamp())
def _daily(user=None, **kwargs):
dt = _today()
start = datetime(dt.year, dt.month, dt.day)
end = datetime(dt.year, dt.month, dt.day) + timedelta(days=1)
return _timestamp(start, end)
def _weekly(user=None, **kwargs):
dt = _today()
start = dt - timedelta(days=dt.weekday())
start = datetime(start.year, start.month, start.day)
end = start + timedelta(days=7)
return _timestamp(start, end)
def _monthly(user=None, **kwargs):
dt = _today()
start = datetime(dt.year, dt.month, 1)
end = datetime(dt.year, dt.month, 1) + relativedelta(months=1)
return _timestamp(start, end)
def _monthly_subscription(user, **kwargs):
dt = _today()
day_joined = user.date_joined.day
# subscription cycle starts on the day of month the user joined
start = datetime(dt.year, dt.month, day_joined)
# if the start date is in the future, shift to previous month
if start > datetime(dt.year, dt.month, dt.day):
start = start - relativedelta(months=1)
end = datetime(start.year, start.month, day_joined) + relativedelta(months=1)
return _timestamp(start, end)
def _never(user=None, **kwargs):
return 0, None
resets = {
"daily": _daily,
"weekly": _weekly,
"monthly": _monthly,
"monthly_subscription": _monthly_subscription,
"never": _never,
}