83 lines
1.4 KiB
Python
83 lines
1.4 KiB
Python
|
|
import requests
|
||
|
|
|
||
|
|
import logging
|
||
|
|
|
||
|
|
from rest_framework.response import Response
|
||
|
|
|
||
|
|
from .constants import *
|
||
|
|
|
||
|
|
def get_new_token(url):
|
||
|
|
|
||
|
|
"""Function to get a new token."""
|
||
|
|
|
||
|
|
payload = {"UserName": USERNAME, "Password": PASSWORD}
|
||
|
|
|
||
|
|
try:
|
||
|
|
|
||
|
|
response = requests.post(url, json=payload)
|
||
|
|
|
||
|
|
response_data = response.json()
|
||
|
|
|
||
|
|
if response.status_code == 200 and response_data.get("IsSuccess"):
|
||
|
|
|
||
|
|
return response_data["Value"]["Token"]
|
||
|
|
|
||
|
|
else:
|
||
|
|
|
||
|
|
return None
|
||
|
|
|
||
|
|
except requests.RequestException as e:
|
||
|
|
|
||
|
|
logging.error(f"Network error while getting token: {str(e)}")
|
||
|
|
|
||
|
|
return None
|
||
|
|
|
||
|
|
def request_to_api(url, token, payload=None, timeout=10):
|
||
|
|
|
||
|
|
"""General function to make API requests."""
|
||
|
|
|
||
|
|
if payload is None:
|
||
|
|
|
||
|
|
payload = {}
|
||
|
|
|
||
|
|
headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"}
|
||
|
|
|
||
|
|
try:
|
||
|
|
|
||
|
|
response = requests.post(url, json=payload, headers=headers, timeout=timeout)
|
||
|
|
|
||
|
|
if response.ok:
|
||
|
|
|
||
|
|
return response.json()
|
||
|
|
|
||
|
|
else:
|
||
|
|
|
||
|
|
logging.error(f"Error from API ({url}): {response.status_code} - {response.text}")
|
||
|
|
|
||
|
|
return None
|
||
|
|
|
||
|
|
except requests.Timeout:
|
||
|
|
|
||
|
|
logging.error(f"Timeout while requesting {url}")
|
||
|
|
|
||
|
|
return None
|
||
|
|
|
||
|
|
except requests.RequestException as e:
|
||
|
|
|
||
|
|
logging.error(f"Request error to {url}: {str(e)}")
|
||
|
|
|
||
|
|
return None
|
||
|
|
|
||
|
|
def create_response(status, message=None, data=None, status_code=200):
|
||
|
|
|
||
|
|
"""Function to create consistent API responses."""
|
||
|
|
|
||
|
|
return Response({
|
||
|
|
|
||
|
|
"status": status,
|
||
|
|
|
||
|
|
"message": message,
|
||
|
|
|
||
|
|
"data": data
|
||
|
|
|
||
|
|
}, status=status_code)
|