redmine-reporter
Инструмент для генерации отчётов по задачам в Redmine на основе ваших записей о затраченном времени.
Предназначен для внутреннего использования в Eltex. Работает с
https://red.eltex.loc/.
📄 Лицензия: MIT — делайте что угодно.
🔧 Возможности
- Безопасная передача учётных данных через переменные окружения или
.env - Два режима вывода: компактный (для копирования) и табличный (для просмотра)
- Группировка задач по проекту и версии
- Перевод статусов на русский язык
- Простой CLI с понятными аргументами
- Поддержка настройки диапазона дат по умолчанию через
.env - Экспорт в ODT с автоматическим заголовком (автор + месяц)
🚀 Установка и настройка (продакшен)
1. Клонируйте репозиторий
git clone https://git.akokos.ru/artem.kokos/redmine-reporter.git
cd redmine-reporter
2. Создайте изолированное окружение и установите зависимости
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install .
💡 Установка в виртуальное окружение — стандарт для Python-инструментов. Это безопасно и не влияет на систему.
3. Настройте доверие к корпоративному сертификату (обязательно!)
По умолчанию Python использует собственный набор сертификатов (certifi), который не включает внутренние CA Eltex.
Чтобы избежать ошибки CERTIFICATE_VERIFY_FAILED, выполните один раз:
cat /etc/ssl/certs/ca-certificates.crt >> $(python -m certifi)
✅ Это безопасно: вы просто добавляете доверенные системные сертификаты к Python.
❌ Не используйтеverify=False— это создаёт уязвимость.
4. Настройте учётные данные и (опционально) даты
Создайте файл .env в корне проекта (никогда не коммитьте его!):
REDMINE_URL=https://red.eltex.loc/
REDMINE_USER=ваш.логин
REDMINE_PASSWORD=ваш_пароль
REDMINE_AUTHOR=Иванов Иван Иванович
# Опционально: диапазон дат по умолчанию
DEFAULT_FROM_DATE=2026-01-01
DEFAULT_TO_DATE=2026-01-31
Альтернатива — задать переменные вручную:
export REDMINE_URL=https://red.eltex.loc/
export REDMINE_USER=ваш.логин
export REDMINE_PASSWORD=...
export REDMINE_AUTHOR="Иванов Иван Иванович"
export DEFAULT_FROM_DATE=2026-01-01
export DEFAULT_TO_DATE=2026-01-31
🔐 Рекомендуется использовать аккаунт с минимальными правами (только чтение time entries и задач). 💡 Если
DEFAULT_FROM_DATEиDEFAULT_TO_DATEне заданы, используется встроенный диапазон:2025-12-19--2026-01-31.
▶️ Использование
Перед каждым запуском активируйте окружение:
source .venv/bin/activate
Затем:
# Отчёт за период по умолчанию (из .env или встроенный)
redmine-reporter
# Отчёт за произвольный период (переопределяет .env)
redmine-reporter --date 2026-02-01--2026-02-28
# Компактный вывод (удобно копировать в письмо)
redmine-reporter --compact
# Экспорт в ODT с указанием автора (если не задано в .env)
redmine-reporter --output report.odt --author "Иванов Иван Иванович"
💡 Автоматика в ODT-отчёте:
- Месяц в заголовке определяется автоматически по дате окончания периода (
to_date). Например:2025-12-20--2026-01-15→ «Январь».- Имя автора берётся из переменной окружения
REDMINE_AUTHOR(в.env) или CLI-аргумента--author.- Первая пустая строка из шаблона
template.odtавтоматически удаляется.
Пример содержимого .env с автором:
REDMINE_URL=https://red.eltex.loc/
REDMINE_USER=ваш.логин
REDMINE_PASSWORD=ваш_пароль
REDMINE_AUTHOR=Иванов Иван Иванович
DEFAULT_FROM_DATE=2026-01-01
DEFAULT_TO_DATE=2026-01-31
Пример вывода в ODT (заголовок):
Иванов Иван Иванович. Отчёт за месяц Январь.
Пример консольного вывода:
✅ Total issues: 7 [2026-01-01--2026-01-31]
╒════════════╤═══════════╤══════════════════════════════════════╤═══════════╤════════════╕
│ Проект │ Версия │ Задача │ Статус │ Затрачено │
╞════════════╪═══════════╪══════════════════════════════════════╪═══════════╪════════════╡
│ Камеры │ v2.5.0 │ 12345. Поддержка нового датчика │ В работе │ 2.00h │
│ │ │ 12346. Исправить утечку памяти │ Решена │ 2.00h │
│ ПО │ <N/A> │ 12350. Обновить документацию │ Ожидание │ 12.00h │
╘════════════╧═══════════╧══════════════════════════════════════╧═══════════╧════════════╛
🛠 Разработка
Для участия в разработке:
pip install -e ".[dev]"
pytest
black .
isort .
🔒 Важно:
- Никогда не коммитьте
.env, пароли или логины.- Файл
.gitignoreуже исключает все чувствительные артефакты.- Инструмент работает только в режиме чтения — он не может изменять данные в Redmine.