pms_integration in process

This commit is contained in:
2024-12-09 10:10:53 +09:00
parent 1398f444bd
commit 60eaef5527
15 changed files with 243 additions and 146 deletions

View File

@@ -1,27 +1,15 @@
# pms_integration/plugins/base_plugin.py
from abc import ABC, abstractmethod
class BasePMSPlugin(ABC):
"""Базовый класс для всех плагинов PMS интеграции."""
def __init__(self, api_config):
"""
Конструктор плагина.
:param api_config: Конфигурация API (объект модели APIConfiguration).
"""
self.api_config = api_config
def __init__(self, hotel, pms_config):
self.hotel = hotel
self.pms_config = pms_config
@abstractmethod
def fetch_data(self):
def fetch_and_parse(self):
"""
Метод для получения данных от PMS.
"""
pass
@abstractmethod
def parse_data(self, raw_data):
"""
Метод для обработки сырых данных от PMS.
Этот метод должен быть реализован в каждом плагине.
Он должен получать данные из API и возвращать их в нужном формате.
"""
pass

View File

@@ -1,31 +1,30 @@
# pms_integration/plugins/example_pms.py
import requests
from .base_plugin import BasePMSPlugin
class ExamplePMSPlugin(BasePMSPlugin):
"""Плагин для интеграции с Example PMS."""
def fetch_data(self):
"""Получение данных от Example PMS."""
url = self.api_config.url
headers = {"Authorization": f"Bearer {self.api_config.token}"}
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status()
return response.json()
class BnovoPMS(BasePMSPlugin):
def fetch_and_parse(self):
response = requests.get(
self.pms_config.url,
headers={"Authorization": f"Bearer {self.pms_config.token}"}
)
if response.status_code != 200:
raise ValueError(f"Ошибка запроса к PMS Bnovo: {response.text}")
def parse_data(self, raw_data):
"""Обработка данных от Example PMS."""
reservations = raw_data.get("reservations", [])
return [
{
"id": res["id"],
"room_number": res["room_number"],
"room_type": res["room_type"],
"check_in": res["check_in"],
"check_out": res["check_out"],
"status": res["status"],
"price": res.get("price"),
data = response.json()
parsed_data = self.parse_data(data)
return parsed_data
def parse_data(self, data):
# Пример разбора данных на основе JSON-маски
reservations = []
for item in data["reservations"]:
reservation = {
"id": item["id"],
"room_number": item["roomNumber"],
"check_in": item["checkIn"],
"check_out": item["checkOut"],
"status": item["status"],
}
for res in reservations
]
reservations.append(reservation)
return reservations

View File

@@ -0,0 +1,7 @@
from .base_plugin import BasePMSPlugin
class EcviPMS(BasePMSPlugin):
def fetch_and_parse(self):
# Реализация логики для ECVI
pass