From 52ee2002acb088ec28e162a90cdf2aea19d36e6b Mon Sep 17 00:00:00 2001 From: Florian Ludwig Date: Tue, 21 Apr 2015 14:16:38 +0200 Subject: [PATCH] move setup code to rw.scope --- rw/httpbase.py | 14 ++------------ rw/scope.py | 29 ++++++++++++++++++++++++++--- 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/rw/httpbase.py b/rw/httpbase.py index 24d1c40..167c34b 100644 --- a/rw/httpbase.py +++ b/rw/httpbase.py @@ -73,22 +73,12 @@ def configure(self): @gen.coroutine def _scoped_configure(self): - self.rw_settings = rw.cfg.read_configs(self.root.name) + yield rw.scope.setup_app_scope(self.root.name, self.scope) + self.rw_settings = self.scope['settings'] cfg_rw_http = self.rw_settings.setdefault('rw.http', {}) cfg_rw_http['live_settings'] = self.settings - self.scope['settings'] = self.rw_settings - # load plugins - plugins = [] - for plugin_name, active in self.rw_settings.get('rw.plugins', {}).items(): - plugin = __import__(plugin_name) - plugin_path = plugin_name.split('.')[1:] + ['plugin'] - for sub in plugin_path: - plugin = getattr(plugin, sub) - plugins.append(self.scope.activate(plugin)) - self._configure_cookie_secret() - yield plugins yield self.scope.activate(self.root) def _configure_cookie_secret(self): diff --git a/rw/scope.py b/rw/scope.py index e55b522..16c3cad 100644 --- a/rw/scope.py +++ b/rw/scope.py @@ -13,12 +13,16 @@ # under the License. from __future__ import absolute_import, division, print_function, with_statement -from tornado import stack_context, gen import contextlib import functools - import inspect +from tornado import stack_context + +import rw.cfg +from . import gen + + NOT_PROVIDED = object() SCOPE_CHAIN = None @@ -154,4 +158,23 @@ def wrapper(*args, **kwargs): pass return fn(*args, **kwargs) - return wrapper \ No newline at end of file + return wrapper + + +@gen.coroutine +def setup_app_scope(name, scope): + """Load confing and activate plugins accordingly""" + settings = rw.cfg.read_configs(name) + scope['settings'] = settings + + # load plugins + plugins = [] + for plugin_name, active in settings.get('rw.plugins', {}).items(): + plugin = __import__(plugin_name) + plugin_path = plugin_name.split('.')[1:] + ['plugin'] + for sub in plugin_path: + plugin = getattr(plugin, sub) + plugins.append(scope.activate(plugin)) + + yield plugins + raise rw.gen.Return(settings)