[Bug] dynamic: true + precision: datetime без --date падает: parse_date_range принимает только даты #59

Closed
opened 2026-07-16 18:25:01 +07:00 by artem.kokos · 0 comments
Owner

Проблема

При сочетании period.dynamic: true и period.precision: datetime запуск без --date падает:

ValueError: Date range must be in format YYYY-MM-DD--YYYY-MM-DD

Причина: compute_next_period() для precision: datetime возвращает диапазон вида 2026-07-10T12:00:01--2026-07-20T00:00:01, который get_default_date_range() (redmine_reporter/config.py:385-390) подставляет как период по умолчанию. А parse_date_range() (redmine_reporter/cli.py:21-42) принимает только даты:

date_pattern = r"\d{4}-\d{2}-\d{2}"
if not re.fullmatch(date_pattern, from_date) or not re.fullmatch(date_pattern, to_date):
    raise ValueError("Date range must be in format YYYY-MM-DD--YYYY-MM-DD")

Подтверждено экспериментом: compute_next_period(..., "datetime")2026-07-10T12:00:01--2026-07-20T00:00:01; parse_date_range его отвергает.

Иными словами, режим precision: datetime из #47 неработоспособен в основном сценарии — автоматическом вычислении следующего периода — даже после исправления краша дедупликации (см. связанную задачу про naive/aware datetime).

Пример воспроизведения

period:
  precision: datetime
  dynamic: true
  last_used:
    from: "2026-07-01T00:00:00"
    to: "2026-07-10T12:00:00"
redmine-reporter --compact   # без --date → ValueError

Рекомендации

  1. Научить parse_date_range() принимать ISO datetime (YYYY-MM-DDTHH:MM:SS) в дополнение к дате при period.precision: datetime — либо нормализовать период к датам на стороне get_default_date_range()/compute_next_period() до передачи в парсер. Выбрать один подход и задокументировать.
  2. Тесты: dynamic + datetime без --date (полный цикл), --date с datetime-строками при precision: datetime, неизменность поведения при precision: date.

Связанные места

Критерии приёмки

  • Конфиг из примера выше отрабатывает без ошибок и строит отчёт за вычисленный период.
  • При precision: date поведение не изменилось.
  • Добавлены регрессионные тесты.
## Проблема При сочетании `period.dynamic: true` и `period.precision: datetime` запуск без `--date` падает: ``` ValueError: Date range must be in format YYYY-MM-DD--YYYY-MM-DD ``` Причина: `compute_next_period()` для `precision: datetime` возвращает диапазон вида `2026-07-10T12:00:01--2026-07-20T00:00:01`, который `get_default_date_range()` (`redmine_reporter/config.py:385-390`) подставляет как период по умолчанию. А `parse_date_range()` (`redmine_reporter/cli.py:21-42`) принимает только даты: ```python date_pattern = r"\d{4}-\d{2}-\d{2}" if not re.fullmatch(date_pattern, from_date) or not re.fullmatch(date_pattern, to_date): raise ValueError("Date range must be in format YYYY-MM-DD--YYYY-MM-DD") ``` Подтверждено экспериментом: `compute_next_period(..., "datetime")` → `2026-07-10T12:00:01--2026-07-20T00:00:01`; `parse_date_range` его отвергает. Иными словами, режим `precision: datetime` из #47 неработоспособен в основном сценарии — автоматическом вычислении следующего периода — даже после исправления краша дедупликации (см. связанную задачу про naive/aware datetime). ## Пример воспроизведения ```yaml period: precision: datetime dynamic: true last_used: from: "2026-07-01T00:00:00" to: "2026-07-10T12:00:00" ``` ```bash redmine-reporter --compact # без --date → ValueError ``` ## Рекомендации 1. Научить `parse_date_range()` принимать ISO datetime (`YYYY-MM-DDTHH:MM:SS`) в дополнение к дате при `period.precision: datetime` — либо нормализовать период к датам на стороне `get_default_date_range()`/`compute_next_period()` до передачи в парсер. Выбрать один подход и задокументировать. 2. Тесты: dynamic + datetime без `--date` (полный цикл), `--date` с datetime-строками при `precision: datetime`, неизменность поведения при `precision: date`. ## Связанные места - `redmine_reporter/cli.py:21-42` (`parse_date_range`) - `redmine_reporter/config.py:370-399` (`get_default_date_range`) - `redmine_reporter/config.py` (`compute_next_period`) - Задачи #47, #44 ## Критерии приёмки - [ ] Конфиг из примера выше отрабатывает без ошибок и строит отчёт за вычисленный период. - [ ] При `precision: date` поведение не изменилось. - [ ] Добавлены регрессионные тесты.
artem.kokos added the bugcli labels 2026-07-16 18:25:01 +07:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: artem.kokos/redmine-reporter#59