summaryrefslogtreecommitdiffstats
path: root/nova/wsgi.py
diff options
context:
space:
mode:
authorTodd Willey <todd@ansolabs.com>2011-01-06 13:57:48 -0500
committerTodd Willey <todd@ansolabs.com>2011-01-06 13:57:48 -0500
commit4e034f3d69c6aba6920dd7dd38e07aeb495b45db (patch)
tree5514c1ca866777edd355a009b57c311ac921ce72 /nova/wsgi.py
parent71d78e1a6f611a7bce4fd4c38c2e7b4ccf3a4578 (diff)
downloadnova-4e034f3d69c6aba6920dd7dd38e07aeb495b45db.tar.gz
nova-4e034f3d69c6aba6920dd7dd38e07aeb495b45db.tar.xz
nova-4e034f3d69c6aba6920dd7dd38e07aeb495b45db.zip
Remove module-level factory methods in favor of having a factory class-method
on wsgi components themselves. Local options from config are passed to the __init__ method of the component as kwargs.
Diffstat (limited to 'nova/wsgi.py')
-rw-r--r--nova/wsgi.py62
1 files changed, 44 insertions, 18 deletions
diff --git a/nova/wsgi.py b/nova/wsgi.py
index 5ecc21eed..aa8f315d6 100644
--- a/nova/wsgi.py
+++ b/nova/wsgi.py
@@ -67,15 +67,28 @@ class Application(object):
@classmethod
def factory(cls, global_config, **local_config):
- """Used for paste app factories in paste.deploy config fles."""
- rv = cls()
- for k,v in local_config.iteritems():
- if hasattr(rv, k):
- setattr(rv, k, v)
- else:
- logging.debug(_("Unknown local config option %s for %s"),
- k, cls)
- return rv
+ """Used for paste app factories in paste.deploy config fles.
+
+ Any local configuration (that is, values under the [app:APPNAME]
+ section of the paste config) will be passed into the `__init__` method
+ as kwargs.
+
+ A hypothetical configuration would look like:
+
+ [app:wadl]
+ latest_version = 1.3
+ paste.app_factory = nova.api.fancy_api:Wadl.factory
+
+ which would result in a call to the `Wadl` class as
+
+ import nova.api.fancy_api
+ fancy_api.Wadl(latest_version='1.3')
+
+ You could of course re-implement the `factory` method in subclasses,
+ but using the kwarg passing it shouldn't be necessary.
+
+ """
+ return cls(**local_config)
def __call__(self, environ, start_response):
r"""Subclasses will probably want to implement __call__ like this:
@@ -123,16 +136,29 @@ class Middleware(Application):
@classmethod
def factory(cls, global_config, **local_config):
- """Used for paste app factories in paste.deploy config fles."""
+ """Used for paste app factories in paste.deploy config fles.
+
+ Any local configuration (that is, values under the [filter:APPNAME]
+ section of the paste config) will be passed into the `__init__` method
+ as kwargs.
+
+ A hypothetical configuration would look like:
+
+ [filter:analytics]
+ redis_host = 127.0.0.1
+ paste.filter_factory = nova.api.analytics:Analytics.factory
+
+ which would result in a call to the `Analytics` class as
+
+ import nova.api.analytics
+ analytics.Analytics(app_from_paste, redis_host='127.0.0.1')
+
+ You could of course re-implement the `factory` method in subclasses,
+ but using the kwarg passing it shouldn't be necessary.
+
+ """
def _factory(app):
- rv = cls(app)
- for k,v in local_config.iteritems():
- if hasattr(rv, k):
- setattr(rv, k, v)
- else:
- logging.debug(_("Unknown local config option %s for %s"),
- k, cls)
- return rv
+ return cls(app, **local_config)
return _factory
def __init__(self, application): # pylint: disable-msg=W0231