feat: вынести город в WEATHER_CITY env-переменную
Город больше не захардкожен в коде. Переопределяется через
WEATHER_CITY (по умолчанию "Магнитогорск"). Шаблон изменён на
"Погода: {city}:" для обхода проблемы падежей в русском языке.
Файлы: utils/pogoda.py, .env.example, tests/test_morning_runner.py
This commit is contained in:
parent
1a6b7043ad
commit
ecff77ef66
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user