From ecff77ef66f7e13d894ab45413a7f032a9ce8fc2 Mon Sep 17 00:00:00 2001 From: deadzilla Date: Wed, 22 Jul 2026 22:04:54 +0500 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=B2=D1=8B=D0=BD=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=B8=20=D0=B3=D0=BE=D1=80=D0=BE=D0=B4=20=D0=B2=20WEATHER=5FCI?= =?UTF-8?q?TY=20env-=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=BD=D1=83?= =?UTF-8?q?=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Город больше не захардкожен в коде. Переопределяется через WEATHER_CITY (по умолчанию "Магнитогорск"). Шаблон изменён на "Погода: {city}:" для обхода проблемы падежей в русском языке. Файлы: utils/pogoda.py, .env.example, tests/test_morning_runner.py --- .env.example | 1 + ISSUES.md | 2 +- tests/test_morning_runner.py | 4 ++-- utils/pogoda.py | 7 +++++-- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.env.example b/.env.example index e0e79a8..7445737 100644 --- a/.env.example +++ b/.env.example @@ -10,4 +10,5 @@ YANDEX_WEATHER_API_RATE=1 YANDEX_WEATHER_API_BURST=3 HABR_RSS_RATE=1 HABR_RSS_BURST=2 +WEATHER_CITY=Магнитогорск WEATHER_CACHE_TTL=3600 diff --git a/ISSUES.md b/ISSUES.md index 06cd472..3ea6ad4 100644 --- a/ISSUES.md +++ b/ISSUES.md @@ -83,7 +83,7 @@ - [ ] **`commands/news.py` — дублирование кода для статей и постов** — блоки обработки `articles` и `posts` почти идентичны (проверка `None`, форматирование, fallback). Вынести в вспомогательную функцию -- [ ] **Город захардкожен в `API_URL_WEATHER`** — `Magnitogorsk` в URL `wttr.in`. При необходимости поддержки других городов потребуется рефакторинг. Минимум — задокументировать ограничение и вынести в env-переменную `WEATHER_CITY` +- [x] ~~**Город захардкожен в `API_URL_WEATHER`**~~ — вынесен в `WEATHER_CITY` env-переменную, шаблон `"Погода: {city}:"` (`utils/pogoda.py`, `.env.example`) - [ ] **`Scheduler._task` без `add_done_callback`** — если `_scheduler_loop` завершится unexpectedly (не через `CancelledError`), это не будет залогировано. Добавить callback для логирования нештатного завершения task diff --git a/tests/test_morning_runner.py b/tests/test_morning_runner.py index 1c4c626..f4bb9c0 100644 --- a/tests/test_morning_runner.py +++ b/tests/test_morning_runner.py @@ -170,7 +170,7 @@ class TestRunMorning: second_call = channel.send.call_args_list[1] message_text = second_call[0][0] assert "Утренний дайджест" in message_text - assert "Погода в Магнитогорске" in message_text + assert "Погода: Магнитогорск" in message_text class TestRunMorningWithFallback: @@ -242,5 +242,5 @@ class TestRunMorningWithFallback: message_text = call_args[0][0] # Проверяем, что в тексте есть погода и нет fallback сообщения - assert "Погода в Магнитогорске" in message_text + assert "Погода: Магнитогорск" in message_text assert "Не удалось получить данные из внешних источников" not in message_text diff --git a/utils/pogoda.py b/utils/pogoda.py index 81449e8..9f63456 100644 --- a/utils/pogoda.py +++ b/utils/pogoda.py @@ -20,7 +20,10 @@ from utils.rate_limiter import yandex_weather_limiter logger = logging.getLogger(__name__) -# Координаты Магнитогорска +# Город для погоды (переопределяется WEATHER_CITY) +_WEATHER_CITY: str = os.getenv("WEATHER_CITY", "Магнитогорск") + +# Координаты города _LATITUDE: float = 53.40716 _LONGITUDE: float = 58.980289 @@ -281,7 +284,7 @@ def format_weather_for_message(data: Optional[dict]) -> Optional[str]: lines = format_weather_data_for_console(data) if not lines: return None - return "Погода в Магнитогорске:\n" + "\n".join(lines) + return f"Погода: {_WEATHER_CITY}:\n" + "\n".join(lines) def pressure_to_mmhg(mb: float | int | str | None) -> float | str: