summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Danjou <julien@danjou.info>2014-07-09 15:26:02 +0200
committerJulien Danjou <julien@danjou.info>2014-08-20 17:38:32 +0200
commitf480494da148142666896422e7e14958ff96df3a (patch)
tree1a42d176fee4f7951a712c20b6214722595a6cb2
parent1ee33509e7a6cfa2c9d6ae4f80cf0c3abdd4599b (diff)
downloadoslo-messaging-f480494da148142666896422e7e14958ff96df3a.tar.gz
Import oslo-incubator/middleware/base
oslo-incubator commit 569979adfd4237869bb50c7aaa02bc3fd4f0b413 Change-Id: I515c144abe11124d08339330e44957f56416ec72
-rw-r--r--openstack-common.conf2
-rw-r--r--oslo/messaging/openstack/common/middleware/__init__.py0
-rw-r--r--oslo/messaging/openstack/common/middleware/base.py56
3 files changed, 58 insertions, 0 deletions
diff --git a/openstack-common.conf b/openstack-common.conf
index 695e286..fd94e1c 100644
--- a/openstack-common.conf
+++ b/openstack-common.conf
@@ -7,6 +7,8 @@ module=importutils
module=jsonutils
module=network_utils
module=timeutils
+module=middleware/base
+module=middleware/__init__
script = tools/run_cross_tests.sh
diff --git a/oslo/messaging/openstack/common/middleware/__init__.py b/oslo/messaging/openstack/common/middleware/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/oslo/messaging/openstack/common/middleware/__init__.py
diff --git a/oslo/messaging/openstack/common/middleware/base.py b/oslo/messaging/openstack/common/middleware/base.py
new file mode 100644
index 0000000..464a1cc
--- /dev/null
+++ b/oslo/messaging/openstack/common/middleware/base.py
@@ -0,0 +1,56 @@
+# Copyright 2011 OpenStack Foundation.
+# 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.
+
+"""Base class(es) for WSGI Middleware."""
+
+import webob.dec
+
+
+class Middleware(object):
+ """Base WSGI middleware wrapper.
+
+ These classes require an application to be initialized that will be called
+ next. By default the middleware will simply call its wrapped app, or you
+ can override __call__ to customize its behavior.
+ """
+
+ @classmethod
+ def factory(cls, global_conf, **local_conf):
+ """Factory method for paste.deploy."""
+ return cls
+
+ def __init__(self, application):
+ self.application = application
+
+ def process_request(self, req):
+ """Called on each request.
+
+ If this returns None, the next application down the stack will be
+ executed. If it returns a response then that response will be returned
+ and execution will stop here.
+ """
+ return None
+
+ def process_response(self, response):
+ """Do whatever you'd like to the response."""
+ return response
+
+ @webob.dec.wsgify
+ def __call__(self, req):
+ response = self.process_request(req)
+ if response:
+ return response
+ response = req.get_response(self.application)
+ return self.process_response(response)