From 23b27f0dfac07a8be8c40c7c95981b4e30014194 Mon Sep 17 00:00:00 2001 From: John Chilton Date: Fri, 16 Sep 2022 14:18:03 -0400 Subject: [PATCH] ToolShedApp for more correct typing in tool shed code. --- .../metadata/repository_metadata_manager.py | 3 ++- lib/tool_shed/structured_app.py | 12 ++++++++++++ lib/tool_shed/webapp/api/__init__.py | 6 ++++-- lib/tool_shed/webapp/app.py | 4 +++- 4 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 lib/tool_shed/structured_app.py diff --git a/lib/tool_shed/metadata/repository_metadata_manager.py b/lib/tool_shed/metadata/repository_metadata_manager.py index 59d0839cc85..b7ab6bd8438 100644 --- a/lib/tool_shed/metadata/repository_metadata_manager.py +++ b/lib/tool_shed/metadata/repository_metadata_manager.py @@ -12,6 +12,7 @@ from galaxy.web.form_builder import SelectField from tool_shed.metadata import metadata_generator from tool_shed.repository_types import util as rt_util from tool_shed.repository_types.metadata import TipOnly +from tool_shed.structured_app import ToolShedApp from tool_shed.util import ( basic_util, common_util, @@ -28,7 +29,7 @@ log = logging.getLogger(__name__) class RepositoryMetadataManager(metadata_generator.MetadataGenerator): def __init__( self, - app, + app: ToolShedApp, user, repository=None, changeset_revision=None, diff --git a/lib/tool_shed/structured_app.py b/lib/tool_shed/structured_app.py new file mode 100644 index 00000000000..3859f50bc5d --- /dev/null +++ b/lib/tool_shed/structured_app.py @@ -0,0 +1,12 @@ +from typing import TYPE_CHECKING + +from galaxy.structured_app import BasicSharedApp + +if TYPE_CHECKING: + from tool_shed.repository_types.registry import Registry as RepositoryTypesRegistry + from tool_shed.webapp.model import mapping + + +class ToolShedApp(BasicSharedApp): + repository_types_registry: "RepositoryTypesRegistry" + model: "mapping.ToolShedModelMapping" diff --git a/lib/tool_shed/webapp/api/__init__.py b/lib/tool_shed/webapp/api/__init__.py index 3c82d60c8d8..efe9257b639 100644 --- a/lib/tool_shed/webapp/api/__init__.py +++ b/lib/tool_shed/webapp/api/__init__.py @@ -1,7 +1,9 @@ -from galaxy.structured_app import BasicSharedApp from galaxy.webapps.base.controller import BaseAPIController +from tool_shed.structured_app import ToolShedApp class BaseShedAPIController(BaseAPIController): - def __init__(self, app: BasicSharedApp): + app: ToolShedApp + + def __init__(self, app: ToolShedApp): super().__init__(app) diff --git a/lib/tool_shed/webapp/app.py b/lib/tool_shed/webapp/app.py index 66ddd80ee26..aefe84d6c44 100644 --- a/lib/tool_shed/webapp/app.py +++ b/lib/tool_shed/webapp/app.py @@ -30,18 +30,20 @@ from galaxy.structured_app import BasicSharedApp from galaxy.util.dbkeys import GenomeBuilds from galaxy.web_stack import application_stack_instance from tool_shed.grids.repository_grid_filter_manager import RepositoryGridFilterManager +from tool_shed.structured_app import ToolShedApp from tool_shed.util.hgweb_config import hgweb_config_manager from . import config log = logging.getLogger(__name__) -class UniverseApplication(BasicSharedApp, SentryClientMixin, HaltableContainer): +class UniverseApplication(ToolShedApp, SentryClientMixin, HaltableContainer): """Encapsulates the state of a Universe application""" def __init__(self, **kwd) -> None: super().__init__() self[BasicSharedApp] = self + self[ToolShedApp] = self log.debug("python path is: %s", ", ".join(sys.path)) self.name = "tool_shed" # will be overwritten when building WSGI app