diff options
author | Doug Hellmann <doug@doughellmann.com> | 2015-01-06 12:04:31 -0500 |
---|---|---|
committer | Doug Hellmann <doug@doughellmann.com> | 2015-01-06 13:44:01 -0500 |
commit | 8e06ca5bd02660eb0b0980593f440ec7e46a00ac (patch) | |
tree | 072424b05294281e4aa70130b5289c0b37d74cd2 /oslo | |
parent | 860cdee514e32cbad121a9d8b7076b8931ed22c1 (diff) | |
download | oslo-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__.py | 25 | ||||
-rw-r--r-- | oslo/middleware/base.py | 45 | ||||
-rw-r--r-- | oslo/middleware/catch_errors.py | 32 | ||||
-rw-r--r-- | oslo/middleware/correlation_id.py | 16 | ||||
-rw-r--r-- | oslo/middleware/debug.py | 49 | ||||
-rw-r--r-- | oslo/middleware/i18n.py | 35 | ||||
-rw-r--r-- | oslo/middleware/opts.py | 45 | ||||
-rw-r--r-- | oslo/middleware/request_id.py | 29 | ||||
-rw-r--r-- | oslo/middleware/sizelimit.py | 84 |
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 |