"""
API Controller providing Galaxy Tours
"""
import logging
from galaxy.managers.context import ProvidesAppContext
from galaxy.managers.tours import ToursManager
from galaxy.schema.schema import GenerateTourResponse
from galaxy.schema.tours import (
TourDetails,
TourList,
)
from galaxy.tours import ToursRegistry
from galaxy.webapps.galaxy.api import DependsOnTrans
from . import (
depends,
Router,
)
log = logging.getLogger(__name__)
router = Router(tags=["tours"])
[docs]
@router.cbv
class FastAPITours:
registry: ToursRegistry = depends(ToursRegistry) # type: ignore[type-abstract] # https://github.com/python/mypy/issues/4717
manager: ToursManager = depends(ToursManager)
[docs]
@router.get("/api/tours", public=True)
def index(self) -> TourList:
"""Return list of available tours."""
return self.registry.get_tours()
[docs]
@router.get("/api/tours/generate", public=True)
def generate_tour(
self, tool_id: str, tool_version: str, performs_upload: bool = True, trans: ProvidesAppContext = DependsOnTrans
) -> GenerateTourResponse:
"""Generate a tour designed for the given tool."""
return self.manager.generate_tour(tool_id, tool_version, trans, performs_upload=performs_upload)
[docs]
@router.get("/api/tours/{tour_id}", public=True)
def show(self, tour_id: str) -> TourDetails:
"""Return a tour definition."""
return self.registry.tour_contents(tour_id)
[docs]
@router.post("/api/tours/{tour_id}", require_admin=True)
def update_tour(self, tour_id: str) -> TourDetails:
"""Return a tour definition."""
return self.registry.load_tour(tour_id)