Regression from #62: verify_ssl true used to resolve to the system CA bundle path, so corporate CAs installed in the OS worked; after the unification true became requests' default (certifi), breaking setups with a corporate CA in the system store. Now verify_ssl true injects truststore, so requests verifies against the OS trust store on any platform. verify_ssl false / custom CA path behavior is unchanged. Tests mock truststore via an autouse fixture to keep the pytest process free of global ssl mutation. Refs #62
107 lines
6.1 KiB
Markdown
107 lines
6.1 KiB
Markdown
# redmine-reporter
|
||
|
||
[](https://git.akokos.ru/artem.kokos/redmine-reporter/actions)
|
||
|
||
- [Возможности](#возможности)
|
||
- [Установка](#установка)
|
||
- [Быстрый старт](#быстрый-старт)
|
||
- [Документация](#документация)
|
||
- [Форматы вывода](#форматы-вывода)
|
||
- [Разработка](#разработка)
|
||
- [Безопасность](#безопасность)
|
||
- [Лицензия](#лицензия)
|
||
|
||
CLI-инструмент для генерации отчётов по задачам Redmine на основе записей о затраченном времени. Читает time entries текущего или указанного пользователя, группирует задачи по проекту и версии, выводит отчёт в консоль или экспортирует в файл. Предназначен для внутреннего использования с `https://red.eltex.loc/`.
|
||
|
||
## Возможности
|
||
|
||
- Отчёт по time entries текущего или указанного пользователя (`--user-id`, `--user-login`, `--user-name`).
|
||
- Группировка задач по проекту и версии, перевод статусов на русский язык.
|
||
- Вывод в консоль (таблица или компактный вид) и экспорт в ODT, CSV, Markdown, HTML, JSON, XLSX.
|
||
- Разбивка времени по типам активности (`--by-activity`), сводка (`--summary`), скрытие времени (`--no-time`).
|
||
- Гибкий выбор периода: `--date`, переменные окружения, YAML-конфиг, по умолчанию — текущий месяц.
|
||
- `--commit`: сохранение отчёта в файл и фиксация периода в конфиге для следующего запуска.
|
||
- `--send`: отправка отчёта по email через SMTP (plain-text или HTML-письмо).
|
||
- YAML-конфиг с секретами через `${VAR}`; приоритет: CLI-флаги > env > .env > YAML > дефолты (нюанс с `--config` — см. docs/CONFIG.md).
|
||
|
||
## Установка
|
||
|
||
Требуется Python >= 3.10.
|
||
|
||
```bash
|
||
git clone https://git.akokos.ru/artem.kokos/redmine-reporter.git
|
||
cd redmine-reporter
|
||
python3 -m venv .venv
|
||
source .venv/bin/activate
|
||
pip install --upgrade pip
|
||
pip install .
|
||
```
|
||
|
||
Для разработки:
|
||
|
||
```bash
|
||
pip install -e ".[dev]"
|
||
```
|
||
|
||
## Быстрый старт
|
||
|
||
```bash
|
||
# Сгенерировать конфиг ~/.config/redmine-reporter/config.yml
|
||
redmine-reporter --init-config
|
||
|
||
# Заполнить redmine.url, redmine.api_key (или ${REDMINE_API_KEY}), redmine.author
|
||
vim ~/.config/redmine-reporter/config.yml
|
||
|
||
# Отчёт за текущий месяц в консоль
|
||
redmine-reporter
|
||
|
||
# Сохранить в файл и зафиксировать период для следующего запуска
|
||
redmine-reporter --commit
|
||
```
|
||
|
||
## Документация
|
||
|
||
- [docs/USER_GUIDE.md](docs/USER_GUIDE.md) — руководство пользователя: сценарии использования, справочник всех CLI-флагов, устранение неполадок.
|
||
- [docs/CONFIG.md](docs/CONFIG.md) — справочник конфигурации: YAML-структура, переменные окружения, приоритеты, безопасность.
|
||
|
||
## Форматы вывода
|
||
|
||
| Формат | Особенности |
|
||
| --- | --- |
|
||
| Консоль | Таблица или компактный вид (`--compact`). |
|
||
| ODT | Требуется `odfpy`; формирование по шаблону. |
|
||
| CSV | UTF-8 с BOM; полные значения `project`/`version` в каждой строке. |
|
||
| Markdown | Компактная таблица. |
|
||
| HTML | Полный HTML-документ; объединение ячеек групп через rowspan. |
|
||
| JSON | Объекты `project`, `version`, `issue_id`, `subject`, `status`, `time` + опционально `activities`. |
|
||
| XLSX | Объединение ячеек по проекту/версии, итоги, автоширина (максимум 80), автофильтр, freeze panes. |
|
||
|
||
Нюанс `--no-time`: физически удаляет колонку времени только CSV; в XLSX колонки остаются, но пустыми и без итогов; в остальных форматах — пустые значения.
|
||
|
||
## Разработка
|
||
|
||
Проверки перед коммитом:
|
||
|
||
```bash
|
||
pytest
|
||
isort --check-only redmine_reporter tests
|
||
black --check redmine_reporter tests
|
||
ruff check redmine_reporter tests
|
||
ruff format --check redmine_reporter tests
|
||
mypy redmine_reporter
|
||
```
|
||
|
||
CI — Gitea Actions (`.gitea/workflows/checks.yaml`): все шесть проверок на матрице Python 3.10–3.13.
|
||
|
||
## Безопасность
|
||
|
||
- `REDMINE_URL` обязан использовать HTTPS: валидация отклоняет остальное, API-ключ передаётся в заголовках.
|
||
- `verify_ssl` / `REDMINE_VERIFY`: `true` (по умолчанию — проверка по системному хранилищу CA операционной системы через truststore, корпоративные CA из ОС работают), `false` (предупреждение о MITM-риске при старте) или путь к CA-bundle.
|
||
- Конфиг создаётся с правами `0600`, директория — `0700`; при более широких правах выводится предупреждение.
|
||
- Секреты храните через `${VAR}` в YAML или в переменных окружения, не в открытом виде.
|
||
- Инструмент только читает данные из Redmine и ничего в нём не изменяет.
|
||
|
||
## Лицензия
|
||
|
||
MIT, см. [LICENSE](LICENSE).
|