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