def load_napp(self, username, napp_name):
"""Load a single app.
Load a single NAPP based on its name.
Args:
username (str): NApp username present in napp's path.
napp_name (str): Name of the NApp to be loaded.
Raises:
FileNotFoundError: if napps' main.py is not found.
"""
if (username, napp_name) in self.napps:
message = 'NApp %s/%s was already loaded'
self.log.warning(message, username, napp_name)
else:
mod_name = '.'.join(['napps', username, napp_name, 'main'])
path = os.path.join(self.options.napps, username, napp_name,
'main.py')
napp_spec = spec_from_file_location(mod_name, path)
napp_module = module_from_spec(napp_spec)
sys.modules[napp_spec.name] = napp_module
napp_spec.loader.exec_module(napp_module)
napp = napp_module.Main(controller=self)
self.napps[(username, napp_name)] = napp
# This start method is inherited from the Threading class.
# It is not directly defined/declared on the KytosNApp class.
napp.start()
self.api_server.register_napp_endpoints(napp)
# pylint: disable=protected-access
for event, listeners in napp._listeners.items():
self.events_listeners.setdefault(event, []).extend(listeners)
# pylint: enable=protected-access
评论列表
文章目录