Warning
This document is for an old release of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.
Source code for galaxy.tool_util.toolbox.views.interface
from abc import abstractmethod
from enum import Enum
from typing import Optional
from pydantic import (
BaseModel,
ConfigDict,
)
from ..panel import (
HasPanelItems,
panel_item_types,
ToolPanelElements,
)
[docs]class ToolPanelViewModelType(str, Enum):
default_type = "default"
generic = "generic"
activity = "activity"
ontology = "ontology"
publication = "publication"
training = "training"
[docs]class ToolPanelViewModel(BaseModel):
"""A view of ToolPanelView objects serialized for the API."""
id: str
model_class: str
name: str
description: Optional[str] = None
view_type: ToolPanelViewModelType
searchable: bool # Allow for more dynamic views that don't plug into fixed search indicies in the future...
model_config = ConfigDict(protected_namespaces=())
[docs]class ToolBoxRegistry:
"""View of ToolBox provided to ToolPanelView to reason about tools loaded."""
[docs] @abstractmethod
def has_tool(self, tool_id: str) -> bool:
"""Return bool indicating if tool with specified id is loaded."""
[docs] @abstractmethod
def get_workflow(self, id: str):
"""Return workflow from panel with supplied id."""
[docs] @abstractmethod
def add_tool_to_tool_panel_view(self, tool, tool_panel_component: HasPanelItems) -> None:
"""Add tool to the tool panel view component (root or section)."""
[docs]class ToolPanelView:
[docs] @abstractmethod
def apply_view(self, base_tool_panel: ToolPanelElements, toolbox_registry: ToolBoxRegistry) -> ToolPanelElements:
"""Consume tool panel state and return custom tool panel view."""
[docs] @abstractmethod
def to_model(self) -> ToolPanelViewModel:
"""Convert abstract description to dictionary description to emit via the API."""
[docs]def walk_loaded_tools(tool_panel: ToolPanelElements, toolbox_registry: ToolBoxRegistry):
for key, item_type, val in tool_panel.panel_items_iter():
if item_type == panel_item_types.TOOL:
tool_id = key.replace("tool_", "", 1)
if toolbox_registry.has_tool(tool_id):
yield (tool_id, key, val, val.name)
elif item_type == panel_item_types.SECTION:
for section_key, section_item_type, section_val in val.panel_items_iter():
if section_item_type == panel_item_types.TOOL:
tool_id = section_key.replace("tool_", "", 1)
if toolbox_registry.has_tool(tool_id):
yield (tool_id, key, section_val, val.name)