Coverage for baibu/metrics/management/commands/compute_metrics.py: 100%
27 statements
« prev ^ index » next coverage.py v7.10.7, created at 2026-10-06 13:07 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2026-10-06 13:07 +0000
1from datetime import date
3from django.core.management.base import BaseCommand
4from django.core.management.base import CommandError
5from django.utils import timezone
7from baibu.metrics import rollups
10def _date(value: str) -> date:
11 try:
12 return date.fromisoformat(value)
13 except ValueError as exc:
14 msg = f"Not a date (YYYY-MM-DD): {value}"
15 raise CommandError(msg) from exc
18class Command(BaseCommand):
19 help = (
20 "Compute the usage rollups for a range of days (default: yesterday), replacing stored values. "
21 "Days are in the platform time zone."
22 )
24 def add_arguments(self, parser):
25 parser.add_argument("--start", type=_date, help="First day, YYYY-MM-DD. Default: --end.")
26 parser.add_argument("--end", type=_date, help="Last day, YYYY-MM-DD. Default: yesterday.")
28 def handle(self, *args, start=None, end=None, **options):
29 end = end or rollups.yesterday()
30 start = start or end
31 if start > end:
32 msg = "--start must not be after --end."
33 raise CommandError(msg)
34 if end >= timezone.localdate():
35 msg = "Only finished days can be computed; --end must be before today."
36 raise CommandError(msg)
37 days = rollups.store_range(start, end)
38 self.stdout.write(f"Computed {days} day(s), {start} to {end}.")