This commit is contained in:
87
request_module.py
Normal file
87
request_module.py
Normal file
@@ -0,0 +1,87 @@
|
||||
import requests
|
||||
import logging
|
||||
import hashlib
|
||||
|
||||
# Настройка логирования
|
||||
logger = logging.getLogger(__name__)
|
||||
logger.setLevel(logging.DEBUG)
|
||||
|
||||
class ReqModule:
|
||||
def __init__(self, host, rmsLogin, password):
|
||||
self.host = host
|
||||
self.rmsLogin = rmsLogin
|
||||
self.password = hashlib.sha1(password.encode('utf-8')).hexdigest()
|
||||
self.token = None
|
||||
self.session = requests.Session()
|
||||
|
||||
def login(self):
|
||||
logger.info(f"Вызов метода login с логином: {self.rmsLogin}")
|
||||
try:
|
||||
response = self.session.post(
|
||||
f'{self.host}/api/auth',
|
||||
data={'login': self.rmsLogin, 'pass': self.password},
|
||||
headers={'Content-Type': 'application/x-www-form-urlencoded'}
|
||||
)
|
||||
if response.status_code == 200:
|
||||
self.token = response.text
|
||||
logger.info(f'Получен токен: {self.token}')
|
||||
return True
|
||||
elif response.status_code == 401:
|
||||
logger.error(f'Ошибка авторизации. {response.text}')
|
||||
raise Exception('Unauthorized')
|
||||
except Exception as e:
|
||||
logger.error(f'Error in get_token: {str(e)}')
|
||||
raise
|
||||
|
||||
def logout(self):
|
||||
"""Функция для освобождения токена авторизации."""
|
||||
try:
|
||||
response = self.session.post(
|
||||
f'{self.host}/api/logout',
|
||||
data={'key': self.token},
|
||||
headers={'Content-Type': 'application/x-www-form-urlencoded'}
|
||||
)
|
||||
if response.status_code == 200:
|
||||
logger.info(f"{self.token} -- Токен освобожден")
|
||||
self.token = None
|
||||
return True
|
||||
except Exception as e:
|
||||
logger.error(f'Ошибка освобождения токена. {str(e)}')
|
||||
raise
|
||||
|
||||
def take_olap(self, params):
|
||||
"""Функция для отправки кастомного OLAP-запроса."""
|
||||
try:
|
||||
cookies = {'key': self.token}
|
||||
response = self.session.post(
|
||||
f'{self.host}/api/v2/reports/olap',
|
||||
json=params,
|
||||
cookies=cookies
|
||||
)
|
||||
if response.status_code == 200:
|
||||
return response.json()
|
||||
else:
|
||||
logger.error(f'Не удалось получить кастомный OLAP. Status code: {response.status_code} \nText: {response.text}')
|
||||
raise Exception('Request failed')
|
||||
except Exception as e:
|
||||
logger.error(f'Error in send_olap_request: {str(e)}')
|
||||
raise
|
||||
|
||||
def take_presets(self):
|
||||
"""Функция генерации шаблонов OLAP-запросов"""
|
||||
try:
|
||||
cookies = {'key': self.token}
|
||||
response = self.session.get(
|
||||
f'{self.host}/api/v2/reports/olap/presets',
|
||||
cookies=cookies
|
||||
)
|
||||
if response.status_code == 200:
|
||||
presets = response.json()
|
||||
logger.info('Пресеты переданы в генератор шаблонов')
|
||||
return presets
|
||||
else:
|
||||
logger.error(f"Не удалось получить пресеты. {response.text}")
|
||||
raise Exception('Take presets failed')
|
||||
except Exception as e:
|
||||
logger.error(f'Ошибка получения пресетов: {str(e)}')
|
||||
raise
|
||||
Reference in New Issue
Block a user