from abc import ABC, abstractmethod class BasePMSPlugin(ABC): """ Базовый класс для всех PMS плагинов. Плагин должен уметь: - Возвращать данные fetch_data() - Предоставлять дефолтные parser_settings - Проходить базовую валидацию (validate_plugin) """ def __init__(self, pms_config): """ pms_config: объект PMSConfiguration """ self.pms_config = pms_config @abstractmethod async def _fetch_data(self): """ Абстрактный метод для получения данных. """ pass async def fetch_data(self): """ Обертка для выполнения _fetch_data с возможной дополнительной обработкой. """ return await self._fetch_data() @abstractmethod def get_default_parser_settings(self): """ Возвращает словарь/JSON с дефолтными настройками разбора. Например: { "fields_mapping": { "reservation_id": "id", "check_in": "from", "check_out": "until" }, "conditions": { "checkInStatus": "Заселен" } } """ return {} def validate_plugin(self): """ Проверка на соответствие требованиям. Можно проверить наличие методов или полей. """ required_methods = ["fetch_data", "get_default_parser_settings", "_fetch_data"] for method in required_methods: if not hasattr(self, method): raise ValueError(f"Плагин {type(self).__name__} не реализует метод {method}.") return True