Files
mdrs-client-python/mdrsclient/api/base.py
T

31 lines
1.3 KiB
Python

from abc import ABC
import requests
from pydantic import TypeAdapter
from requests import Response
from mdrsclient.connection import MDRSConnection
from mdrsclient.exceptions import BadRequestException, ForbiddenException, UnauthorizedException, UnexpectedException
from mdrsclient.models.error import DRFStandardizedErrors
class BaseApi(ABC):
connection: MDRSConnection
def __init__(self, connection: MDRSConnection) -> None:
self.connection = connection
def _raise_response_error(self, response: Response) -> None:
if response.status_code >= 300:
if response.status_code < 400 or response.status_code >= 500:
raise UnexpectedException(f"Unexpected status code returned: {response.status_code}.")
errors = TypeAdapter(DRFStandardizedErrors).validate_python(response.json())
if response.status_code == requests.codes.bad_request:
raise BadRequestException(errors.errors[0].detail)
elif response.status_code == requests.codes.unauthorized:
raise UnauthorizedException("Login required.")
elif response.status_code == requests.codes.forbidden:
raise ForbiddenException("You do not have enough permissions. Access is denied.")
else:
raise UnexpectedException(errors.errors[0].detail)