refactor(readme): standardize README, remove OpenWeather, fix pyproject #22

Closed
opened 2026-08-12 14:12:25 +03:00 by slaid098 · 0 comments
Owner

Контекст

README не соответствует стандарту slaid098.dev: нет билингвальной структуры (EN/RU), delimiter tags, cover.png. Ссылка на релизы ведёт на GitHub (аккаунт удалён, хост — Forgejo). OpenWeather API не используется — мама работает без API-ключа через Open-Meteo. pyproject.toml имеет несоответствие: requires-python>=3.13, но ruff target-version=py312 и mypy python_version=3.12. Нет .python-version и dependabot.yml.

Задача

  1. Переработать README по стандарту slaid098.dev через create-readme tool (билингвальный EN/RU, delimiter tags)
  2. Сгенерировать cover.png через draw-image tool
  3. Убрать секцию "Разработка" и "Лицензия" (git host рендерит из LICENSE файла)
  4. Ссылку релизов → Forgejo (git.slaid098.dev/slaid098/voice_assistant/releases)
  5. Ключевое слово «вики» → «алекса» в README
  6. Убрать "Погода [город]" из README — только hardcoded город (соответствует PR #21)
  7. Полностью выпилить OpenWeather код:
    • services/weather.py: убрать _GEOCODE_URL, _WEATHER_URL, _get_openweather_text(), _resolve_city_openweather(), _fetch_weather_openweather(), _format_weather(), ветку if settings.openweather_api_key:
    • config.py: убрать поле openweather_api_key: str + openweather_api_key=os.getenv(...)
    • .env.template: убрать блок OPENWEATHER_API_KEY=
    • tests/test_weather.py: убрать FakeSettings.api_key, все test_openweather_* (4 теста), test_uses_openweather_when_key_set, test_fallback_to_open_meteo_when_no_key (больше не релевантен — нет выбора провайдера)
    • tests/test_config.py: убрать assert s.openweather_api_key == "" и test_settings_openweather_key_from_env
    • tests/conftest.py: убрать os.environ.pop("OPENWEATHER_API_KEY", None)
  8. Fix pyproject.toml: ruff target-version"py313", mypy python_version"3.13"
  9. Создать .python-version с содержимым 3.13
  10. Создать .github/dependabot.yml (pip + github-actions, weekly)
  11. Обновить AGENTS.md: убрать упоминания OpenWeather, OPENWEATHER_API_KEY

Контракты

  • README: билингвальный через create-readme tool, с 12 delimiter tags, cover.png
  • weather.py: только Open-Meteo, get_weather_text(city)_get_open_meteo_text(target) напрямую (без проверки ключа)
  • config.py: поле openweather_api_key убрано из Settings
  • pyproject.toml: target-version = "py313", python_version = "3.13"
  • .python-version: содержит 3.13
  • dependabot.yml: updates for pip + github-actions

Инварианты

  • Все оставшиеся тесты проходят (было 217, минус ~6 удалённых openweather тестов ≈ 211+)
  • ruff check / ruff format / mypy — чисто
  • Coverage >= 75%
  • rg "openweather|OPENWEATHER" → 0 matches в src/ и tests/
  • project-status --fast: README WARN ушли, pyproject WARN ушли

Граничные случаи

  • Если у пользователя в .env есть OPENWEATHER_API_KEY — будет игнорироваться (поле убрано из Settings, dotenv не загрузит)
  • Погода всегда через Open-Meteo (без ключа, бесплатно)
  • get_weather_text(city: str | None = None) — сигнатура не меняется, city параметр остаётся для совместимости (handler передаёт payload, но has_payload=False → payload пустой → fallback на default city)

Влияние на связанные компоненты

  • services/weather.py: упрощение — убрать ~60 строк (5 функций + 2 константы + ветка)
  • config.py: Settings dataclass минус 1 поле
  • tests/test_weather.py: минус ~6 тестов, FakeSettings упрощается (убрать api_key параметр)
  • tests/test_config.py: минус 1 assert + 1 тест
  • tests/conftest.py: минус 1 строка
  • nlu/handlers.py: WeatherHandler без изменений (вызывает get_weather_text(payload))
  • README: полная переработка

Вне scope

  • Релиз (отдельная задача позже — пользователь явно сказал "без релиза пока что")
  • BROWSER_PATH — оставить в .env.template (используется в services/browser.py)
  • WAKE_CACHE_RESET_MS — уже переименован в PR #21

Критерии приемки

  • README соответствует стандарту (12 delimiter tags, билингвальный EN/RU, cover.png)
  • 0 matches rg "openweather|OPENWEATHER" в src/ и tests/
  • pyproject.toml: ruff target-version = "py313", mypy python_version = "3.13"
  • .python-version существует (содержит 3.13)
  • .github/dependabot.yml существует
  • project-status --fast: README WARN ушли, Pyproject WARN ушли
  • Все тесты проходят, ruff/mypy чисто
## Контекст README не соответствует стандарту slaid098.dev: нет билингвальной структуры (EN/RU), delimiter tags, cover.png. Ссылка на релизы ведёт на GitHub (аккаунт удалён, хост — Forgejo). OpenWeather API не используется — мама работает без API-ключа через Open-Meteo. pyproject.toml имеет несоответствие: `requires-python>=3.13`, но `ruff target-version=py312` и `mypy python_version=3.12`. Нет `.python-version` и `dependabot.yml`. ## Задача 1. Переработать README по стандарту slaid098.dev через `create-readme` tool (билингвальный EN/RU, delimiter tags) 2. Сгенерировать cover.png через `draw-image` tool 3. Убрать секцию "Разработка" и "Лицензия" (git host рендерит из LICENSE файла) 4. Ссылку релизов → Forgejo (`git.slaid098.dev/slaid098/voice_assistant/releases`) 5. Ключевое слово «вики» → «алекса» в README 6. Убрать "Погода [город]" из README — только hardcoded город (соответствует PR #21) 7. Полностью выпилить OpenWeather код: - `services/weather.py`: убрать `_GEOCODE_URL`, `_WEATHER_URL`, `_get_openweather_text()`, `_resolve_city_openweather()`, `_fetch_weather_openweather()`, `_format_weather()`, ветку `if settings.openweather_api_key:` - `config.py`: убрать поле `openweather_api_key: str` + `openweather_api_key=os.getenv(...)` - `.env.template`: убрать блок `OPENWEATHER_API_KEY=` - `tests/test_weather.py`: убрать `FakeSettings.api_key`, все `test_openweather_*` (4 теста), `test_uses_openweather_when_key_set`, `test_fallback_to_open_meteo_when_no_key` (больше не релевантен — нет выбора провайдера) - `tests/test_config.py`: убрать `assert s.openweather_api_key == ""` и `test_settings_openweather_key_from_env` - `tests/conftest.py`: убрать `os.environ.pop("OPENWEATHER_API_KEY", None)` 8. Fix pyproject.toml: `ruff target-version` → `"py313"`, `mypy python_version` → `"3.13"` 9. Создать `.python-version` с содержимым `3.13` 10. Создать `.github/dependabot.yml` (pip + github-actions, weekly) 11. Обновить AGENTS.md: убрать упоминания OpenWeather, `OPENWEATHER_API_KEY` ## Контракты - README: билингвальный через `create-readme` tool, с 12 delimiter tags, cover.png - `weather.py`: только Open-Meteo, `get_weather_text(city)` → `_get_open_meteo_text(target)` напрямую (без проверки ключа) - `config.py`: поле `openweather_api_key` убрано из `Settings` - `pyproject.toml`: `target-version = "py313"`, `python_version = "3.13"` - `.python-version`: содержит `3.13` - `dependabot.yml`: updates for pip + github-actions ## Инварианты - Все оставшиеся тесты проходят (было 217, минус ~6 удалённых openweather тестов ≈ 211+) - ruff check / ruff format / mypy — чисто - Coverage >= 75% - `rg "openweather|OPENWEATHER"` → 0 matches в src/ и tests/ - `project-status --fast`: README WARN ушли, pyproject WARN ушли ## Граничные случаи - Если у пользователя в .env есть `OPENWEATHER_API_KEY` — будет игнорироваться (поле убрано из Settings, dotenv не загрузит) - Погода всегда через Open-Meteo (без ключа, бесплатно) - `get_weather_text(city: str | None = None)` — сигнатура не меняется, `city` параметр остаётся для совместимости (handler передаёт payload, но has_payload=False → payload пустой → fallback на default city) ## Влияние на связанные компоненты - `services/weather.py`: упрощение — убрать ~60 строк (5 функций + 2 константы + ветка) - `config.py`: Settings dataclass минус 1 поле - `tests/test_weather.py`: минус ~6 тестов, FakeSettings упрощается (убрать `api_key` параметр) - `tests/test_config.py`: минус 1 assert + 1 тест - `tests/conftest.py`: минус 1 строка - `nlu/handlers.py`: `WeatherHandler` без изменений (вызывает `get_weather_text(payload)`) - README: полная переработка ## Вне scope - Релиз (отдельная задача позже — пользователь явно сказал "без релиза пока что") - BROWSER_PATH — оставить в .env.template (используется в services/browser.py) - WAKE_CACHE_RESET_MS — уже переименован в PR #21 ## Критерии приемки - README соответствует стандарту (12 delimiter tags, билингвальный EN/RU, cover.png) - 0 matches `rg "openweather|OPENWEATHER"` в src/ и tests/ - `pyproject.toml`: ruff `target-version = "py313"`, mypy `python_version = "3.13"` - `.python-version` существует (содержит `3.13`) - `.github/dependabot.yml` существует - `project-status --fast`: README WARN ушли, Pyproject WARN ушли - Все тесты проходят, ruff/mypy чисто
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
slaid098/voice_assistant#22
No description provided.