docs(readme): update README and bump version to 1.6.1
- Remove duplicated --config bullet. - Update Excel section to reflect production-grade XLSX features. - Add --no-time note for file formats. - Add readable API error messaging to feature list. - Fix development commands: use --check flags and add mypy. - Replace verbose per-format sections with a summary table. - Bump pyproject.toml version to 1.6.1.
This commit is contained in:
116
README.md
116
README.md
@@ -9,17 +9,14 @@ CLI-инструмент для генерации отчётов по зада
|
|||||||
## Возможности
|
## Возможности
|
||||||
|
|
||||||
- Получение time entries текущего пользователя из Redmine.
|
- Получение time entries текущего пользователя из Redmine.
|
||||||
- Авторизация через Redmine API token.
|
- Авторизация через Redmine API token или логин/пароль.
|
||||||
- Резервная авторизация через логин и пароль для обратной совместимости.
|
|
||||||
- Группировка задач по проекту и версии.
|
- Группировка задач по проекту и версии.
|
||||||
- Перевод статусов задач на русский язык.
|
- Перевод статусов задач на русский язык.
|
||||||
- Вывод в консоль в табличном или компактном виде.
|
- Вывод в консоль (таблица / компактный вид).
|
||||||
- Экспорт в ODT, CSV, Markdown, HTML, JSON и Excel (.xlsx).
|
- Экспорт в ODT, CSV, Markdown, HTML, JSON и Excel (.xlsx).
|
||||||
- Сводка по затраченному времени (итоги и разбивка по проектам/версиям).
|
- Excel-отчёт с merge-ячейками по проекту/версии, итогами, автошириной, автофильтром и закреплённой шапкой.
|
||||||
- Автоматическое определение месяца ODT-отчёта по конечной дате периода.
|
- Сводка по времени (`--summary`).
|
||||||
- Настройка периода отчёта по умолчанию через `.env` (или автоматически — текущий месяц).
|
- Понятные сообщения об ошибках Redmine API (401/403/5xx, таймаут, сеть).
|
||||||
- Переопределение URL и API-ключа через CLI.
|
|
||||||
- Загрузка альтернативного `.env` через `--config`.
|
|
||||||
- Загрузка альтернативного `.env` через `--config`.
|
- Загрузка альтернативного `.env` через `--config`.
|
||||||
|
|
||||||
## Установка
|
## Установка
|
||||||
@@ -33,9 +30,15 @@ pip install --upgrade pip
|
|||||||
pip install .
|
pip install .
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Для разработки:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install -e ".[dev]"
|
||||||
|
```
|
||||||
|
|
||||||
## Настройка
|
## Настройка
|
||||||
|
|
||||||
Создайте файл `.env` в корне проекта. Файл не должен попадать в git.
|
Создайте файл `.env` в корне проекта. Он не должен попадать в git.
|
||||||
|
|
||||||
Рекомендуемый вариант авторизации:
|
Рекомендуемый вариант авторизации:
|
||||||
|
|
||||||
@@ -48,18 +51,13 @@ DEFAULT_FROM_DATE=2026-01-01
|
|||||||
DEFAULT_TO_DATE=2026-01-31
|
DEFAULT_TO_DATE=2026-01-31
|
||||||
```
|
```
|
||||||
|
|
||||||
Если задан `REDMINE_API_KEY`, он используется в первую очередь. Значения из `.env` можно переопределить через CLI: `--url`, `--api-key`, `--author`, а также загрузить другой файл конфигурации через `--config`.
|
Резервный вариант:
|
||||||
|
|
||||||
Резервный вариант авторизации:
|
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
REDMINE_URL=https://red.eltex.loc/
|
REDMINE_URL=https://red.eltex.loc/
|
||||||
REDMINE_USER=ваш.логин
|
REDMINE_USER=ваш.логин
|
||||||
REDMINE_PASSWORD=ваш_пароль
|
REDMINE_PASSWORD=ваш_пароль
|
||||||
REDMINE_AUTHOR=Иванов Иван Иванович
|
REDMINE_AUTHOR=Иванов Иван Иванович
|
||||||
|
|
||||||
DEFAULT_FROM_DATE=2026-01-01
|
|
||||||
DEFAULT_TO_DATE=2026-01-31
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Переменные окружения:
|
Переменные окружения:
|
||||||
@@ -71,18 +69,9 @@ DEFAULT_TO_DATE=2026-01-31
|
|||||||
| `REDMINE_USER` | Да, если нет токена | Логин Redmine. |
|
| `REDMINE_USER` | Да, если нет токена | Логин Redmine. |
|
||||||
| `REDMINE_PASSWORD` | Да, если нет токена | Пароль Redmine. |
|
| `REDMINE_PASSWORD` | Да, если нет токена | Пароль Redmine. |
|
||||||
| `REDMINE_AUTHOR` | Нет | Имя автора для ODT-отчёта. |
|
| `REDMINE_AUTHOR` | Нет | Имя автора для ODT-отчёта. |
|
||||||
| `DEFAULT_FROM_DATE` | Нет | Начальная дата периода по умолчанию в формате `YYYY-MM-DD`. |
|
| `DEFAULT_FROM_DATE` | Нет | Начальная дата периода по умолчанию (`YYYY-MM-DD`). |
|
||||||
| `DEFAULT_TO_DATE` | Нет | Конечная дата периода по умолчанию в формате `YYYY-MM-DD`. |
|
| `DEFAULT_TO_DATE` | Нет | Конечная дата периода по умолчанию (`YYYY-MM-DD`). |
|
||||||
| `REDMINE_VERIFY` | Нет | Настройка TLS-проверки для Redmine API. |
|
| `REDMINE_VERIFY` | Нет | TLS-проверка: `true` / `false` / путь к CA bundle. |
|
||||||
|
|
||||||
`REDMINE_VERIFY` поддерживает значения:
|
|
||||||
|
|
||||||
- пустое значение или отсутствие переменной: `/etc/ssl/certs/ca-certificates.crt`;
|
|
||||||
- `true`, `1`, `yes`, `on`: стандартная проверка сертификатов `requests`;
|
|
||||||
- `false`, `0`, `no`, `off`: отключить проверку сертификатов;
|
|
||||||
- любой другой текст: путь к CA bundle.
|
|
||||||
|
|
||||||
Отключать проверку сертификатов не рекомендуется.
|
|
||||||
|
|
||||||
## Использование
|
## Использование
|
||||||
|
|
||||||
@@ -90,7 +79,7 @@ DEFAULT_TO_DATE=2026-01-31
|
|||||||
source .venv/bin/activate
|
source .venv/bin/activate
|
||||||
```
|
```
|
||||||
|
|
||||||
Отчёт за период по умолчанию (текущий месяц или из `.env`):
|
Отчёт за период по умолчанию:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
redmine-reporter
|
redmine-reporter
|
||||||
@@ -102,15 +91,13 @@ redmine-reporter
|
|||||||
redmine-reporter --date 2026-02-01--2026-02-28
|
redmine-reporter --date 2026-02-01--2026-02-28
|
||||||
```
|
```
|
||||||
|
|
||||||
Период должен быть задан в формате `YYYY-MM-DD--YYYY-MM-DD`. Начальная дата не может быть позже конечной.
|
Переопределить URL/API-ключ из `.env`:
|
||||||
|
|
||||||
Переопределение URL и API-ключа из `.env`:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
redmine-reporter --url https://red.example.com --api-key ваш_токен
|
redmine-reporter --url https://red.example.com --api-key ваш_токен
|
||||||
```
|
```
|
||||||
|
|
||||||
Использование альтернативного конфигурационного файла:
|
Альтернативный конфигурационный файл:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
redmine-reporter --config /path/to/.env
|
redmine-reporter --config /path/to/.env
|
||||||
@@ -122,19 +109,12 @@ redmine-reporter --config /path/to/.env
|
|||||||
redmine-reporter --compact
|
redmine-reporter --compact
|
||||||
```
|
```
|
||||||
|
|
||||||
Подробный или отладочный вывод:
|
Отладочный вывод:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
redmine-reporter --verbose
|
|
||||||
redmine-reporter --debug
|
redmine-reporter --debug
|
||||||
```
|
```
|
||||||
|
|
||||||
Вывод версии:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
redmine-reporter --version
|
|
||||||
```
|
|
||||||
|
|
||||||
Экспорт:
|
Экспорт:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -146,60 +126,40 @@ redmine-reporter --output report.json
|
|||||||
redmine-reporter --output report.xlsx
|
redmine-reporter --output report.xlsx
|
||||||
```
|
```
|
||||||
|
|
||||||
JSON-отчёт:
|
Отчёт без затраченного времени (работает для всех форматов):
|
||||||
|
|
||||||
- массив объектов с полями `project`, `version`, `issue_id`, `subject`, `status`, `time`;
|
|
||||||
- UTF-8, читаемый машиной.
|
|
||||||
|
|
||||||
Excel-отчёт (.xlsx):
|
|
||||||
|
|
||||||
- одна таблица с заголовками и строками данных;
|
|
||||||
- шапка выделена жирным;
|
|
||||||
- каждая строка содержит полные значения проекта и версии.
|
|
||||||
|
|
||||||
CSV-отчёт:
|
|
||||||
|
|
||||||
- файл сохраняется в UTF-8 с BOM (`utf-8-sig`) для корректного отображения кириллицы в Microsoft Excel;
|
|
||||||
- каждая строка содержит полные значения проекта и версии (в отличие от консольного и Markdown-вывода, где повторяющиеся значения скрыты для компактности).
|
|
||||||
|
|
||||||
HTML-отчёт:
|
|
||||||
|
|
||||||
- полноценный HTML-документ с `<meta charset="utf-8">`;
|
|
||||||
- корректно отображается в браузере и почтовых клиентах.
|
|
||||||
|
|
||||||
ODT-отчёт:
|
|
||||||
|
|
||||||
- месяц в заголовке определяется по `to_date`;
|
|
||||||
- имя автора берётся из `--author`, затем из `REDMINE_AUTHOR`;
|
|
||||||
- если автор не задан, поле автора остаётся пустым.
|
|
||||||
|
|
||||||
Вывод без затраченного времени:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
redmine-reporter --no-time
|
redmine-reporter --no-time
|
||||||
|
redmine-reporter --no-time --output report.xlsx
|
||||||
```
|
```
|
||||||
|
|
||||||
Сводка по времени (итоги и разбивка по проектам):
|
Сводка по времени:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
redmine-reporter --summary
|
redmine-reporter --summary
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Форматы вывода
|
||||||
|
|
||||||
|
| Формат | Особенности |
|
||||||
|
| --- | --- |
|
||||||
|
| **ODT** | Заголовок с автором и месяцем, группировка по проекту/версии. |
|
||||||
|
| **CSV** | UTF-8 с BOM, полные значения `project`/`version` в каждой строке. |
|
||||||
|
| **Markdown** | Компактная таблица, повторяющиеся группы скрыты. |
|
||||||
|
| **HTML** | Полноценный HTML-документ с `meta charset="utf-8"`. |
|
||||||
|
| **JSON** | Массив объектов: `project`, `version`, `issue_id`, `subject`, `status`, `time`. |
|
||||||
|
| **Excel (.xlsx)** | Merge cells, колонки `Hours`/`Spent Time`, итоги, автоширина, автофильтр, freeze panes. |
|
||||||
|
|
||||||
## Разработка
|
## Разработка
|
||||||
|
|
||||||
Установка зависимостей для разработки:
|
Проверки перед коммитом:
|
||||||
|
|
||||||
```bash
|
|
||||||
pip install -e ".[dev]"
|
|
||||||
```
|
|
||||||
|
|
||||||
Проверки:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pytest
|
pytest
|
||||||
ruff check redmine_reporter tests
|
ruff check redmine_reporter tests
|
||||||
black redmine_reporter tests
|
black --check redmine_reporter tests
|
||||||
isort redmine_reporter tests
|
isort --check-only redmine_reporter tests
|
||||||
|
mypy redmine_reporter
|
||||||
```
|
```
|
||||||
|
|
||||||
## Безопасность
|
## Безопасность
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "redmine-reporter"
|
name = "redmine-reporter"
|
||||||
version = "1.6.0"
|
version = "1.6.1"
|
||||||
description = "Redmine time-entry based issue reporter for internal use"
|
description = "Redmine time-entry based issue reporter for internal use"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
authors = [{ name = "Artem Kokos", email = "artem-kokos@mail.ru" }]
|
authors = [{ name = "Artem Kokos", email = "artem-kokos@mail.ru" }]
|
||||||
|
|||||||
Reference in New Issue
Block a user