Files
olaper/request_module.py
SERTY 62115fcd36
Some checks failed
Deploy to Production / deploy (push) Has been cancelled
init commit
2025-07-25 03:04:51 +03:00

87 lines
3.6 KiB
Python
Raw 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
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