period.default_to приводит к устаревшему периоду при --send без --date #50

Closed
opened 2026-07-10 16:10:57 +07:00 by artem.kokos · 1 comment
Owner

Команда: redmine-reporter --send (без --date)

Фактический результат:
Отчёт сгенерирован за 2026-06-30--2026-07-31, хотя сегодня 10 июля 2026.

Ожидаемый результат:
При --send без --date период должен быть актуальным относительно текущей даты (например, текущий месяц или с начала месяца до сегодня).

Корневая причина
В redmine_reporter/config.py:get_default_date_range() приоритет такой:

  1. env DEFAULT_FROM_DATE/DEFAULT_TO_DATE
  2. если period.dynamic=true и есть period.last_used — вычислить следующий период
  3. иначе использовать period.default_from/period.default_to
  4. иначе текущий месяц

Если dynamic=true, но last_used ещё нет (потому что --commit ещё не вызывался), инструмент берёт зашитые default_from/default_to, которые со временем устаревают.

Проблема концептуальная
Поле period.default_to по смыслу означает «до этого момента», но в реальности момент меняется каждый день. Хранить фиксированную дату окончания в конфиге некорректно для режима автоматических отчётов.

Возможные решения

  1. При period.dynamic=true и отсутствующем last_used игнорировать default_from/default_to и использовать текущий месяц.
  2. Убрать period.default_to из конфигурации; default_from оставить как стартовую точку, конец периода вычислять автоматически (сегодня или конец месяца).
  3. Добавить предупреждение, если используемый default_to находится в прошлом/будущем относительно текущей даты.

Релевантный код

  • redmine_reporter/config.py:370-399get_default_date_range()
  • redmine_reporter/cli.py:371-377 — разбор периода при отсутствии --date
**Команда:** `redmine-reporter --send` (без `--date`) **Фактический результат:** Отчёт сгенерирован за `2026-06-30--2026-07-31`, хотя сегодня 10 июля 2026. **Ожидаемый результат:** При `--send` без `--date` период должен быть актуальным относительно текущей даты (например, текущий месяц или с начала месяца до сегодня). **Корневая причина** В `redmine_reporter/config.py:get_default_date_range()` приоритет такой: 1. env `DEFAULT_FROM_DATE`/`DEFAULT_TO_DATE` 2. если `period.dynamic=true` и есть `period.last_used` — вычислить следующий период 3. иначе использовать `period.default_from`/`period.default_to` 4. иначе текущий месяц Если `dynamic=true`, но `last_used` ещё нет (потому что `--commit` ещё не вызывался), инструмент берёт зашитые `default_from`/`default_to`, которые со временем устаревают. **Проблема концептуальная** Поле `period.default_to` по смыслу означает «до этого момента», но в реальности момент меняется каждый день. Хранить фиксированную дату окончания в конфиге некорректно для режима автоматических отчётов. **Возможные решения** 1. При `period.dynamic=true` и отсутствующем `last_used` игнорировать `default_from`/`default_to` и использовать текущий месяц. 2. Убрать `period.default_to` из конфигурации; `default_from` оставить как стартовую точку, конец периода вычислять автоматически (сегодня или конец месяца). 3. Добавить предупреждение, если используемый `default_to` находится в прошлом/будущем относительно текущей даты. **Релевантный код** - `redmine_reporter/config.py:370-399` — `get_default_date_range()` - `redmine_reporter/cli.py:371-377` — разбор периода при отсутствии `--date`
Author
Owner

Уточнение по предпочтительному фиксу:

Если period.default_to не указан в конфиге, использовать текущую дату (today) в качестве конца периода по умолчанию. period.default_from остаётся заданным вручную.

Пример:

period:
  default_from: '2026-07-01'
  # default_to отсутствует

При запуске --send 10 июля 2026 без --date период должен быть 2026-07-01--2026-07-10, а не 2026-07-01--2026-07-31 и не устаревший default_to.

Это сохраняет обратную совместимость: если default_to задан явно — используется он. Если нет — берётся сегодня.

Уточнение по предпочтительному фиксу: Если `period.default_to` не указан в конфиге, использовать текущую дату (`today`) в качестве конца периода по умолчанию. `period.default_from` остаётся заданным вручную. Пример: ```yaml period: default_from: '2026-07-01' # default_to отсутствует ``` При запуске `--send` 10 июля 2026 без `--date` период должен быть `2026-07-01--2026-07-10`, а не `2026-07-01--2026-07-31` и не устаревший `default_to`. Это сохраняет обратную совместимость: если `default_to` задан явно — используется он. Если нет — берётся сегодня.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: artem.kokos/redmine-reporter#50