2023-05-01 20:00:32 +09:00
|
|
|
import requests
|
|
|
|
|
|
|
|
from mdrsclient.cache import CacheFile
|
|
|
|
from mdrsclient.exceptions import MissingConfigurationException
|
|
|
|
from mdrsclient.models import Laboratories, Token, User
|
|
|
|
|
|
|
|
|
2023-05-09 13:08:50 +09:00
|
|
|
class MDRSConnection:
|
2023-05-01 20:00:32 +09:00
|
|
|
url: str
|
2023-05-09 13:08:50 +09:00
|
|
|
session: requests.Session
|
2023-05-01 20:00:32 +09:00
|
|
|
__cache: CacheFile
|
|
|
|
|
|
|
|
def __init__(self, remote: str, url: str) -> None:
|
|
|
|
super().__init__()
|
|
|
|
self.url = url
|
2023-05-09 13:08:50 +09:00
|
|
|
self.session = requests.Session()
|
2023-05-01 20:00:32 +09:00
|
|
|
self.__cache = CacheFile(remote)
|
|
|
|
self.__prepare_headers()
|
|
|
|
|
|
|
|
def build_url(self, *args) -> str:
|
|
|
|
if self.url == "":
|
|
|
|
raise MissingConfigurationException("remote host is not configured")
|
|
|
|
parts = [self.url]
|
|
|
|
parts.extend(args)
|
|
|
|
return "/".join(parts)
|
|
|
|
|
|
|
|
def logout(self) -> None:
|
|
|
|
del self.__cache.user
|
|
|
|
del self.__cache.token
|
2023-05-09 13:08:50 +09:00
|
|
|
self.session.headers.update({"Authorization": ""})
|
2023-05-01 20:00:32 +09:00
|
|
|
|
|
|
|
@property
|
|
|
|
def user(self) -> User | None:
|
|
|
|
return self.__cache.user
|
|
|
|
|
|
|
|
@user.setter
|
|
|
|
def user(self, user: User) -> None:
|
|
|
|
self.__cache.user = user
|
|
|
|
|
|
|
|
@property
|
|
|
|
def token(self) -> Token | None:
|
|
|
|
return self.__cache.token
|
|
|
|
|
|
|
|
@token.setter
|
|
|
|
def token(self, token: Token) -> None:
|
|
|
|
self.__cache.token = token
|
|
|
|
self.__prepare_headers()
|
|
|
|
|
|
|
|
@property
|
|
|
|
def laboratories(self) -> Laboratories:
|
|
|
|
return self.__cache.laboratories
|
|
|
|
|
|
|
|
@laboratories.setter
|
|
|
|
def laboratories(self, laboratories: Laboratories) -> None:
|
|
|
|
self.__cache.laboratories = laboratories
|
|
|
|
|
|
|
|
def __prepare_headers(self) -> None:
|
2023-05-09 13:08:50 +09:00
|
|
|
self.session.headers.update({"accept": "application/json"})
|
2023-05-01 20:00:32 +09:00
|
|
|
if self.token is not None:
|
2023-05-09 13:08:50 +09:00
|
|
|
self.session.headers.update({"Authorization": f"Bearer {self.token.access}"})
|