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)