Исходный код 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