Example #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()
Example #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()
Example #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()
Example #4
0
def add_fixtures(zip_config, plugin, plugin_path, plugin_path_zip):
    """
    Backup fixtures into zip file
    """
    from merengue.pluggable.utils import get_plugin_module_name
    # next two sentences is for avoiding problems with zipfile module
    # (encoding errors)
    plugin_path = smart_str(plugin_path)
    plugin_path_zip = smart_str(plugin_path_zip)
    plugin_modname = get_plugin_module_name(plugin.directory_name)
    plugin_mod = load_app(plugin_modname)
    plugin_models = get_models(plugin_mod)
    fixtures = get_fixtures(plugin_models)
    format = 'xml'
    fixtures_file = os.path.join(plugin_path_zip, "fixtures.%s" % format)
    zip_config.writestr(fixtures_file, "\n".join(fixtures))
Example #5
0
def add_fixtures(zip_config, plugin, plugin_path, plugin_path_zip):
    """
    Backup fixtures into zip file
    """
    from merengue.pluggable.utils import get_plugin_module_name
    # next two sentences is for avoiding problems with zipfile module
    # (encoding errors)
    plugin_path = smart_str(plugin_path)
    plugin_path_zip = smart_str(plugin_path_zip)
    plugin_modname = get_plugin_module_name(plugin.directory_name)
    plugin_mod = load_app(plugin_modname)
    plugin_models = get_models(plugin_mod)
    fixtures = get_fixtures(plugin_models)
    format = 'xml'
    fixtures_file = os.path.join(plugin_path_zip, "fixtures.%s" % format)
    zip_config.writestr(fixtures_file, "\n".join(fixtures))
Example #6
0
def save_plugin_signal(sender, instance, **kwargs):
    from merengue.pluggable.utils import (get_plugin_module_name,
                                          enable_plugin, disable_plugin)
    app_name = get_plugin_module_name(instance.directory_name)
    if not getattr(instance, 'id', None) and getattr(instance, 'pk', None):
        instance = instance._default_manager.get(pk=instance.pk)
    if instance.installed and instance.active and instance.directory_name and not instance.broken:
        enable_plugin(app_name)
    elif not instance.active and instance.directory_name and instance.config:
        try:
            disable_plugin(app_name)
        except ImportError:
            if instance.broken:
                pass  # the plugin is broken
            else:
                raise
Example #7
0
def save_plugin_signal(sender, instance, **kwargs):
    from merengue.pluggable.utils import (get_plugin_module_name,
                                          enable_plugin,
                                          disable_plugin)
    app_name = get_plugin_module_name(instance.directory_name)
    if not getattr(instance, 'id', None) and getattr(instance, 'pk', None):
        instance = instance._default_manager.get(pk=instance.pk)
    if instance.installed and instance.active and instance.directory_name and not instance.broken:
        enable_plugin(app_name)
    elif not instance.active and instance.directory_name and instance.config:
        try:
            disable_plugin(app_name)
        except ImportError:
            if instance.broken:
                pass  # the plugin is broken
            else:
                raise