refactor(weather): remove OpenWeather, standardize README, fix infra #23
No reviewers
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
slaid098/voice_assistant!23
Loading…
Reference in a new issue
No description provided.
Delete branch "refactor/readme-standardize-openweather"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что сделано
weather.pyудалены_GEOCODE_URL,_WEATHER_URL,_get_openweather_text(),_resolve_city_openweather(),_fetch_weather_openweather(),_format_weather(). Вget_weather_text()убрана ветка выбора провайдера — всегда Open-Meteo. Обновлён docstring.openweather_api_keyизSettingsи из_load_settings().OPENWEATHER_API_KEY(строки 65-67), секция «Погода» оставлена только сWEATHER_DEFAULT_CITY.api_keyпараметр изFakeSettings, удалены все OpenWeather-тесты (test_openweather_*,test_uses_openweather_when_key_set,test_fallback_to_open_meteo_when_no_key), всеFakeSettings(api_key="")→FakeSettings(). Добавленtest_default_city_used_when_no_argвзамен удалённого fallback-теста.assert s.openweather_api_key == ""и весьtest_settings_openweather_key_from_env.os.environ.pop("OPENWEATHER_API_KEY", None). Заодно убраны unnecessary default type args (Generator[None, None, None]→Generator[None]) — правило UP043 активировалось после поднятия target-version до py313.create-readmetool — bilingual (EN/RU) с delimiter tags, features table, commands, configuration, quick start steps (download release zip).draw-image(template=cover, icon=mic, sub-icon=opencode).target-version = "py312"→"py313"(ruff),python_version = "3.12"→"3.13"(mypy) — приведено в соответствие сrequires-python = ">=3.13".3.13.OPENWEATHER_API_KEYиз секции Configuration.Почему
Issue #22 — стандартизация README и зачистка legacy OpenWeather API. OpenWeather требовал регистрации и API-ключа, что противоречит принципу «работает из коробки» для незрячего пользователя. Open-Meteo бесплатен и не требует ключа — единственный провайдер погоды теперь. Также исправлены рассинхроны pyproject (
requires-python>=3.13приtarget-version=py312) и добавлен dependabot для актуальности зависимостей.Watch out
uv.lockмодифицирован (был до начала работы, не из этого PR) — не закоммичен.assets/cover.meta.json(sidecar отdraw-image) — не закоммичен, это metadata генерации.test_default_city_used_when_no_arg.Pending
—
Closes #22
Closes #22
Code Review Summary
Чистый рефакторинг: полное удаление legacy-провайдера OpenWeather (код, конфиг, тесты, доки), стандартизация README через
create-readmetool, фикс рассинхрона Python-версии в pyproject (py312→py313), добавлен dependabot. CI green, PR уже смержен.Positives
rg openweatherпо всему репо — 0 совпадений. Удалены:_GEOCODE_URL,_WEATHER_URL,_get_openweather_text(),_resolve_city_openweather(),_fetch_weather_openweather(),_format_weather(), полеopenweather_api_keyв Settings, блок в.env.template, упоминание в AGENTS.md, 6 тестов. Чисто, без orphan-ссылок.get_weather_text()сигнатура не изменилась — все callers (nlu/handlers.py:26,tests/test_handlers.py:53,tests/test_workflow.py:76,261) работают без правок. Writer+reader paired update не нужен (удаление ветки, не смена контракта).requires-python=">=3.13"↔target-version="py313"(ruff) ↔python_version="3.13"(mypy) ↔.python-version=3.13— все 4 точки согласованы. Рассинхрон py312/py313 устранён.Generator[None, None, None]→Generator[None]— корректное применение правила после поднятия target-version до py313.test_default_city_used_when_no_argкорректно заменяет удалённыйtest_fallback_to_open_meteo_when_no_key— проверяет реальное поведение (default city из settings приget_weather_text()без аргумента). 10 тестов в test_weather.py покрывают: success, city_not_found, network_error, format_missing_data, 5 WMO-code tests, default-city fallback.Any,requests,logger,settings), try/except/else pattern сохранён, loguru logging, приватные функции с_prefix. Соответствует code-standards.Closes #22присутствует, Watch out прозрачно описывает незакоммиченныеuv.lockиcover.meta.json.Suggestions (info, not blocking)
\ No newline at end of fileв diff. То же для.python-version. POSIX-конвенция — файл должен заканчиваться newline. Не критично, ноruff/pre-commitмогут ругаться на YAML в будущем.git status. Стоит добавитьcover.meta.jsonили*.meta.jsonв.gitignore, чтобы не мешать. Сейчас это просто noise, но при следующих PR будет отвлекать.import voice_assistant.services.weather as weather_modповторяется в 4 тестах внутри функций. Можно вынести на module-level (послеfrom unittest.mock import MagicMock) — ruff isort не против, тесты станут чище. Не блокирующее, текущий стиль работает.Verdict: APPROVE