Source code for thriftpool.app.loader

"""Contains initializer for application."""
from __future__ import absolute_import

import importlib
from itertools import chain

try:
    from pkg_resources import iter_entry_points
except ImportError:
    iter_entry_points = lambda *args, **kwargs: []

from thriftworker.utils.imports import import_from_cwd

from thriftpool import signals

__all__ = ['Loader']


[docs]class Loader(object): """Provide configuration and some callback for main application.""" app = None #: Specify modules that should be preloaded. builtin_modules = ['thriftpool.remote.handler']
[docs] def get_config(self): """Return application configuration.""" return {}
[docs] def entrypoint_modules(self): """List all modules that are registered through setuptools entry points. """ modules = [] for entrypoint in iter_entry_points(group='thriftpool.modules'): # Grab the function that is the actual plugin. module_provider = entrypoint.load() modules.extend(module_provider(self.app)) return modules
[docs] def list_modules(self): """List all known module names.""" for module_name in chain.from_iterable((self.builtin_modules, self.entrypoint_modules(), self.app.config.MODULES)): yield module_name
[docs] def import_module(self, module): return import_from_cwd(module)
[docs] def preload_modules(self): for module_name in self.list_modules(): self.import_module(module_name)
[docs] def on_before_init(self, controller): """Called before controller initialization.""" pass
[docs] def on_start(self): """Called before controller start.""" signals.app_start.send(sender=self, app=self.app)
[docs] def after_start(self): """Called after controller start.""" signals.after_app_start.send(sender=self, app=self.app)
[docs] def on_shutdown(self): """Called after controller shutdown.""" signals.app_shutdown.send(sender=self, app=self.app)
[docs] def after_unpickling(self): """Called after application was unpickled.""" pass

Project Versions

This Page