Commit 5fb725a1 authored by Dannon Baker's avatar Dannon Baker
Browse files

Look at parent datatypes when identifing a preferred visualization

parent b9390881
Loading
Loading
Loading
Loading
+35 −1
Original line number Diff line number Diff line
@@ -525,12 +525,46 @@ class Registry:
        datatypes_conf.xml configuration file. These mappings determine which visualization plugin
        should be used by default when viewing datasets of a specific type.

        If no direct mapping exists for the extension, this method will walk up the inheritance
        chain to find a preferred visualization from a parent datatype class.

        Example configuration:
        <datatype extension="bam" type="galaxy.datatypes.binary:Bam" mimetype="application/octet-stream" display_in_upload="true">
            <visualization plugin="igv" />
        </datatype>
        """
        return self.visualization_mappings.get(datatype_extension)
        direct_mapping = self.visualization_mappings.get(datatype_extension)
        if direct_mapping:
            return direct_mapping

        current_datatype = self.get_datatype_by_extension(datatype_extension)
        if not current_datatype:
            return None

        # Use the same mapping approach as the datatypes API for consistency
        from galaxy.managers.datatypes import view_mapping

        mapping_data = view_mapping(self)

        current_class_name = mapping_data.ext_to_class_name.get(datatype_extension)
        if not current_class_name:
            return None

        current_class_mappings = mapping_data.class_to_classes.get(current_class_name, {})

        # Find parent extensions that have preferred visualizations
        for ext, visualization_mapping in self.visualization_mappings.items():
            if ext == datatype_extension:
                continue

            parent_class_name = mapping_data.ext_to_class_name.get(ext)
            if parent_class_name and parent_class_name in current_class_mappings:
                self.log.debug(
                    f"Found inherited preferred visualization '{visualization_mapping['visualization']}' for datatype '{datatype_extension}' from parent '{ext}'"
                )
                return visualization_mapping

        return None

    def get_all_visualization_mappings(self):
        """