diff options
author | Todd Willey <todd@ansolabs.com> | 2011-01-06 13:57:48 -0500 |
---|---|---|
committer | Todd Willey <todd@ansolabs.com> | 2011-01-06 13:57:48 -0500 |
commit | 4e034f3d69c6aba6920dd7dd38e07aeb495b45db (patch) | |
tree | 5514c1ca866777edd355a009b57c311ac921ce72 /nova/wsgi.py | |
parent | 71d78e1a6f611a7bce4fd4c38c2e7b4ccf3a4578 (diff) | |
download | nova-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.py | 62 |
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 |