Исходный код core.configs.station

"""Параметры станции — единственный обязательный раздел настроек."""

from typing import Self

from pydantic import BaseModel, model_validator


[документация] class StationSettings(BaseModel): """Параметры станции. Обязательны ``TOKEN`` и ``ID`` — без них клиент не стартует. Координаты и высота необязательны: если их нет в ``.env``, они берутся с портала вместе с конфигурацией станции (``remote_config``). Заданные в ``.env`` имеют приоритет и, как раньше, уходят на портал в запросе расписания. """ TOKEN: str | None = None ID: int | None = None LATITUDE: float | None = None LONGITUDE: float | None = None ELEVATION: int | None = None
[документация] @model_validator(mode="after") def check_required_fields(self) -> Self: """Проверить, что заполнены ``STATION__TOKEN`` и ``STATION__ID``. Raises: ValueError: Со списком незаполненных параметров. """ required_fields = { "TOKEN": "Отсутствует TOKEN станции. Укажите корректное значение в файле .env (STATION__TOKEN)", "ID": "Отсутствует ID станции. Укажите корректное значение в файле .env (STATION__ID)", } errors = [] field_values = self.model_dump() for field, message in required_fields.items(): value = field_values.get(field) # Пустая строка — это `STATION__TOKEN=` из шаблона client/.env: # станция стартовала «успешно» и ходила на портал с заголовком # «Token ». Проверка не на ложность значения: ELEVATION=0 (уровень # моря) и LATITUDE=0.0 (экватор) — валидные величины. if value is None or (isinstance(value, str) and not value.strip()): errors.append(f"• {message}") if errors: error_header = "\n\nОтсутствуют обязательные параметры станции:\n\n" raise ValueError(error_header + "\n".join(errors) + "\n\n") return self