Commit aa1cf40e authored by Dannon Baker's avatar Dannon Baker
Browse files

fix preferred_viz to only return available visualizations

Ideally they are all available, but when they aren't, we can easily
filter this on the backend.  Down the road when users can configure
their own preferences, this will be even more important.
parent 100612b3
Loading
Loading
Loading
Loading
+21 −4
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ from fastapi import (
)

from galaxy.datatypes.registry import Registry
from galaxy.exceptions import ObjectNotFound
from galaxy.managers.datatypes import (
    DatatypeConverterList,
    DatatypeDetails,
@@ -33,8 +34,10 @@ from galaxy.managers.datatypes import (
    view_sniffers,
    view_visualization_mappings,
)
from galaxy.structured_app import StructuredApp
from . import (
    depends,
    DependsOnApp,
    Router,
)

@@ -64,6 +67,7 @@ IdentifierOnly: Optional[bool] = Query(
@router.cbv
class FastAPIDatatypes:
    datatypes_registry: Registry = depends(Registry)
    app: StructuredApp = DependsOnApp

    @router.get(
        "/api/datatypes",
@@ -253,11 +257,24 @@ class FastAPIDatatypes:
        if converters:
            result["converters"] = list(converters.keys())

        # Add preferred visualization if any
        # Add preferred visualization if any and if the plugin is available
        preferred_viz = self.datatypes_registry.get_preferred_visualization(datatype)
        if preferred_viz:
            plugin_name = preferred_viz["visualization"]

            # Check if the visualization plugin is actually available
            try:
                if self.app.visualizations_registry:
                    self.app.visualizations_registry.get_plugin(plugin_name)
                    result["preferred_visualization"] = {
                "visualization": preferred_viz["visualization"],
                        "visualization": plugin_name,
                    }
                else:
                    log.warning(
                        f"Visualizations registry not available, skipping preferred visualization for '{datatype}'"
                    )
            except ObjectNotFound:
                # Plugin not available, don't include preferred_visualization
                log.warning(f"Preferred visualization '{plugin_name}' for datatype '{datatype}' is not available")

        return result