@@ -120,16 +120,19 @@ def loadClasses(folder: str, packageName: str, classType: type) -> list[type]:
120120 else :
121121 classes .append (p )
122122 except Exception as e :
123- tb = traceback .extract_tb (e .__traceback__ )
124- last_call = tb [- 1 ]
125- errors .append (f' * { pluginName } ({ type (e ).__name__ } ): { e } \n '
126- # filename:lineNumber functionName
127- f'{ last_call .filename } :{ last_call .lineno } { last_call .name } \n '
128- # line of code with the error
129- f'{ last_call .line } '
130- # Full traceback
131- f'\n { traceback .format_exc ()} \n \n '
132- )
123+ if classType == BaseSubmitter :
124+ logging .warning (f" Could not load submitter { pluginName } from package '{ package .__name__ } '" )
125+ else :
126+ tb = traceback .extract_tb (e .__traceback__ )
127+ last_call = tb [- 1 ]
128+ errors .append (f' * { pluginName } ({ type (e ).__name__ } ): { e } \n '
129+ # filename:lineNumber functionName
130+ f'{ last_call .filename } :{ last_call .lineno } { last_call .name } \n '
131+ # line of code with the error
132+ f'{ last_call .line } '
133+ # Full traceback
134+ f'\n { traceback .format_exc ()} \n \n '
135+ )
133136
134137 if errors :
135138 logging .warning (' The following "{package}" plugins could not be loaded:\n '
@@ -381,14 +384,24 @@ def registerSubmitter(s: BaseSubmitter):
381384 submitters [s .name ] = s
382385
383386
384- def loadSubmitters (folder , packageName ):
387+ def loadSubmitters (folder , packageName ) -> list [ BaseSubmitter ] :
385388 if not os .path .isdir (folder ):
386389 logging .error (f"Submitters folder '{ folder } ' does not exist." )
387390 return
388391
389392 return loadClassesSubmitters (folder , packageName )
390393
391394
395+ def loadAllSubmitters (folder ) -> list [BaseSubmitter ]:
396+ submitters = []
397+ for _ , package , ispkg in pkgutil .iter_modules ([folder ]):
398+ if ispkg :
399+ subs = loadSubmitters (folder , package )
400+ if subs :
401+ submitters .extend (subs )
402+ return submitters
403+
404+
392405def loadPipelineTemplates (folder : str ):
393406 if not os .path .isdir (folder ):
394407 logging .error (f"Pipeline templates folder '{ folder } ' does not exist." )
@@ -409,10 +422,20 @@ def initNodes():
409422
410423
411424def initSubmitters ():
425+ """ Detect and register submitter plugins
426+ Note: Make sure the package name (folder inside the additionalPaths folders)
427+ are unique : so we cannot name them "submitters" because it's already taken
428+ by the submitters package inside meshroom
429+ """
430+ # Load meshroom default submitters
431+ # Use directly loadSubmitters because we don't want any folder except submitters to be registered
432+ subs = loadSubmitters (meshroomFolder , "submitters" )
433+ for sub in subs :
434+ registerSubmitter (sub ())
435+ # Load additional submitters
412436 additionalPaths = EnvVar .getList (EnvVar .MESHROOM_SUBMITTERS_PATH )
413- allSubmittersFolders = [meshroomFolder ] + additionalPaths
414- for folder in allSubmittersFolders :
415- subs = loadSubmitters (folder , "submitters" )
437+ for folder in additionalPaths :
438+ subs = loadAllSubmitters (folder )
416439 for sub in subs :
417440 registerSubmitter (sub ())
418441
0 commit comments