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()
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()
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()
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()
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()