59 lines
1.9 KiB
Python
59 lines
1.9 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
|
||
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
|