Signed-off-by: Stephen Finucane <stephenfin@redhat.com> Change-Id: I74ccf0173b6bbc62dd20ef7a13813499e0497fa9
66 lines
1.9 KiB
Python
66 lines
1.9 KiB
Python
# 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 annotations
|
|
|
|
import sys
|
|
import typing as ty
|
|
|
|
import webob.dec
|
|
|
|
from oslo_middleware import base
|
|
|
|
|
|
class Debug(base.ConfigurableMiddleware):
|
|
"""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: webob.request.Request,
|
|
) -> webob.response.Response | None:
|
|
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.items():
|
|
print(key, "=", value)
|
|
print()
|
|
|
|
resp.app_iter = self.print_generator(resp.app_iter)
|
|
|
|
return resp
|
|
|
|
@staticmethod
|
|
def print_generator(
|
|
app_iter: ty.Iterable[bytes],
|
|
) -> ty.Iterator[bytes]:
|
|
"""Prints the contents of a wrapper string iterator when iterated."""
|
|
print(("*" * 40) + " BODY")
|
|
for part in app_iter:
|
|
sys.stdout.write(part.decode())
|
|
sys.stdout.flush()
|
|
yield part
|
|
print()
|