import sys from typing import Final from pydantic import parse_obj_as from pydantic.dataclasses import dataclass from mdrsclient.api.base import BaseApi from mdrsclient.api.utils import token_check from mdrsclient.models import Folder, FolderSimple @dataclass(frozen=True) class FolderCreateResponse: id: str class FolderApi(BaseApi): ENTRYPOINT: Final[str] = "v2/folder/" def list(self, laboratory_id: int, path: str) -> list[FolderSimple]: print(self.__class__.__name__ + "::" + sys._getframe().f_code.co_name) url = self.ENTRYPOINT params = {"path": path, "laboratory_id": laboratory_id} token_check(self.connection) response = self._get(url, params=params) self._raise_response_error(response) ret: list[FolderSimple] = [] for data in response.json(): ret.append(parse_obj_as(FolderSimple, data)) return ret def retrieve(self, id: str) -> Folder: print(self.__class__.__name__ + "::" + sys._getframe().f_code.co_name) url = self.ENTRYPOINT + id + "/" token_check(self.connection) response = self._get(url) self._raise_response_error(response) ret = parse_obj_as(Folder, response.json()) return ret def create(self, name: str, parent_id: str) -> str: 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.connection) response = self._post(url, data=data) self._raise_response_error(response) ret = parse_obj_as(FolderCreateResponse, response.json()) return ret.id def update(self, folder: FolderSimple) -> bool: print(self.__class__.__name__ + "::" + sys._getframe().f_code.co_name) url = self.ENTRYPOINT data = { "name": folder.name, "description": folder.description, } token_check(self.connection) response = self._put(url, data=data) self._raise_response_error(response) return True def destroy(self, id: str) -> bool: print(self.__class__.__name__ + "::" + sys._getframe().f_code.co_name) url = self.ENTRYPOINT + id + "/" token_check(self.connection) response = self._delete(url) self._raise_response_error(response) return True def metadata(self, id: str) -> dict: print(self.__class__.__name__ + "::" + sys._getframe().f_code.co_name) url = self.ENTRYPOINT + id + "/metadata/" token_check(self.connection) response = self._get(url) self._raise_response_error(response) return response.json()