diff --git a/lib/galaxy/webapps/galaxy/api/extended_metadata.py b/lib/galaxy/webapps/galaxy/api/extended_metadata.py index f8068d9fd41..c4a4dc9fcca 100644 --- a/lib/galaxy/webapps/galaxy/api/extended_metadata.py +++ b/lib/galaxy/webapps/galaxy/api/extended_metadata.py @@ -2,13 +2,14 @@ API operations on annotations. """ import logging +from typing import Generic, Optional, TypeVar from galaxy import ( managers, - web + model, + web, ) from galaxy.webapps.base.controller import ( - HTTPNotImplemented, UsesExtendedMetadataMixin, UsesLibraryMixinItems, UsesStoredWorkflowMixin @@ -17,10 +18,16 @@ from . import BaseGalaxyAPIController, depends log = logging.getLogger(__name__) +T = TypeVar('T') -class BaseExtendedMetadataController(BaseGalaxyAPIController, UsesExtendedMetadataMixin, UsesLibraryMixinItems, UsesStoredWorkflowMixin): - @web.legacy_expose_api +class BaseExtendedMetadataController(BaseGalaxyAPIController, UsesExtendedMetadataMixin, UsesLibraryMixinItems, UsesStoredWorkflowMixin, Generic[T]): + exmeta_item_id: str + + def _get_item_from_id(self, trans, idstr, check_writable=True) -> Optional[T]: + ... + + @web.expose_api def index(self, trans, **kwd): idnum = kwd[self.exmeta_item_id] item = self._get_item_from_id(trans, idnum, check_writable=False) @@ -29,7 +36,7 @@ class BaseExtendedMetadataController(BaseGalaxyAPIController, UsesExtendedMetada if ex_meta is not None: return ex_meta.data - @web.legacy_expose_api + @web.expose_api def create(self, trans, payload, **kwd): idnum = kwd[self.exmeta_item_id] item = self._get_item_from_id(trans, idnum, check_writable=True) @@ -41,26 +48,12 @@ class BaseExtendedMetadataController(BaseGalaxyAPIController, UsesExtendedMetada ex_obj = self.create_extended_metadata(trans, payload) self.set_item_extended_metadata_obj(trans, item, ex_obj) - @web.legacy_expose_api - def delete(self, trans, **kwd): - idnum = kwd[self.tagged_item_id] - item = self._get_item_from_id(trans, idnum, check_writable=True) - if item is not None: - ex_obj = self.get_item_extended_metadata_obj(trans, item) - if ex_obj is not None: - self.unset_item_extended_metadata_obj(trans, item) - self.delete_extended_metadata(trans, ex_obj) - @web.legacy_expose_api - def undelete(self, trans, **kwd): - raise HTTPNotImplemented() - - -class LibraryDatasetExtendMetadataController(BaseExtendedMetadataController): +class LibraryDatasetExtendMetadataController(BaseExtendedMetadataController[model.LibraryDatasetDatasetAssociation]): controller_name = "library_dataset_extended_metadata" exmeta_item_id = "library_content_id" - def _get_item_from_id(self, trans, idstr, check_writable=True): + def _get_item_from_id(self, trans, idstr, check_writable=True) -> Optional[model.LibraryDatasetDatasetAssociation]: if check_writable: item = self.get_library_dataset_dataset_association(trans, idstr) if trans.app.security_agent.can_modify_library_item(trans.get_current_user_roles(), item): @@ -72,12 +65,12 @@ class LibraryDatasetExtendMetadataController(BaseExtendedMetadataController): return None -class HistoryDatasetExtendMetadataController(BaseExtendedMetadataController): +class HistoryDatasetExtendMetadataController(BaseExtendedMetadataController[model.HistoryDatasetAssociation]): controller_name = "history_dataset_extended_metadata" exmeta_item_id = "history_content_id" hda_manager: managers.hdas.HDAManager = depends(managers.hdas.HDAManager) - def _get_item_from_id(self, trans, idstr, check_writable=True): + def _get_item_from_id(self, trans, idstr, check_writable=True) -> Optional[model.HistoryDatasetAssociation]: decoded_idstr = self.decode_id(idstr) if check_writable: return self.hda_manager.get_owned(decoded_idstr, trans.user, current_history=trans.history) diff --git a/setup.cfg b/setup.cfg index d177f5b08d0..5dbcda0b039 100644 --- a/setup.cfg +++ b/setup.cfg @@ -751,8 +751,6 @@ check_untyped_defs = False check_untyped_defs = False [mypy-galaxy.webapps.galaxy.api.genomes] check_untyped_defs = False -[mypy-galaxy.webapps.galaxy.api.extended_metadata] -check_untyped_defs = False [mypy-galaxy.webapps.galaxy.api.datasets] check_untyped_defs = False [mypy-galaxy.webapps.galaxy.api.authenticate]