Shelter PMS fully functional
This commit is contained in:
92
pms_integration/api_client.py
Normal file
92
pms_integration/api_client.py
Normal 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)
|
||||
Reference in New Issue
Block a user