Добавлены открытые задачи после кодревью (12 issue)
This commit is contained in:
parent
90547df975
commit
250452ad60
25
ISSUES.md
25
ISSUES.md
@ -39,3 +39,28 @@
|
|||||||
- [x] **`requirements.txt` без пиннинга версий** — `>=` заменён на `~=` (compatible release)
|
- [x] **`requirements.txt` без пиннинга версий** — `>=` заменён на `~=` (compatible release)
|
||||||
- [x] **Закомментированный тест `pressure_to_mmhg(0)`** — удалена устаревшая закомментированная строка
|
- [x] **Закомментированный тест `pressure_to_mmhg(0)`** — удалена устаревшая закомментированная строка
|
||||||
- [x] **`format_articles(None)` бросает `TypeError`** — добавлена валидация `None`, graceful fallback с сообщением
|
- [x] **`format_articles(None)` бросает `TypeError`** — добавлена валидация `None`, graceful fallback с сообщением
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Открытые задачи
|
||||||
|
|
||||||
|
### Критические
|
||||||
|
|
||||||
|
- [ ] **`setup_logging()` создаёт дублирующиеся handlers** — каждый вызов добавляет новые `StreamHandler` и `RotatingFileHandler` к root-логгеру без проверки (`utils/logger.py`, строки 30-39)
|
||||||
|
- [ ] **Первый `logger.info()` теряется** — `"=== Запуск Discord бота ==="` вызван до `setup_logging()`, у root-логгера нет handlers (`bot.py`, строка 196)
|
||||||
|
- [ ] **`translate_weather()` уязвим к ложным substring-совпадениям** — `if key.lower() in en_lower` может вернуть неверный перевод (например, `"Heavy rain"` совпадёт в `"Heavy rain shower"` раньше, чем точный ключ) (`utils/pogoda.py`)
|
||||||
|
|
||||||
|
### Средние
|
||||||
|
|
||||||
|
- [ ] **`fromstring` импортирован внутри функции `fetch_rss`** — `from defusedxml.ElementTree import fromstring` на строке 24, скрывает зависимость от линтеров и добавляет оверхед (`utils/news.py`)
|
||||||
|
- [ ] **`Scheduler._start_scheduler()` создаёт task синхронно** — `asyncio.create_task()` в `__init__` зависит от активного event loop неявно (`utils/morning_runner.py`, строка 119)
|
||||||
|
- [ ] **`Pg.__init__` хранит `self.api_url` как инстанс-переменную** — копия константы `API_URL_WEATHER` без необходимости (`commands/pg.py`, строки 13-14)
|
||||||
|
- [ ] **`fetch_cat()` не передаёт `x-api-key`** — TheCatAPI требует/рекомендует заголовок `x-api-key`, без него запросы могут быть ограничены (`utils/cat.py`, строка 15)
|
||||||
|
|
||||||
|
### Низкие
|
||||||
|
|
||||||
|
- [ ] **Глобальные экземпляры RateLimiter + factory-функции** — factory-функции `make_*_limiter()` существуют, но production-код импортирует глобальные переменные напрямую (`utils/rate_limiter.py`, строки 94-97)
|
||||||
|
- [ ] **`@pytest.mark.asyncio` избыточен** — `pytest.ini` уже содержит `asyncio_mode = auto` (`tests/test_integration.py`)
|
||||||
|
- [ ] **`Dockerfile` не копирует `tests/`** — нельзя запустить `pytest` внутри контейнера, затрудняет отладку в Docker
|
||||||
|
- [ ] **Приватные атрибуты на объекте бота** — `self.bot._start_time` и `self.bot._scheduler` нарушают инкапсуляцию (`bot.py`, строки 116, 148)
|
||||||
|
- [ ] **Избыточная проверка `ctx` в `on_command_error`** — `ctx` всегда передан и не может быть `None` (`bot.py`, строки 138-143)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user