|
13 | 13 | from datetime import timedelta
|
14 | 14 |
|
15 | 15 | from dateutil.relativedelta import FR as FRIDAY
|
16 |
| -from dateutil.relativedelta import MO as MONDAY |
17 | 16 | from dateutil.relativedelta import relativedelta as delta
|
18 | 17 |
|
19 | 18 | from did import utils
|
@@ -125,6 +124,17 @@ def quarter(self):
|
125 | 124 | f"Invalid quarter start '{month}', should be integer.")
|
126 | 125 | return month
|
127 | 126 |
|
| 127 | + @property |
| 128 | + def week(self): |
| 129 | + """ The first day of the week, 0 (Monday) by default""" |
| 130 | + week = self.parser.get("general", "week", fallback=0) |
| 131 | + try: |
| 132 | + week = int(week) % 7 |
| 133 | + except ValueError as exc: |
| 134 | + raise ConfigError( |
| 135 | + f"Invalid week start '{week}', should be integer.") from exc |
| 136 | + return week |
| 137 | + |
128 | 138 | @property
|
129 | 139 | def email(self):
|
130 | 140 | """ User email(s) """
|
@@ -256,14 +266,18 @@ def __sub__(self, subtrahend):
|
256 | 266 | @staticmethod
|
257 | 267 | def this_week():
|
258 | 268 | """ Return start and end date of the current week. """
|
259 |
| - since = TODAY + delta(weekday=MONDAY(-1)) |
| 269 | + since = TODAY + delta(day=1) |
| 270 | + while since.weekday() != Config().week: |
| 271 | + since -= delta(days=1) |
260 | 272 | until = since + delta(weeks=1)
|
261 | 273 | return Date(since), Date(until)
|
262 | 274 |
|
263 | 275 | @staticmethod
|
264 | 276 | def last_week():
|
265 | 277 | """ Return start and end date of the last week. """
|
266 |
| - since = TODAY + delta(weekday=MONDAY(-2)) |
| 278 | + since = TODAY - delta(weeks=1) |
| 279 | + while since.weekday() != Config().week: |
| 280 | + since -= delta(days=1) |
267 | 281 | until = since + delta(weeks=1)
|
268 | 282 | return Date(since), Date(until)
|
269 | 283 |
|
|
0 commit comments