diff options
| author | Jay Pipes <jaypipes@gmail.com> | 2011-07-26 12:51:10 -0400 |
|---|---|---|
| committer | Jay Pipes <jaypipes@gmail.com> | 2011-07-26 12:51:10 -0400 |
| commit | 02fb917da8a42b38720ebe31c4d40b180b00d632 (patch) | |
| tree | 6d33008ac411591ae1d72b31107bc075268512d5 /openstack/common/middleware/context.py | |
| parent | 17df9cafa7479a56aba31c2377d1b5126e0b6b8b (diff) | |
| download | oslo-02fb917da8a42b38720ebe31c4d40b180b00d632.tar.gz oslo-02fb917da8a42b38720ebe31c4d40b180b00d632.tar.xz oslo-02fb917da8a42b38720ebe31c4d40b180b00d632.zip | |
Add some more generic middleware, request context, utils, and versioning. Add basic template for server binary
Diffstat (limited to 'openstack/common/middleware/context.py')
| -rw-r--r-- | openstack/common/middleware/context.py | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/openstack/common/middleware/context.py b/openstack/common/middleware/context.py new file mode 100644 index 0000000..be7dafe --- /dev/null +++ b/openstack/common/middleware/context.py @@ -0,0 +1,64 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2011 OpenStack LLC. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +Middleware that attaches a context to the WSGI request +""" + +from openstack.common import utils +from openstack.common import wsgi +from openstack.common import context + + +class ContextMiddleware(wsgi.Middleware): + def __init__(self, app, options): + self.options = options + super(ContextMiddleware, self).__init__(app) + + def make_context(self, *args, **kwargs): + """ + Create a context with the given arguments. + """ + + # Determine the context class to use + ctxcls = context.RequestContext + if 'context_class' in self.options: + ctxcls = utils.import_class(self.options['context_class']) + + return ctxcls(*args, **kwargs) + + def process_request(self, req): + """ + Extract any authentication information in the request and + construct an appropriate context from it. + """ + # Use the default empty context, with admin turned on for + # backwards compatibility + req.context = self.make_context(is_admin=True) + + +def filter_factory(global_conf, **local_conf): + """ + Factory method for paste.deploy + """ + conf = global_conf.copy() + conf.update(local_conf) + + def filter(app): + return ContextMiddleware(app, conf) + + return filter |
