Files
Touchh/pms_integration/api_client.py
2024-12-09 16:36:11 +09:00

93 lines
3.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)