[Bug] Python 3.9: tuple[str, str] несовместим с declared requires-python = ">=3.9" #51

Closed
opened 2026-07-12 21:18:07 +07:00 by artem.kokos · 1 comment
Owner

Проблема

В pyproject.toml заявлена поддержка Python >=3.9, но в redmine_reporter/cli.py:14 используется аннотация:

def parse_date_range(date_arg: str) -> tuple[str, str]:

В Python 3.9 встроенные типы (tuple, list, dict и т.д.) ещё не являются generic, поэтому при импорте модуля на чистом Python 3.9 произойдёт ошибка:

TypeError: 'type' object is not subscriptable

Пример воспроизведения

python3.9 -c "import redmine_reporter.cli"

Ожидаемый результат: импорт проходит без ошибок.
Фактический результат: TypeError: 'type' object is not subscriptable на строке 14 cli.py.

Рекомендации

Выбрать один из вариантов:

  1. Перенести нижнюю границу на Python 3.9 (предпочтительно, если нужна совместимость):

    from typing import Tuple
    def parse_date_range(date_arg: str) -> Tuple[str, str]:
    

    Или добавить from __future__ import annotations в начало файла.

  2. Поднять requires-python до >=3.10 — проще, но ломает обещание в README/pyproject.toml.

Связанные места

  • redmine_reporter/cli.py:14
  • pyproject.toml:20
## Проблема В `pyproject.toml` заявлена поддержка Python `>=3.9`, но в `redmine_reporter/cli.py:14` используется аннотация: ```python def parse_date_range(date_arg: str) -> tuple[str, str]: ``` В Python 3.9 встроенные типы (`tuple`, `list`, `dict` и т.д.) ещё не являются generic, поэтому при импорте модуля на чистом Python 3.9 произойдёт ошибка: ```python TypeError: 'type' object is not subscriptable ``` ## Пример воспроизведения ```bash python3.9 -c "import redmine_reporter.cli" ``` Ожидаемый результат: импорт проходит без ошибок. Фактический результат: `TypeError: 'type' object is not subscriptable` на строке 14 `cli.py`. ## Рекомендации Выбрать один из вариантов: 1. **Перенести нижнюю границу на Python 3.9** (предпочтительно, если нужна совместимость): ```python from typing import Tuple def parse_date_range(date_arg: str) -> Tuple[str, str]: ``` Или добавить `from __future__ import annotations` в начало файла. 2. **Поднять `requires-python` до `>=3.10`** — проще, но ломает обещание в README/`pyproject.toml`. ## Связанные места - `redmine_reporter/cli.py:14` - `pyproject.toml:20`
artem.kokos added the bugcli labels 2026-07-12 21:18:07 +07:00
Author
Owner

Дополнение к списку мест: PEP 604-аннотации (X | None), ломающие Python 3.9, есть не только в cli.py:14 (tuple[str, str]), но и в:

  • redmine_reporter/config.py:239-241:
_cli_url: str | None = None
_cli_api_key: str | None = None
_app: AppConfig | None = None
  • redmine_reporter/yaml_config.py:33 (path: Path | None = None), :110 (output_arg: str | None), :118 (-> str | None)

from __future__ import annotations в этих файлах нет, поэтому на чистом Python 3.9 импорт пакета падает уже на этих модулях, а не только на cli.py.

Отдельное соображение в пользу варианта «поднять requires-python до >=3.10»: Python 3.9 достиг EOL в октябре 2025 и больше не получает security-фиксы. Для внутреннего инструмента поддержка EOL-версии вряд ли оправдана — проще и честнее поднять границу (и поправить classifiers/README), чем поддерживать совместимость с 3.9.

Дополнение к списку мест: PEP 604-аннотации (`X | None`), ломающие Python 3.9, есть не только в `cli.py:14` (`tuple[str, str]`), но и в: - `redmine_reporter/config.py:239-241`: ```python _cli_url: str | None = None _cli_api_key: str | None = None _app: AppConfig | None = None ``` - `redmine_reporter/yaml_config.py:33` (`path: Path | None = None`), `:110` (`output_arg: str | None`), `:118` (`-> str | None`) `from __future__ import annotations` в этих файлах нет, поэтому на чистом Python 3.9 импорт пакета падает уже на этих модулях, а не только на `cli.py`. Отдельное соображение в пользу варианта «поднять `requires-python` до `>=3.10`»: Python 3.9 достиг EOL в октябре 2025 и больше не получает security-фиксы. Для внутреннего инструмента поддержка EOL-версии вряд ли оправдана — проще и честнее поднять границу (и поправить classifiers/README), чем поддерживать совместимость с 3.9.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: artem.kokos/redmine-reporter#51