@@ -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