def loadPlugins(plugins, root, appconf, apiRoot=None, curConfig=None): """ Loads a set of plugins into the application. The list passed in should not already contain dependency information; dependent plugins will be loaded automatically. :param plugins: The set of plugins to load, by directory name. :type plugins: list :param root: The root node of the server tree. :param appconf: The server's cherrypy configuration object. :type appconf: dict :returns: A list of plugins that were actually loaded, once dependencies were resolved and topological sort was performed. """ # Register a pseudo-package for the root of all plugins. This must be # present in the system module list in order to avoid import warnings. if curConfig is None: curConfig = config.getConfig() if 'plugins' in curConfig and 'plugin_directory' in curConfig['plugins']: pluginDir = curConfig['plugins']['plugin_directory'] elif os.path.exists(os.path.join(PACKAGE_DIR, 'plugins')): pluginDir = os.path.join(PACKAGE_DIR, 'plugins') else: pluginDir = os.path.join(ROOT_DIR, 'plugins') if ROOT_PLUGINS_PACKAGE not in sys.modules: sys.modules[ROOT_PLUGINS_PACKAGE] = type( '', (), { '__path__': pluginDir, '__package__': ROOT_PLUGINS_PACKAGE, '__name__': ROOT_PLUGINS_PACKAGE })() print TerminalColor.info('Resolving plugin dependencies...') filteredDepGraph = { pluginName: info['dependencies'] for pluginName, info in findAllPlugins(curConfig).iteritems() if pluginName in plugins } for pset in toposort(filteredDepGraph): for plugin in pset: try: root, appconf, apiRoot = loadPlugin(plugin, root, appconf, apiRoot, curConfig=curConfig) print TerminalColor.success( 'Loaded plugin "{}"'.format(plugin)) except Exception: print TerminalColor.error( 'ERROR: Failed to load plugin "{}":'.format(plugin)) traceback.print_exc() return root, appconf, apiRoot
def loadPlugins(plugins, root, appconf, apiRoot=None, curConfig=None): """ Loads a set of plugins into the application. The list passed in should not already contain dependency information; dependent plugins will be loaded automatically. :param plugins: The set of plugins to load, by directory name. :type plugins: list :param root: The root node of the server tree. :param appconf: The server's cherrypy configuration object. :type appconf: dict :returns: A list of plugins that were actually loaded, once dependencies were resolved and topological sort was performed. """ # Register a pseudo-package for the root of all plugins. This must be # present in the system module list in order to avoid import warnings. if curConfig is None: curConfig = config.getConfig() if 'plugins' in curConfig and 'plugin_directory' in curConfig['plugins']: pluginDir = curConfig['plugins']['plugin_directory'] elif os.path.exists(os.path.join(PACKAGE_DIR, 'plugins')): pluginDir = os.path.join(PACKAGE_DIR, 'plugins') else: pluginDir = os.path.join(ROOT_DIR, 'plugins') if ROOT_PLUGINS_PACKAGE not in sys.modules: sys.modules[ROOT_PLUGINS_PACKAGE] = type('', (), { '__path__': pluginDir, '__package__': ROOT_PLUGINS_PACKAGE, '__name__': ROOT_PLUGINS_PACKAGE })() print TerminalColor.info('Resolving plugin dependencies...') filteredDepGraph = { pluginName: info['dependencies'] for pluginName, info in findAllPlugins(curConfig).iteritems() if pluginName in plugins } for pset in toposort(filteredDepGraph): for plugin in pset: try: root, appconf, apiRoot = loadPlugin( plugin, root, appconf, apiRoot, curConfig=curConfig) print TerminalColor.success('Loaded plugin "{}"' .format(plugin)) except Exception: print TerminalColor.error( 'ERROR: Failed to load plugin "{}":'.format(plugin)) traceback.print_exc() return root, appconf, apiRoot
def loadPlugins(plugins, root, appconf, apiRoot=None, curConfig=None, buildDag=True): """ Loads a set of plugins into the application. :param plugins: The set of plugins to load, by directory name. :type plugins: list :param root: The root node of the server tree. :type root: object :param appconf: The server's cherrypy configuration object. :type appconf: dict :param apiRoot: The cherrypy api root object. :type apiRoot: object or None :param curConfig: A girder config object to use. :type curConfig: dict or None :param buildDag: If the ``plugins`` parameter is already a topo-sorted list with all dependencies resolved, set this to False and it will skip rebuilding the DAG. Otherwise the dependency resolution and sorting will occur within this method. :type buildDag: bool :returns: A 3-tuple containing the modified root, config, and apiRoot objects. :rtype tuple: """ # Register a pseudo-package for the root of all plugins. This must be # present in the system module list in order to avoid import warnings. if curConfig is None: curConfig = _config.getConfig() if 'plugins' in curConfig and 'plugin_directory' in curConfig['plugins']: print(TerminalColor.warning( 'Warning: the plugin_directory setting is deprecated. Please use ' 'the `girder-install plugin` command and remove this setting from ' 'your config file.')) if ROOT_PLUGINS_PACKAGE not in sys.modules: module = imp.new_module(ROOT_PLUGINS_PACKAGE) girder.plugins = module sys.modules[ROOT_PLUGINS_PACKAGE] = module print(TerminalColor.info('Resolving plugin dependencies...')) if buildDag: plugins = getToposortedPlugins(plugins, curConfig, ignoreMissing=True) for plugin in plugins: try: root, appconf, apiRoot = loadPlugin( plugin, root, appconf, apiRoot, curConfig=curConfig) print(TerminalColor.success('Loaded plugin "%s"' % plugin)) except Exception: print(TerminalColor.error( 'ERROR: Failed to load plugin "%s":' % plugin)) girder.logger.exception('Plugin load failure: %s' % plugin) traceback.print_exc() return root, appconf, apiRoot
def loadPlugins(plugins, root): """ Loads a set of plugins into the application. The list passed in should not already contain dependency information; dependent plugins will be loaded automatically. :param plugins: The set of plugins to load, by directory name. :type plugins: list :param root: The root node of the server tree. :returns: A list of plugins that were actually loaded, once dependencies were resolved and topological sort was performed. """ # Register a pseudo-package for the root of all plugins. This must be # present in the system module list in order to avoid import warnings. if not ROOT_PLUGINS_PACKAGE in sys.modules: sys.modules[ROOT_PLUGINS_PACKAGE] = type( "", (), { "__path__": os.path.join(ROOT_DIR, "plugins"), "__package__": ROOT_PLUGINS_PACKAGE, "__name__": ROOT_PLUGINS_PACKAGE, }, )() print TerminalColor.info("Resolving plugin dependencies...") filteredDepGraph = { pluginName: info["dependencies"] for pluginName, info in findAllPlugins().iteritems() if pluginName in plugins } for pset in toposort(filteredDepGraph): for plugin in pset: try: loadPlugin(plugin, root) print TerminalColor.success('Loaded plugin "{}"'.format(plugin)) except: print TerminalColor.error('ERROR: Failed to load plugin "{}":'.format(plugin)) traceback.print_exc()
def loadPlugins(plugins, root, appconf, apiRoot=None, curConfig=None): """ Loads a set of plugins into the application. The list passed in should not already contain dependency information; dependent plugins will be loaded automatically. :param plugins: The set of plugins to load, by directory name. :type plugins: list :param root: The root node of the server tree. :param appconf: The server's cherrypy configuration object. :type appconf: dict :returns: A list of plugins that were actually loaded, once dependencies were resolved and topological sort was performed. """ # Register a pseudo-package for the root of all plugins. This must be # present in the system module list in order to avoid import warnings. if curConfig is None: curConfig = config.getConfig() if 'plugins' in curConfig and 'plugin_directory' in curConfig['plugins']: print(TerminalColor.warning( 'Warning: the plugin_directory setting is deprecated. Please use ' 'the `girder-install plugin` command and remove this setting from ' 'your config file.')) if ROOT_PLUGINS_PACKAGE not in sys.modules: module = imp.new_module(ROOT_PLUGINS_PACKAGE) girder.plugins = module sys.modules[ROOT_PLUGINS_PACKAGE] = module print(TerminalColor.info('Resolving plugin dependencies...')) filteredDepGraph = { pluginName: info['dependencies'] for pluginName, info in six.viewitems(findAllPlugins(curConfig)) if pluginName in plugins } for pset in toposort(filteredDepGraph): for plugin in pset: try: root, appconf, apiRoot = loadPlugin( plugin, root, appconf, apiRoot, curConfig=curConfig) print(TerminalColor.success('Loaded plugin "{}"' .format(plugin))) except Exception: print(TerminalColor.error( 'ERROR: Failed to load plugin "{}":'.format(plugin))) traceback.print_exc() return root, appconf, apiRoot
def loadPlugins(plugins, root, appconf, apiRoot=None, curConfig=None, buildDag=True): """ Loads a set of plugins into the application. :param plugins: The set of plugins to load, by directory name. :type plugins: list :param root: The root node of the server tree. :type root: object :param appconf: The server's cherrypy configuration object. :type appconf: dict :param apiRoot: The cherrypy api root object. :type apiRoot: object or None :param curConfig: A girder config object to use. :type curConfig: dict or None :param buildDag: If the ``plugins`` parameter is already a topo-sorted list with all dependencies resolved, set this to False and it will skip rebuilding the DAG. Otherwise the dependency resolution and sorting will occur within this method. :type buildDag: bool :returns: A 3-tuple containing the modified root, config, and apiRoot objects. :rtype tuple: """ # Register a pseudo-package for the root of all plugins. This must be # present in the system module list in order to avoid import warnings. if curConfig is None: curConfig = config.getConfig() if 'plugins' in curConfig and 'plugin_directory' in curConfig['plugins']: print( TerminalColor.warning( 'Warning: the plugin_directory setting is deprecated. Please use ' 'the `girder-install plugin` command and remove this setting from ' 'your config file.')) if ROOT_PLUGINS_PACKAGE not in sys.modules: module = imp.new_module(ROOT_PLUGINS_PACKAGE) girder.plugins = module sys.modules[ROOT_PLUGINS_PACKAGE] = module print(TerminalColor.info('Resolving plugin dependencies...')) if buildDag: plugins = getToposortedPlugins(plugins, curConfig, ignoreMissing=True) for plugin in plugins: try: root, appconf, apiRoot = loadPlugin(plugin, root, appconf, apiRoot, curConfig=curConfig) print(TerminalColor.success('Loaded plugin "%s"' % plugin)) except Exception: print( TerminalColor.error('ERROR: Failed to load plugin "%s":' % plugin)) girder.logger.exception('Plugin load failure: %s' % plugin) traceback.print_exc() return root, appconf, apiRoot