63 lines
2.2 KiB
Python
63 lines
2.2 KiB
Python
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
|