krz/hutch-stats
Server-side utility for calculating contributions for sourcehut users.
clone: git clone https://gitbay.org/krz/hutch-stats.git
main: src/srht_contrib/utils/dates.py · raw
1from __future__ import annotations
2
3from datetime import UTC, date, datetime, time, timedelta
4
5
6def ensure_utc(dt: datetime) -> datetime:
7 if dt.tzinfo is None:
8 return dt.replace(tzinfo=UTC)
9 return dt.astimezone(UTC)
10
11
12def parse_date(value: str) -> date:
13 return date.fromisoformat(value)
14
15
16def parse_datetime(value: str) -> datetime:
17 normalized = value.replace("Z", "+00:00")
18 return ensure_utc(datetime.fromisoformat(normalized))
19
20
21def date_range(start: date, end: date) -> list[date]:
22 days: list[date] = []
23 current = start
24 while current <= end:
25 days.append(current)
26 current += timedelta(days=1)
27 return days
28
29
30def year_bounds(year: int) -> tuple[date, date]:
31 return date(year, 1, 1), date(year, 12, 31)
32
33
34def date_to_utc_bounds(value: date) -> tuple[datetime, datetime]:
35 start = datetime.combine(value, time.min, tzinfo=UTC)
36 end = datetime.combine(value, time.max, tzinfo=UTC)
37 return start, end