Beispiel #1
0
def register_all_plugins(verbose=False):
    from merengue.pluggable.models import RegisteredPlugin
    from merengue.pluggable.utils import (get_plugin_directories, get_plugin_config,
                                          reload_models_cache, remove_from_installed_apps,
                                          clear_plugin_module_cache, get_plugin_module_name)
    from merengue.pluggable.checker import mark_broken_plugin
    try:
        for plugin_dir in get_plugin_directories():
            try:
                if verbose:
                    plugin_config = get_plugin_config(plugin_dir)
                    if plugin_config:
                        if not have_registered_items(plugin_config):
                            print 'Registering new plugin %s...' % plugin_dir
                        else:
                            print 'Re-registering plugin %s...' % plugin_dir
                    else:
                        print 'Error walking to plugin %s.' % plugin_dir
                register_plugin(plugin_dir)
            except:
                mark_broken_plugin(plugin_dir)
                print 'Error registering %s plugin... go to next plugin.' % plugin_dir
    finally:
        for plugin in RegisteredPlugin.objects.inactives():
            clear_plugin_module_cache(get_plugin_module_name(plugin.directory_name))
            remove_from_installed_apps(plugin.directory_name)
        reload_models_cache()
Beispiel #2
0
 def load_plugins(self):
     """
     Enable plugins and set "loaded" attribute. This method is threadsafe, in the
     sense that every caller will see the same state upon return, and if the
     cache is already initialised, it does no work.
     """
     if self.loaded:
         return
     self.write_lock.acquire()
     try:
         if self.loaded:
             return
         from merengue.registry import invalidate_registereditem
         from merengue.pluggable.utils import (enable_plugin,
                                               get_plugin_module_name,
                                               reload_models_cache)
         from merengue.pluggable.models import RegisteredPlugin
         # enable active plugins
         active_plugins = RegisteredPlugin.objects.actives()
         plugin_names = [get_plugin_module_name(p.directory_name)
                         for p in active_plugins]
         for plugin_name in plugin_names:
             enable_plugin(plugin_name, register=True)
         # invalidate any existing cache
         invalidate_registereditem()
         # reload models cache. needed because new plugins could bring new models
         reload_models_cache()
         self.loaded = True
     finally:
         self.write_lock.release()
Beispiel #3
0
def register_all_plugins(verbose=False):
    from merengue.pluggable.models import RegisteredPlugin
    from merengue.pluggable.utils import (get_plugin_directories,
                                          get_plugin_config,
                                          reload_models_cache,
                                          remove_from_installed_apps,
                                          clear_plugin_module_cache,
                                          get_plugin_module_name)
    from merengue.pluggable.checker import mark_broken_plugin
    try:
        for plugin_dir in get_plugin_directories():
            try:
                if verbose:
                    plugin_config = get_plugin_config(plugin_dir)
                    if plugin_config:
                        if not have_registered_items(plugin_config):
                            print 'Registering new plugin %s...' % plugin_dir
                        else:
                            print 'Re-registering plugin %s...' % plugin_dir
                    else:
                        print 'Error walking to plugin %s.' % plugin_dir
                register_plugin(plugin_dir)
            except:
                mark_broken_plugin(plugin_dir)
                print 'Error registering %s plugin... go to next plugin.' % plugin_dir
    finally:
        for plugin in RegisteredPlugin.objects.inactives():
            clear_plugin_module_cache(
                get_plugin_module_name(plugin.directory_name))
            remove_from_installed_apps(plugin.directory_name)
        reload_models_cache()
Beispiel #4
0
def mark_broken_plugins():
    """
    Mark broken plugins (i.e. not existing in FS). This will prevent errors
    with python modules deleted from file system or broken modules.
    """
    from merengue.pluggable.models import RegisteredPlugin
    try:
        for registered_item in RegisteredPlugin.objects.inactives():
            plugin_name = registered_item.directory_name
            mark_broken_plugin(plugin_name, registered_item)
    finally:
        reload_models_cache()
Beispiel #5
0
def mark_broken_plugins():
    """
    Mark broken plugins (i.e. not existing in FS). This will prevent errors
    with python modules deleted from file system or broken modules.
    """
    from merengue.pluggable.models import RegisteredPlugin
    try:
        for registered_item in RegisteredPlugin.objects.inactives():
            plugin_name = registered_item.directory_name
            mark_broken_plugin(plugin_name, registered_item)
    finally:
        reload_models_cache()