from typing import Final from pydantic import TypeAdapter from pydantic.dataclasses import dataclass from mdrsclient.api.base import BaseApi from mdrsclient.api.utils import token_check from mdrsclient.models.doi import Doi @dataclass(frozen=True) class DoiRetrieveFolderRef: id: str @dataclass(frozen=True) class DoiRetrieveResponse: id: str doi: str folder: DoiRetrieveFolderRef class DoiApi(BaseApi): ENTRYPOINT: Final[str] = "v3/doi/" def retrieve(self, doi_id: str) -> Doi: """Retrieve the folder associated with a DOI suffix ID (GET v3/doi/{id}/).""" url = self.ENTRYPOINT + doi_id + "/" token_check(self.connection) response = self.connection.get(url) self._raise_response_error(response) api_resp = TypeAdapter(DoiRetrieveResponse).validate_python(response.json()) return Doi(id=api_resp.id, doi=api_resp.doi, folder_id=api_resp.folder.id)