use concurrent for the multiple file uploads instead of multiprocess.

This commit is contained in:
2023-05-09 13:08:50 +09:00
parent 6e065e7e25
commit c724af538b
11 changed files with 122 additions and 129 deletions

View File

@ -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)

View File

@ -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()

View File

@ -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()

View File

@ -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([])

View File

@ -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()