summaryrefslogtreecommitdiffstats
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-06-07 12:42:52 -0400
commit39c17cb13e005894c66daadc7317ff3d57fe2fd7 (patch)
treed34e4a1fabe9e69983554b1b2655a045e1d2ea22
parent106376d59f9a25fef94baf413316b22c7d4218d2 (diff)
downloadoslo-39c17cb13e005894c66daadc7317ff3d57fe2fd7.tar.gz
oslo-39c17cb13e005894c66daadc7317ff3d57fe2fd7.tar.xz
oslo-39c17cb13e005894c66daadc7317ff3d57fe2fd7.zip
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/deprecated/__init__.py0
-rw-r--r--openstack/common/deprecated/wsgi.py (renamed from openstack/common/wsgi.py)85
-rw-r--r--openstack/common/middleware/base.py62
-rw-r--r--openstack/common/middleware/context.py4
-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
-rw-r--r--tests/unit/deprecated/__init__.py0
-rw-r--r--tests/unit/deprecated/test_wsgi.py (renamed from tests/unit/test_wsgi.py)5
-rw-r--r--tests/unit/extension_stubs.py2
10 files changed, 133 insertions, 94 deletions
diff --git a/openstack/common/deprecated/__init__.py b/openstack/common/deprecated/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/openstack/common/deprecated/__init__.py
diff --git a/openstack/common/wsgi.py b/openstack/common/deprecated/wsgi.py
index b5a7157..f9be97e 100644
--- a/openstack/common/wsgi.py
+++ b/openstack/common/deprecated/wsgi.py
@@ -17,15 +17,12 @@
"""Utility methods for working with WSGI servers."""
-from __future__ import print_function
-
import eventlet
eventlet.patcher.monkey_patch(all=False, socket=True)
import datetime
import errno
import socket
-import sys
import time
import eventlet.wsgi
@@ -164,88 +161,6 @@ class Service(service.Service):
log=logging.WritableLogger(logger))
-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)
-
-
-class Debug(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()
-
-
class Router(object):
"""
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/context.py b/openstack/common/middleware/context.py
index ac94190..2636e8e 100644
--- a/openstack/common/middleware/context.py
+++ b/openstack/common/middleware/context.py
@@ -21,10 +21,10 @@ Middleware that attaches a context to the WSGI request
from openstack.common import context
from openstack.common import importutils
-from openstack.common import wsgi
+from openstack.common.middleware import base
-class ContextMiddleware(wsgi.Middleware):
+class ContextMiddleware(base.Middleware):
def __init__(self, app, options):
self.options = options
super(ContextMiddleware, self).__init__(app)
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):
diff --git a/tests/unit/deprecated/__init__.py b/tests/unit/deprecated/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/unit/deprecated/__init__.py
diff --git a/tests/unit/test_wsgi.py b/tests/unit/deprecated/test_wsgi.py
index a3a4d32..72aeae7 100644
--- a/tests/unit/test_wsgi.py
+++ b/tests/unit/deprecated/test_wsgi.py
@@ -24,12 +24,13 @@ import routes
import six
import webob
+from openstack.common.deprecated import wsgi
from openstack.common import exception
-from openstack.common import wsgi
+
from tests import utils
TEST_VAR_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__),
- '..', 'var'))
+ '..', '..', 'var'))
class RequestTest(utils.BaseTestCase):
diff --git a/tests/unit/extension_stubs.py b/tests/unit/extension_stubs.py
index 03b9702..4e44c9c 100644
--- a/tests/unit/extension_stubs.py
+++ b/tests/unit/extension_stubs.py
@@ -14,7 +14,7 @@
# License for the specific language governing permissions and limitations
# under the License.
-from openstack.common import wsgi
+from openstack.common.deprecated import wsgi
class StubExtension(object):