importimportlibimportosfromgrutopia.core.utilimportlogALL_MODULES=[]MODEL_MODULES=['controllers','objects','metrics','robots','sensors','tasks','interactions','agents',]DEFAULT_EXTENSION_PATH=os.path.join(os.path.split(os.path.realpath(__file__))[0],'../../../grutopia_extension')def_handle_errors(errors):""" Log out and possibly reraise errors during import. Args: errors: errors dict to be logged """ifnoterrors:returnforname,errinerrors:log.warning('Module {} import failed: {}'.format(name,err))
[docs]defimport_all_modules_for_register(custom_module_paths=None,extension_path=None):""" Import all modules for register. Args: custom_module_paths: custom module paths, e.g. ['xxx.lib1', 'xxx.lib2', 'xxx.lib3'] extension_path: Extension path(integrated in grutopia_extension as default) """ifextension_pathisNone:extension_path=DEFAULT_EXTENSION_PATHfor_modinMODEL_MODULES:# grutopia_extension's default pathpath=os.path.join(extension_path,_mod)m=[m.split('.py')[0]forminos.listdir(path)ifm.endswith('.py')andm!='__init__.py']ALL_MODULES.append((_mod,m))modules=[]forbase_dir,modsinALL_MODULES:fornameinmods:full_name='grutopia_extension.'+base_dir+'.'+namemodules.append(full_name)ifisinstance(custom_module_paths,list):modules+=custom_module_pathserrors=[]formoduleinmodules:try:importlib.import_module(module)exceptImportErroraserror:errors.append((module,error))_handle_errors(errors)