use concurrent for the multiple file uploads instead of multiprocess.
This commit is contained in:
@ -4,6 +4,7 @@ import requests
|
||||
from pydantic import parse_obj_as
|
||||
from requests import Response
|
||||
|
||||
from mdrsclient.connection import MDRSConnection
|
||||
from mdrsclient.exceptions import (
|
||||
BadRequestException,
|
||||
ForbiddenException,
|
||||
@ -11,27 +12,28 @@ from mdrsclient.exceptions import (
|
||||
UnexpectedException,
|
||||
)
|
||||
from mdrsclient.models import DRFStandardizedErrors
|
||||
from mdrsclient.session import MDRSSession
|
||||
|
||||
|
||||
class BaseApi(ABC):
|
||||
def __init__(self, session: MDRSSession) -> None:
|
||||
self.session = session
|
||||
connection: MDRSConnection
|
||||
|
||||
def __init__(self, connection: MDRSConnection) -> None:
|
||||
self.connection = connection
|
||||
|
||||
def _get(self, url, *args, **kwargs) -> Response:
|
||||
return self.session.get(self.__build_url(url), *args, **kwargs)
|
||||
return self.connection.session.get(self.__build_url(url), *args, **kwargs)
|
||||
|
||||
def _post(self, url, *args, **kwargs) -> Response:
|
||||
return self.session.post(self.__build_url(url), *args, **kwargs)
|
||||
return self.connection.session.post(self.__build_url(url), *args, **kwargs)
|
||||
|
||||
def _put(self, url, *args, **kwargs) -> Response:
|
||||
return self.session.put(self.__build_url(url), *args, **kwargs)
|
||||
return self.connection.session.put(self.__build_url(url), *args, **kwargs)
|
||||
|
||||
def _delete(self, url, *args, **kwargs) -> Response:
|
||||
return self.session.delete(self.__build_url(url), *args, **kwargs)
|
||||
return self.connection.session.delete(self.__build_url(url), *args, **kwargs)
|
||||
|
||||
def _patch(self, url, *args, **kwargs) -> Response:
|
||||
return self.session.patch(self.__build_url(url), *args, **kwargs)
|
||||
return self.connection.session.patch(self.__build_url(url), *args, **kwargs)
|
||||
|
||||
def _raise_response_error(self, response: Response) -> None:
|
||||
if response.status_code >= 300:
|
||||
@ -48,4 +50,4 @@ class BaseApi(ABC):
|
||||
raise UnexpectedException(errors.errors[0].detail)
|
||||
|
||||
def __build_url(self, *args: tuple) -> str:
|
||||
return self.session.build_url(*args)
|
||||
return self.connection.build_url(*args)
|
||||
|
@ -21,7 +21,7 @@ class FileApi(BaseApi):
|
||||
def retrieve(self, id: str) -> File:
|
||||
print(self.__class__.__name__ + "::" + sys._getframe().f_code.co_name)
|
||||
url = self.ENTRYPOINT + id + "/"
|
||||
token_check(self.session)
|
||||
token_check(self.connection)
|
||||
response = self._get(url)
|
||||
self._raise_response_error(response)
|
||||
return parse_obj_as(File, response.json())
|
||||
@ -29,7 +29,7 @@ class FileApi(BaseApi):
|
||||
def create(self, folder_id: str, path: str) -> str:
|
||||
print(self.__class__.__name__ + "::" + sys._getframe().f_code.co_name)
|
||||
url = self.ENTRYPOINT
|
||||
token_check(self.session)
|
||||
token_check(self.connection)
|
||||
data = {"folder_id": folder_id}
|
||||
try:
|
||||
with open(path, mode="rb") as fp:
|
||||
@ -43,7 +43,7 @@ class FileApi(BaseApi):
|
||||
def update(self, file: File, path: str | None) -> bool:
|
||||
print(self.__class__.__name__ + "::" + sys._getframe().f_code.co_name)
|
||||
url = self.ENTRYPOINT + file.id + "/"
|
||||
token_check(self.session)
|
||||
token_check(self.connection)
|
||||
if path is not None:
|
||||
try:
|
||||
with open(path, mode="rb") as fp:
|
||||
@ -59,7 +59,7 @@ class FileApi(BaseApi):
|
||||
def destroy(self, file: File) -> bool:
|
||||
print(self.__class__.__name__ + "::" + sys._getframe().f_code.co_name)
|
||||
url = self.ENTRYPOINT + file.id + "/"
|
||||
token_check(self.session)
|
||||
token_check(self.connection)
|
||||
response = self._delete(url)
|
||||
self._raise_response_error(response)
|
||||
return True
|
||||
@ -68,7 +68,7 @@ class FileApi(BaseApi):
|
||||
print(self.__class__.__name__ + "::" + sys._getframe().f_code.co_name)
|
||||
url = self.ENTRYPOINT + file.id + "/move/"
|
||||
data = {"folder": folder_id}
|
||||
token_check(self.session)
|
||||
token_check(self.connection)
|
||||
response = self._post(url, data=data)
|
||||
self._raise_response_error(response)
|
||||
return True
|
||||
@ -76,7 +76,7 @@ class FileApi(BaseApi):
|
||||
def metadata(self, file: File) -> dict:
|
||||
print(self.__class__.__name__ + "::" + sys._getframe().f_code.co_name)
|
||||
url = self.ENTRYPOINT + file.id + "/metadata/"
|
||||
token_check(self.session)
|
||||
token_check(self.connection)
|
||||
response = self._get(url)
|
||||
self._raise_response_error(response)
|
||||
return response.json()
|
||||
|
@ -21,7 +21,7 @@ class FolderApi(BaseApi):
|
||||
print(self.__class__.__name__ + "::" + sys._getframe().f_code.co_name)
|
||||
url = self.ENTRYPOINT
|
||||
params = {"path": path, "laboratory_id": laboratory_id}
|
||||
token_check(self.session)
|
||||
token_check(self.connection)
|
||||
response = self._get(url, params=params)
|
||||
self._raise_response_error(response)
|
||||
ret: list[FolderSimple] = []
|
||||
@ -32,7 +32,7 @@ class FolderApi(BaseApi):
|
||||
def retrieve(self, id: str) -> Folder:
|
||||
print(self.__class__.__name__ + "::" + sys._getframe().f_code.co_name)
|
||||
url = self.ENTRYPOINT + id + "/"
|
||||
token_check(self.session)
|
||||
token_check(self.connection)
|
||||
response = self._get(url)
|
||||
self._raise_response_error(response)
|
||||
ret = parse_obj_as(Folder, response.json())
|
||||
@ -42,7 +42,7 @@ class FolderApi(BaseApi):
|
||||
print(self.__class__.__name__ + "::" + sys._getframe().f_code.co_name)
|
||||
url = self.ENTRYPOINT
|
||||
data = {"name": name, "parent_id": parent_id, "description": "", "template_id": -1}
|
||||
token_check(self.session)
|
||||
token_check(self.connection)
|
||||
response = self._post(url, data=data)
|
||||
self._raise_response_error(response)
|
||||
ret = parse_obj_as(FolderCreateResponse, response.json())
|
||||
@ -55,7 +55,7 @@ class FolderApi(BaseApi):
|
||||
"name": folder.name,
|
||||
"description": folder.description,
|
||||
}
|
||||
token_check(self.session)
|
||||
token_check(self.connection)
|
||||
response = self._put(url, data=data)
|
||||
self._raise_response_error(response)
|
||||
return True
|
||||
@ -63,7 +63,7 @@ class FolderApi(BaseApi):
|
||||
def destroy(self, id: str) -> bool:
|
||||
print(self.__class__.__name__ + "::" + sys._getframe().f_code.co_name)
|
||||
url = self.ENTRYPOINT + id + "/"
|
||||
token_check(self.session)
|
||||
token_check(self.connection)
|
||||
response = self._delete(url)
|
||||
self._raise_response_error(response)
|
||||
return True
|
||||
@ -71,7 +71,7 @@ class FolderApi(BaseApi):
|
||||
def metadata(self, id: str) -> dict:
|
||||
print(self.__class__.__name__ + "::" + sys._getframe().f_code.co_name)
|
||||
url = self.ENTRYPOINT + id + "/metadata/"
|
||||
token_check(self.session)
|
||||
token_check(self.connection)
|
||||
response = self._get(url)
|
||||
self._raise_response_error(response)
|
||||
return response.json()
|
||||
|
@ -14,7 +14,7 @@ class LaboratoryApi(BaseApi):
|
||||
def list(self) -> Laboratories:
|
||||
print(self.__class__.__name__ + "::" + sys._getframe().f_code.co_name)
|
||||
url = self.ENTRYPOINT
|
||||
token_check(self.session)
|
||||
token_check(self.connection)
|
||||
response = self._get(url)
|
||||
self._raise_response_error(response)
|
||||
ret = Laboratories([])
|
||||
|
@ -1,15 +1,15 @@
|
||||
from mdrsclient.api.user import UserApi
|
||||
from mdrsclient.connection import MDRSConnection
|
||||
from mdrsclient.exceptions import UnauthorizedException
|
||||
from mdrsclient.session import MDRSSession
|
||||
|
||||
|
||||
def token_check(session: MDRSSession) -> None:
|
||||
if session.token is not None:
|
||||
if session.token.is_refresh_required:
|
||||
user_api = UserApi(session)
|
||||
def token_check(connection: MDRSConnection) -> None:
|
||||
if connection.token is not None:
|
||||
if connection.token.is_refresh_required:
|
||||
user_api = UserApi(connection)
|
||||
try:
|
||||
session.token = user_api.refresh(session.token)
|
||||
connection.token = user_api.refresh(connection.token)
|
||||
except UnauthorizedException:
|
||||
session.logout()
|
||||
elif session.token.is_expired:
|
||||
session.logout()
|
||||
connection.logout()
|
||||
elif connection.token.is_expired:
|
||||
connection.logout()
|
||||
|
Reference in New Issue
Block a user