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
|
YANDEX_WEATHER_API_BURST=3
|
||||||
HABR_RSS_RATE=1
|
HABR_RSS_RATE=1
|
||||||
HABR_RSS_BURST=2
|
HABR_RSS_BURST=2
|
||||||
|
WEATHER_CITY=Магнитогорск
|
||||||
WEATHER_CACHE_TTL=3600
|
WEATHER_CACHE_TTL=3600
|
||||||
|
|||||||
@ -83,7 +83,7 @@
|
|||||||
|
|
||||||
- [ ] **`commands/news.py` — дублирование кода для статей и постов** — блоки обработки `articles` и `posts` почти идентичны (проверка `None`, форматирование, fallback). Вынести в вспомогательную функцию
|
- [ ] **`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
|
- [ ] **`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]
|
second_call = channel.send.call_args_list[1]
|
||||||
message_text = second_call[0][0]
|
message_text = second_call[0][0]
|
||||||
assert "Утренний дайджест" in message_text
|
assert "Утренний дайджест" in message_text
|
||||||
assert "Погода в Магнитогорске" in message_text
|
assert "Погода: Магнитогорск" in message_text
|
||||||
|
|
||||||
|
|
||||||
class TestRunMorningWithFallback:
|
class TestRunMorningWithFallback:
|
||||||
@ -242,5 +242,5 @@ class TestRunMorningWithFallback:
|
|||||||
message_text = call_args[0][0]
|
message_text = call_args[0][0]
|
||||||
|
|
||||||
# Проверяем, что в тексте есть погода и нет fallback сообщения
|
# Проверяем, что в тексте есть погода и нет fallback сообщения
|
||||||
assert "Погода в Магнитогорске" in message_text
|
assert "Погода: Магнитогорск" in message_text
|
||||||
assert "Не удалось получить данные из внешних источников" not in message_text
|
assert "Не удалось получить данные из внешних источников" not in message_text
|
||||||
|
|||||||
@ -20,7 +20,10 @@ from utils.rate_limiter import yandex_weather_limiter
|
|||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
# Координаты Магнитогорска
|
# Город для погоды (переопределяется WEATHER_CITY)
|
||||||
|
_WEATHER_CITY: str = os.getenv("WEATHER_CITY", "Магнитогорск")
|
||||||
|
|
||||||
|
# Координаты города
|
||||||
_LATITUDE: float = 53.40716
|
_LATITUDE: float = 53.40716
|
||||||
_LONGITUDE: float = 58.980289
|
_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)
|
lines = format_weather_data_for_console(data)
|
||||||
if not lines:
|
if not lines:
|
||||||
return None
|
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:
|
def pressure_to_mmhg(mb: float | int | str | None) -> float | str:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user