summaryrefslogtreecommitdiff
path: root/oslo
diff options
context:
space:
mode:
authorDoug Hellmann <doug@doughellmann.com>2015-01-06 12:04:31 -0500
committerDoug Hellmann <doug@doughellmann.com>2015-01-06 13:44:01 -0500
commit8e06ca5bd02660eb0b0980593f440ec7e46a00ac (patch)
tree072424b05294281e4aa70130b5289c0b37d74cd2 /oslo
parent860cdee514e32cbad121a9d8b7076b8931ed22c1 (diff)
downloadoslo-middleware-8e06ca5bd02660eb0b0980593f440ec7e46a00ac.tar.gz
Move files out of the namespace package0.3.0
Move the public API out of oslo.middleware to oslo_middleware. Retain the ability to import from the old namespace package for backwards compatibility for this release cycle. bp/drop-namespace-packages Change-Id: If88c65c82b64f096a02f7ec62e019aea4de2f9d3
Diffstat (limited to 'oslo')
-rw-r--r--oslo/middleware/__init__.py25
-rw-r--r--oslo/middleware/base.py45
-rw-r--r--oslo/middleware/catch_errors.py32
-rw-r--r--oslo/middleware/correlation_id.py16
-rw-r--r--oslo/middleware/debug.py49
-rw-r--r--oslo/middleware/i18n.py35
-rw-r--r--oslo/middleware/opts.py45
-rw-r--r--oslo/middleware/request_id.py29
-rw-r--r--oslo/middleware/sizelimit.py84
9 files changed, 21 insertions, 339 deletions
diff --git a/oslo/middleware/__init__.py b/oslo/middleware/__init__.py
index 5289943..1407ce1 100644
--- a/oslo/middleware/__init__.py
+++ b/oslo/middleware/__init__.py
@@ -10,14 +10,19 @@
# License for the specific language governing permissions and limitations
# under the License.
-__all__ = ['CatchErrors',
- 'CorrelationId',
- 'Debug',
- 'RequestId',
- 'RequestBodySizeLimiter']
+import warnings
-from oslo.middleware.catch_errors import CatchErrors
-from oslo.middleware.correlation_id import CorrelationId
-from oslo.middleware.debug import Debug
-from oslo.middleware.request_id import RequestId
-from oslo.middleware.sizelimit import RequestBodySizeLimiter
+from oslo_middleware import *
+
+
+def deprecated():
+ new_name = __name__.replace('.', '_')
+ warnings.warn(
+ ('The oslo namespace package is deprecated. Please use %s instead.' %
+ new_name),
+ DeprecationWarning,
+ stacklevel=3,
+ )
+
+
+deprecated()
diff --git a/oslo/middleware/base.py b/oslo/middleware/base.py
index 464a1cc..53e25e9 100644
--- a/oslo/middleware/base.py
+++ b/oslo/middleware/base.py
@@ -1,6 +1,3 @@
-# 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
@@ -13,44 +10,4 @@
# 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)
+from oslo_middleware.base import * # noqa
diff --git a/oslo/middleware/catch_errors.py b/oslo/middleware/catch_errors.py
index ed57f8a..81e4c6c 100644
--- a/oslo/middleware/catch_errors.py
+++ b/oslo/middleware/catch_errors.py
@@ -1,6 +1,3 @@
-# Copyright (c) 2013 NEC Corporation
-# 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
@@ -13,31 +10,4 @@
# License for the specific language governing permissions and limitations
# under the License.
-import logging
-
-import webob.dec
-import webob.exc
-
-from oslo.middleware import base
-from oslo.middleware.i18n import _LE
-
-
-LOG = logging.getLogger(__name__)
-
-
-class CatchErrors(base.Middleware):
- """Middleware that provides high-level error handling.
-
- It catches all exceptions from subsequent applications in WSGI pipeline
- to hide internal errors from API response.
- """
-
- @webob.dec.wsgify
- def __call__(self, req):
- try:
- response = req.get_response(self.application)
- except Exception:
- LOG.exception(_LE('An error occurred during '
- 'processing the request: %s'))
- response = webob.exc.HTTPInternalServerError()
- return response
+from oslo_middleware.catch_errors import * # noqa
diff --git a/oslo/middleware/correlation_id.py b/oslo/middleware/correlation_id.py
index 2cde134..fff548c 100644
--- a/oslo/middleware/correlation_id.py
+++ b/oslo/middleware/correlation_id.py
@@ -1,6 +1,3 @@
-# Copyright (c) 2013 Rackspace Hosting
-# 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
@@ -13,15 +10,4 @@
# License for the specific language governing permissions and limitations
# under the License.
-import uuid
-
-from oslo.middleware import base
-
-
-class CorrelationId(base.Middleware):
- "Middleware that attaches a correlation id to WSGI request"
-
- def process_request(self, req):
- correlation_id = (req.headers.get("X_CORRELATION_ID") or
- str(uuid.uuid4()))
- req.headers['X_CORRELATION_ID'] = correlation_id
+from oslo_middleware.correlation_id import * # noqa
diff --git a/oslo/middleware/debug.py b/oslo/middleware/debug.py
index 8244a02..2907289 100644
--- a/oslo/middleware/debug.py
+++ b/oslo/middleware/debug.py
@@ -1,6 +1,3 @@
-# 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
@@ -13,48 +10,4 @@
# License for the specific language governing permissions and limitations
# under the License.
-"""Debug middleware"""
-
-from __future__ import print_function
-
-import sys
-
-import six
-import webob.dec
-
-from oslo.middleware import base
-
-
-class Debug(base.Middleware):
- """Helper class that returns debug information.
-
- 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 six.iteritems(resp.headers):
- print(key, "=", value)
- print()
-
- resp.app_iter = self.print_generator(resp.app_iter)
-
- return resp
-
- @staticmethod
- def print_generator(app_iter):
- """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()
+from oslo_middleware.debug import * # noqa
diff --git a/oslo/middleware/i18n.py b/oslo/middleware/i18n.py
deleted file mode 100644
index 307c8f5..0000000
--- a/oslo/middleware/i18n.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# 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.
-
-"""oslo.i18n integration module.
-
-See http://docs.openstack.org/developer/oslo.i18n/usage.html
-
-"""
-
-from oslo import i18n
-
-
-_translators = i18n.TranslatorFactory(domain='oslo.middleware')
-
-# The primary translation function using the well-known name "_"
-_ = _translators.primary
-
-# Translators for log levels.
-#
-# The abbreviated names are meant to reflect the usual use of a short
-# name like '_'. The "L" is for "log" and the other letter comes from
-# the level.
-_LI = _translators.log_info
-_LW = _translators.log_warning
-_LE = _translators.log_error
-_LC = _translators.log_critical
diff --git a/oslo/middleware/opts.py b/oslo/middleware/opts.py
deleted file mode 100644
index 3cc035f..0000000
--- a/oslo/middleware/opts.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# Copyright 2014 IBM Corp.
-#
-# 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.
-
-
-__all__ = [
- 'list_opts',
-]
-
-
-import copy
-
-from oslo.middleware import sizelimit
-
-
-def list_opts():
- """Return a list of oslo.config options available in the library.
-
- The returned list includes all oslo.config options which may be registered
- at runtime by the library.
-
- Each element of the list is a tuple. The first element is the name of the
- group under which the list of elements in the second element will be
- registered. A group name of None corresponds to the [DEFAULT] group in
- config files.
-
- This function is also discoverable via the 'oslo.concurrency' entry point
- under the 'oslo.config.opts' namespace.
-
- The purpose of this is to allow tools like the Oslo sample config file
- generator to discover the options exposed to users by this library.
-
- :returns: a list of (group_name, opts) tuples
- """
- return [('oslo_middleware', copy.deepcopy(sizelimit._opts))] \ No newline at end of file
diff --git a/oslo/middleware/request_id.py b/oslo/middleware/request_id.py
index a8663f8..81e3164 100644
--- a/oslo/middleware/request_id.py
+++ b/oslo/middleware/request_id.py
@@ -1,6 +1,3 @@
-# Copyright (c) 2013 NEC Corporation
-# 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
@@ -13,28 +10,4 @@
# License for the specific language governing permissions and limitations
# under the License.
-from oslo_context import context
-import webob.dec
-
-from oslo.middleware import base
-
-
-ENV_REQUEST_ID = 'openstack.request_id'
-HTTP_RESP_HEADER_REQUEST_ID = 'x-openstack-request-id'
-
-
-class RequestId(base.Middleware):
- """Middleware that ensures request ID.
-
- It ensures to assign request ID for each API request and set it to
- request environment. The request ID is also added to API response.
- """
-
- @webob.dec.wsgify
- def __call__(self, req):
- req_id = context.generate_request_id()
- req.environ[ENV_REQUEST_ID] = req_id
- response = req.get_response(self.application)
- if HTTP_RESP_HEADER_REQUEST_ID not in response.headers:
- response.headers.add(HTTP_RESP_HEADER_REQUEST_ID, req_id)
- return response
+from oslo_middleware.request_id import * # noqa
diff --git a/oslo/middleware/sizelimit.py b/oslo/middleware/sizelimit.py
index f42c9e6..c04c1cd 100644
--- a/oslo/middleware/sizelimit.py
+++ b/oslo/middleware/sizelimit.py
@@ -1,5 +1,3 @@
-# Copyright (c) 2012 Red Hat, Inc.
-#
# 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
@@ -12,84 +10,4 @@
# License for the specific language governing permissions and limitations
# under the License.
-"""
-Request Body limiting middleware.
-
-"""
-
-from oslo.config import cfg
-from oslo.config import cfgfilter
-import webob.dec
-import webob.exc
-
-from oslo.middleware import base
-from oslo.middleware.i18n import _
-
-
-_oldopts = [cfg.DeprecatedOpt('osapi_max_request_body_size',
- group='DEFAULT'),
- cfg.DeprecatedOpt('max_request_body_size',
- group='DEFAULT')]
-
-_opts = [
- # default request size is 112k
- cfg.IntOpt('max_request_body_size',
- default=114688,
- help='The maximum body size for each '
- ' request, in bytes.',
- deprecated_opts=_oldopts)
-]
-
-CONF = cfgfilter.ConfigFilter(cfg.CONF)
-CONF.register_opts(_opts, group='oslo_middleware')
-
-
-class LimitingReader(object):
- """Reader to limit the size of an incoming request."""
- def __init__(self, data, limit):
- """Initiates LimitingReader object.
-
- :param data: Underlying data object
- :param limit: maximum number of bytes the reader should allow
- """
- self.data = data
- self.limit = limit
- self.bytes_read = 0
-
- def __iter__(self):
- for chunk in self.data:
- self.bytes_read += len(chunk)
- if self.bytes_read > self.limit:
- msg = _("Request is too large.")
- raise webob.exc.HTTPRequestEntityTooLarge(explanation=msg)
- else:
- yield chunk
-
- def read(self, i=None):
- # NOTE(jamielennox): We can't simply provide the default to the read()
- # call as the expected default differs between mod_wsgi and eventlet
- if i is None:
- result = self.data.read()
- else:
- result = self.data.read(i)
- self.bytes_read += len(result)
- if self.bytes_read > self.limit:
- msg = _("Request is too large.")
- raise webob.exc.HTTPRequestEntityTooLarge(explanation=msg)
- return result
-
-
-class RequestBodySizeLimiter(base.Middleware):
- """Limit the size of incoming requests."""
-
- @webob.dec.wsgify
- def __call__(self, req):
- max_size = CONF.oslo_middleware.max_request_body_size
- if (req.content_length is not None and
- req.content_length > max_size):
- msg = _("Request is too large.")
- raise webob.exc.HTTPRequestEntityTooLarge(explanation=msg)
- if req.content_length is None and req.is_body_readable:
- limiter = LimitingReader(req.body_file, max_size)
- req.body_file = limiter
- return self.application
+from oslo_middleware.sizelimit import * # noqa