Shelter PMS fully functional

This commit is contained in:
2024-12-09 16:36:11 +09:00
parent 60eaef5527
commit e76a80fb2f
47 changed files with 665 additions and 909 deletions

View File

@@ -0,0 +1,92 @@
import requests
from datetime import datetime
class APIClient:
"""
Универсальный клиент для работы с API PMS.
"""
def __init__(self, base_url, access_token=None, username=None, password=None):
"""
Инициализация API клиента.
:param base_url: Базовый URL API
:param access_token: Токен доступа (если требуется)
:param username: Имя пользователя (если используется basic auth)
:param password: Пароль (если используется basic auth)
"""
self.base_url = base_url
self.access_token = access_token
self.auth = (username, password) if username and password else None
def _build_headers(self):
"""
Создает заголовки для запроса.
:return: Словарь заголовков.
"""
headers = {'Content-Type': 'application/json'}
if self.access_token:
headers['Authorization'] = f'Bearer {self.access_token}'
return headers
def _make_request(self, method, endpoint, params=None, data=None):
"""
Выполняет запрос к API.
:param method: HTTP метод ('GET', 'POST', и т.д.)
:param endpoint: Конечная точка API.
:param params: Параметры строки запроса (для GET).
:param data: Данные для тела запроса (для POST).
:return: Ответ API в формате JSON.
"""
url = f"{self.base_url}{endpoint}"
headers = self._build_headers()
try:
response = requests.request(
method=method,
url=url,
headers=headers,
params=params,
json=data,
auth=self.auth
)
response.raise_for_status() # Генерирует исключение для HTTP ошибок
return response.json()
except requests.exceptions.RequestException as e:
print(f"Ошибка при запросе {method} {url}: {e}")
return None
def get(self, endpoint, params=None):
"""
Выполняет GET запрос.
:param endpoint: Конечная точка API.
:param params: Параметры строки запроса.
:return: Ответ API в формате JSON.
"""
return self._make_request('GET', endpoint, params=params)
def post(self, endpoint, data=None):
"""
Выполняет POST запрос.
:param endpoint: Конечная точка API.
:param data: Данные для тела запроса.
:return: Ответ API в формате JSON.
"""
return self._make_request('POST', endpoint, data=data)
def fetch_reservations(self, endpoint, from_date, to_date, pagination_start=0, pagination_count=50):
"""
Получение данных о бронированиях.
:param endpoint: Конечная точка API для бронирований.
:param from_date: Дата начала в формате 'YYYY-MM-DDTHH:MM:SS'.
:param to_date: Дата окончания в формате 'YYYY-MM-DDTHH:MM:SS'.
:param pagination_start: Начальная точка пагинации.
:param pagination_count: Количество записей для выборки.
:return: Ответ API в формате JSON.
"""
data = {
"from": from_date,
"until": to_date,
"pagination": {"from": pagination_start, "count": pagination_count}
}
return self.post(endpoint, data=data)