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 def _fetch_data(self): """ Абстрактный метод для получения данных. """ pass def fetch_data(self): """ Обертка для выполнения _fetch_data с возможной дополнительной обработкой. """ return self._fetch_data() @abstractmethod def get_default_parser_settings(self): """ Возвращает словарь/JSON с дефолтными настройками разбора. Например: { "fields_mapping": { "reservation_id": "id", "check_in": "from", "check_out": "until" }, "conditions": { "checkInStatus": "Заселен" } } """ print("get_default_parser_settings. pms_config:", self.pms_config) return {} def validate_plugin(self): """ Проверка на соответствие требованиям. Можно проверить наличие методов или полей. """ # Например, проверить наличие fetch_data и get_default_parser_settings required_methods = ["fetch_data", "get_default_parser_settings"] for m in required_methods: if not hasattr(self, m): raise ValueError(f"Плагин {type(self).__name__} не реализует метод {m}.") # Можно добавить дополнительные проверки return True