Skip to content

Commit 5fb725a

Browse files
committed
Look at parent datatypes when identifing a preferred visualization
1 parent b939088 commit 5fb725a

File tree

1 file changed

+35
-1
lines changed

1 file changed

+35
-1
lines changed

lib/galaxy/datatypes/registry.py

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -525,12 +525,46 @@ def get_preferred_visualization(self, datatype_extension):
525525
datatypes_conf.xml configuration file. These mappings determine which visualization plugin
526526
should be used by default when viewing datasets of a specific type.
527527
528+
If no direct mapping exists for the extension, this method will walk up the inheritance
529+
chain to find a preferred visualization from a parent datatype class.
530+
528531
Example configuration:
529532
<datatype extension="bam" type="galaxy.datatypes.binary:Bam" mimetype="application/octet-stream" display_in_upload="true">
530533
<visualization plugin="igv" />
531534
</datatype>
532535
"""
533-
return self.visualization_mappings.get(datatype_extension)
536+
direct_mapping = self.visualization_mappings.get(datatype_extension)
537+
if direct_mapping:
538+
return direct_mapping
539+
540+
current_datatype = self.get_datatype_by_extension(datatype_extension)
541+
if not current_datatype:
542+
return None
543+
544+
# Use the same mapping approach as the datatypes API for consistency
545+
from galaxy.managers.datatypes import view_mapping
546+
547+
mapping_data = view_mapping(self)
548+
549+
current_class_name = mapping_data.ext_to_class_name.get(datatype_extension)
550+
if not current_class_name:
551+
return None
552+
553+
current_class_mappings = mapping_data.class_to_classes.get(current_class_name, {})
554+
555+
# Find parent extensions that have preferred visualizations
556+
for ext, visualization_mapping in self.visualization_mappings.items():
557+
if ext == datatype_extension:
558+
continue
559+
560+
parent_class_name = mapping_data.ext_to_class_name.get(ext)
561+
if parent_class_name and parent_class_name in current_class_mappings:
562+
self.log.debug(
563+
f"Found inherited preferred visualization '{visualization_mapping['visualization']}' for datatype '{datatype_extension}' from parent '{ext}'"
564+
)
565+
return visualization_mapping
566+
567+
return None
534568

535569
def get_all_visualization_mappings(self):
536570
"""

0 commit comments

Comments
 (0)