summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Hellmann <doug.hellmann@dreamhost.com>2013-05-29 19:49:29 -0400
committerDoug Hellmann <doug.hellmann@dreamhost.com>2013-05-29 19:49:29 -0400
commit9c2614eeca69caa9f0364b1e5ea7be8264acb923 (patch)
tree6f83fd7b7dcbb293f6c624b44f0858906f94ca02
parent464e740b6cad79b72bf76ecafdd7dc00a8c35c81 (diff)
downloadoslo-middleware-9c2614eeca69caa9f0364b1e5ea7be8264acb923.tar.gz
Move wsgi module to deprecated package
As we are planning to deprecate the wsgi module, move it out of the main openstack/common folder to the new "deprecated" folder. Move some of the middleware classes into the middleware package, since those are still useful and should be maintained. There's still work to do to remove the dependency of the size limit middleware on the Request class in the now deprecated wsgi module. Refer to the mailing list thread at http://lists.openstack.org/pipermail/openstack-dev/2013-May/009666.html for additional details. Change-Id: I05ff583ef37174835393905a3066390f400ffdcf Signed-off-by: Doug Hellmann <doug.hellmann@dreamhost.com>
-rw-r--r--openstack/common/middleware/base.py62
-rw-r--r--openstack/common/middleware/correlation_id.py4
-rw-r--r--openstack/common/middleware/debug.py60
-rw-r--r--openstack/common/middleware/sizelimit.py5
4 files changed, 127 insertions, 4 deletions
diff --git a/openstack/common/middleware/base.py b/openstack/common/middleware/base.py
new file mode 100644
index 0000000..624a391
--- /dev/null
+++ b/openstack/common/middleware/base.py
@@ -0,0 +1,62 @@
+# 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
+ """
+
+ def filter(app):
+ return cls(app)
+
+ return filter
+
+ 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)
diff --git a/openstack/common/middleware/correlation_id.py b/openstack/common/middleware/correlation_id.py
index a3efe34..bffa0d7 100644
--- a/openstack/common/middleware/correlation_id.py
+++ b/openstack/common/middleware/correlation_id.py
@@ -17,11 +17,11 @@
"""Middleware that attaches a correlation id to WSGI request"""
+from openstack.common.middleware import base
from openstack.common import uuidutils
-from openstack.common import wsgi
-class CorrelationIdMiddleware(wsgi.Middleware):
+class CorrelationIdMiddleware(base.Middleware):
def process_request(self, req):
correlation_id = (req.headers.get("X_CORRELATION_ID") or
diff --git a/openstack/common/middleware/debug.py b/openstack/common/middleware/debug.py
new file mode 100644
index 0000000..b92af11
--- /dev/null
+++ b/openstack/common/middleware/debug.py
@@ -0,0 +1,60 @@
+# 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.
+"""Debug middleware"""
+
+from __future__ import print_function
+
+import sys
+
+import webob.dec
+
+from openstack.common.middleware import base
+
+
+class Debug(base.Middleware):
+ """
+ Helper class that can be inserted into any WSGI application chain
+ to get information about the request and response.
+ """
+
+ @webob.dec.wsgify
+ def __call__(self, req):
+ print(("*" * 40) + " REQUEST ENVIRON")
+ for key, value in req.environ.items():
+ print(key, "=", value)
+ print()
+ resp = req.get_response(self.application)
+
+ print(("*" * 40) + " RESPONSE HEADERS")
+ for (key, value) in resp.headers.iteritems():
+ print(key, "=", value)
+ print()
+
+ resp.app_iter = self.print_generator(resp.app_iter)
+
+ return resp
+
+ @staticmethod
+ def print_generator(app_iter):
+ """
+ Iterator that prints the contents of a wrapper string iterator
+ when iterated.
+ """
+ print(("*" * 40) + " BODY")
+ for part in app_iter:
+ sys.stdout.write(part)
+ sys.stdout.flush()
+ yield part
+ print()
diff --git a/openstack/common/middleware/sizelimit.py b/openstack/common/middleware/sizelimit.py
index 45de527..1128b8a 100644
--- a/openstack/common/middleware/sizelimit.py
+++ b/openstack/common/middleware/sizelimit.py
@@ -22,8 +22,9 @@ from oslo.config import cfg
import webob.dec
import webob.exc
+from openstack.common.deprecated import wsgi
from openstack.common.gettextutils import _
-from openstack.common import wsgi
+from openstack.common.middleware import base
#default request size is 112k
@@ -66,7 +67,7 @@ class LimitingReader(object):
return result
-class RequestBodySizeLimiter(wsgi.Middleware):
+class RequestBodySizeLimiter(base.Middleware):
"""Limit the size of incoming requests."""
def __init__(self, *args, **kwargs):