@@ -540,6 +540,10 @@ def fetch_extension_sources(self, skip_checksums=False):
540540 'options' : ext_options ,
541541 }
542542
543+ # if a particular easyblock is specified, make sure it's used
544+ # (this is picked up by init_ext_instances)
545+ ext_src ['easyblock' ] = ext_options .get ('easyblock' , None )
546+
543547 # construct dictionary with template values;
544548 # inherited from parent, except for name/version templates which are specific to this extension
545549 template_values = copy .deepcopy (self .cfg .template_values )
@@ -2295,15 +2299,23 @@ def init_ext_instances(self):
22952299 ext_name = ext ['name' ]
22962300 self .log .debug ("Creating class instance for extension %s..." , ext_name )
22972301
2302+ # if a specific easyblock is specified for this extension, honor it;
2303+ # just passing this to get_easyblock_class is sufficient
2304+ easyblock = ext .get ('easyblock' , None )
2305+ if easyblock :
2306+ class_name = easyblock
2307+ mod_path = get_module_path (class_name )
2308+ else :
2309+ class_name = encode_class_name (ext_name )
2310+ mod_path = get_module_path (class_name , generic = False )
2311+
22982312 cls , inst = None , None
2299- class_name = encode_class_name (ext_name )
2300- mod_path = get_module_path (class_name , generic = False )
23012313
2302- # try instantiating extension-specific class
2314+ # try instantiating extension-specific class, or honor specified easyblock
23032315 try :
23042316 # no error when importing class fails, in case we run into an existing easyblock
23052317 # with a similar name (e.g., Perl Extension 'GO' vs 'Go' for which 'EB_Go' is available)
2306- cls = get_easyblock_class (None , name = ext_name , error_on_failed_import = False ,
2318+ cls = get_easyblock_class (easyblock , name = ext_name , error_on_failed_import = False ,
23072319 error_on_missing_easyblock = False )
23082320 self .log .debug ("Obtained class %s for extension %s" , cls , ext_name )
23092321 if cls is not None :
0 commit comments