feat: filter Wishlist from --my-tasks; document the mode (#71)
Tasks in the "Wishlist" bucket version are now excluded from the list and summary entirely (no due date, noise backlog); exact case match, tasks without a version are unaffected. Document --my-tasks in README and the user guide (sorting, summary metrics, OSC 8 links, stream separation); all examples use synthetic data. Declare ruff known-first-party in pyproject so the lint result is CWD-independent.
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
- [Первоначальная настройка](#первоначальная-настройка)
|
||||
- [Выбор периода](#выбор-периода)
|
||||
- [Отчёт за другого пользователя](#отчёт-за-другого-пользователя)
|
||||
- [Список открытых задач](#список-открытых-задач)
|
||||
- [Экспорт в файл](#экспорт-в-файл)
|
||||
- [Содержимое отчёта](#содержимое-отчёта)
|
||||
- [Отправка по email](#отправка-по-email)
|
||||
@@ -115,6 +116,70 @@ redmine-reporter --user-name "Иванов Иван Иванович"
|
||||
- Несколько совпадений по имени → ошибка «Multiple users match...» со списком логинов (при дублях логина — ID).
|
||||
- Ноль совпадений → ошибка «User '...' not found...».
|
||||
|
||||
## Список открытых задач
|
||||
|
||||
`--my-tasks` -- отдельный режим: вместо отчёта по затраченному времени выводит
|
||||
открытые задачи, назначенные на вас, по всем проектам. Отчётное окно периода
|
||||
к режиму не применяется.
|
||||
|
||||
```bash
|
||||
redmine-reporter --my-tasks # задачи владельца API-ключа
|
||||
redmine-reporter --my-tasks --user-id 42 # чужой список по ID
|
||||
redmine-reporter --my-tasks --user-login ivanov # по логину
|
||||
```
|
||||
|
||||
Правила:
|
||||
|
||||
- `--user-id` / `--user-login` / `--user-name` выбирают, чей список показать; по умолчанию -- владелец API-ключа. Разрешение пользователей то же, что для отчёта (см. [Отчёт за другого пользователя](#отчёт-за-другого-пользователя)).
|
||||
- `--url`, `--api-key`, `--config`, `--config-path`, `--verbose`, `--debug` работают как обычно.
|
||||
- Совмещение с отчётными флагами (`--date`, `--output`, `--compact`, `--summary`, `--no-time`, `--by-activity`, `--commit`, `--send`) -- ошибка «--my-tasks cannot be used with report-generating flags.», exit 1.
|
||||
- Задачи в версии `Wishlist` исключаются из режима целиком: не попадают ни в таблицу, ни в сводку.
|
||||
|
||||
Сортировка -- от срочного к менее срочному:
|
||||
|
||||
1. Приоритет `P1..P5`: меньший номер срочнее; неизвестное имя приоритета получает низший ранг.
|
||||
2. Внутри приоритетной группы -- срок версии (due date) по возрастанию.
|
||||
3. Задачи без версии или без срока -- в конец своей приоритетной группы.
|
||||
4. При прочих равных -- по возрастанию ID.
|
||||
|
||||
Таблица печатается в stdout, сводка -- в stderr перед таблицей. При
|
||||
перенаправлении (`redmine-reporter --my-tasks > tasks.txt`) в файл попадает
|
||||
только таблица.
|
||||
|
||||
Колонки таблицы: ID | Тема | Статус | Приор. | Версия | Срок. Пример
|
||||
(синтетические данные, ID в терминале кликабелен):
|
||||
|
||||
```
|
||||
ID Тема Статус Приор. Версия Срок
|
||||
---- -------------------------------- -------------- -------- -------- --------------
|
||||
101 Критический дефект сборки образа В работе P1 v2.4.0 2026-10-15 (!)
|
||||
102 Обновить документацию API Новая P2 v2.5.0 2026-12-01
|
||||
103 Ревью pull request Обратная связь P3 - -
|
||||
```
|
||||
|
||||
- ID -- гиперссылка (OSC 8) на страницу задачи `<url>/issues/<id>`: в терминалах с поддержкой кликабельна, без поддержки остаётся обычным номером.
|
||||
- Срок -- дата релиза целевой версии; просроченный (раньше сегодняшней даты) помечается `(!)`.
|
||||
- Пустые «Версия» и «Срок» -- прочерк `-`.
|
||||
- Статусы переводятся на русский тем же словарём, что и в отчётах: встроенный словарь + `report.status_translation` (см. [Перевод статусов](#перевод-статусов)).
|
||||
|
||||
Сводка (пример с синтетическими данными):
|
||||
|
||||
```
|
||||
Открытых: 3 | просроченных: 1 | без версии: 1 | без срока: 0 | потрачено: 12.5h | оценка: 8h (по 2 из 3)
|
||||
```
|
||||
|
||||
- «просроченных» -- задачи со сроком версии раньше сегодняшней даты.
|
||||
- «без версии» -- задачи без целевой версии; «без срока» -- задачи с версией, но без известной даты релиза.
|
||||
- «потрачено» -- сумма полей `spent_hours` задач списка.
|
||||
- «оценка» -- сумма полей `estimated_hours`; «(по N из M)» -- у скольких задач из списка есть оценка. Если оценок нет ни у одной задачи, блок «оценка» не выводится.
|
||||
|
||||
Сроки версий дозагружаются отдельным запросом на каждую уникальную версию
|
||||
списка. Недоступная версия -- предупреждение в stderr и пустой срок у её
|
||||
задач, вывод не прерывается.
|
||||
|
||||
Пустой список (в том числе когда все открытые задачи попали в исключаемую
|
||||
версию `Wishlist`): «ℹ️ Открытых задач нет.» (stderr), exit 0.
|
||||
|
||||
## Экспорт в файл
|
||||
|
||||
Флаг `--output` определяется по четырём правилам:
|
||||
@@ -284,6 +349,7 @@ redmine-reporter --send --commit
|
||||
| `--config-path` | Путь к YAML-конфигу: загрузка, запись `--init-config` и `--commit`. По умолчанию `~/.config/redmine-reporter/config.yml`. |
|
||||
| `--commit` | Сохранить отчёт в файл и сдвинуть начало периода (`period.from` = конец окна) в YAML. |
|
||||
| `--send` | Отправить отчёт по email после сохранения файла; при подтверждении и успехе сдвинуть начало периода. |
|
||||
| `--my-tasks` | Вместо отчёта вывести открытые задачи, назначенные на вас (или на пользователя из `--user-id`/`--user-login`/`--user-name`): таблица с сортировкой по срочности + сводка в stderr. Несовместим с `--date`, `--output`, `--compact`, `--summary`, `--no-time`, `--by-activity`, `--commit`, `--send`. Подробнее: [Список открытых задач](#список-открытых-задач). |
|
||||
|
||||
## Устранение неполадок
|
||||
|
||||
@@ -294,6 +360,7 @@ redmine-reporter --send --commit
|
||||
| «User '...' not found...» | Пользователь не найден ни по ID, ни по логину, ни по имени | Проверьте написание; логин сравнивается точно с учётом регистра. |
|
||||
| «Multiple users match...» | По имени найдено несколько пользователей (или несколько дублей логина) | Используйте `--user-login` с логином из списка или уточните числовой ID для `--user-id`. |
|
||||
| Указано несколько `--user-*` | Флаги взаимоисключающие | Оставьте только один из `--user-id` / `--user-login` / `--user-name`. |
|
||||
| «--my-tasks cannot be used with report-generating flags.» (exit 1) | `--my-tasks` совмещён с отчётными флагами (`--date`, `--output`, `--compact`, `--summary`, `--no-time`, `--by-activity`, `--commit`, `--send`) | Запускайте режим отдельно: список задач и отчёт -- разные команды (см. [Список открытых задач](#список-открытых-задач)). |
|
||||
| «Неизвестный формат файла: '.xyz'. Поддерживаются: .odt, .csv, .md, .html, .json, .xlsx» (exit 1) | `--output` с неизвестным расширением | Используйте одно из поддерживаемых расширений. |
|
||||
| Ошибка про `odfpy` при `.odt` | Пакет `odfpy` не установлен | `pip install odfpy` или выберите другой формат. |
|
||||
| «Email не настроен. Добавьте секцию 'email' в конфиг...» (exit 1) | `--send` без секции `email` в YAML или с пустым `smtp.host` | Добавьте секцию `email` (см. [CONFIG.md](CONFIG.md)). |
|
||||
@@ -303,6 +370,7 @@ redmine-reporter --send --commit
|
||||
| «Ошибка отправки письма: ...» | Прочая ошибка SMTP | Смотрите детали после двоеточия; файл отчёта уже сохранён на диске. |
|
||||
| Предупреждение о правах конфига при старте | Права `config.yml` шире `0600` | `chmod 600 ~/.config/redmine-reporter/config.yml`. |
|
||||
| Предупреждение о MITM при старте | `verify_ssl: false` / `REDMINE_VERIFY=false` — проверка TLS отключена | Включите проверку или используйте только в доверенной сети. |
|
||||
| «⚠️ Could not load version ...: Due date will be empty for its issues.» в режиме `--my-tasks` | Версия из списка задач недоступна (нет прав, удалена, сбой сети) | Некритично: срок этой версии останется пустым; проверьте права доступа к проекту версии. |
|
||||
| Не виден traceback при ошибке | Traceback показывается только с `--verbose`/`--debug` | Повторите запуск с `--debug`. |
|
||||
|
||||
API-ключ в текстах ошибок маскируется (`***`).
|
||||
|
||||
Reference in New Issue
Block a user