def _load(plugin): """ Import a module by file name. :param plugin: A plugin to load. :type plugin: Plugin :return: The loaded plugin. :rtype: Plugin """ Remote.clear() Actions.clear() Plugin.add(plugin) try: path = plugin.descriptor.main.plugin if path: Plugin.add(plugin, path) plugin.impl = __import__(path, {}, {}, [path.split('.')[-1]]) else: path = PluginLoader._find(plugin.name) plugin.impl = imp.load_source(plugin.name, path) log.info('plugin:%s loaded using: %s', plugin.name, path) for fn in Remote.find(plugin.impl.__name__): fn.gofer.plugin = plugin plugin.dispatcher += Remote.collated() plugin.actions = Actions.collated() plugin.delegate = Delegate() plugin.load() return plugin except Exception: log.exception('plugin:%s, import failed', plugin.name) Plugin.delete(plugin)