From f2a75866319c249e8ebdfb393172ab5ca8816b22 Mon Sep 17 00:00:00 2001 From: Dolph Mathews Date: Fri, 24 Apr 2015 20:05:35 +0000 Subject: [PATCH] Allow wsgiref to reconstruct URIs per the WSGI spec Instead of reimplementing URL reconstruction for logging purposes, and getting it wrong over and over and over, let's just use wsgiref.util. Change-Id: Ib64877c35ad856bdef8f64f6df44a054eaa2321b Closes-Bug: 1448286 --- keystone/common/wsgi.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/keystone/common/wsgi.py b/keystone/common/wsgi.py index b36d2226e3..1e10cb0a93 100644 --- a/keystone/common/wsgi.py +++ b/keystone/common/wsgi.py @@ -20,7 +20,7 @@ import copy import itertools -import urllib +import wsgiref.util from oslo_config import cfg import oslo_i18n @@ -227,13 +227,10 @@ def __call__(self, req): # NOTE(morganfainberg): use the request method to normalize the # response code between GET and HEAD requests. The HTTP status should # be the same. - req_method = req.environ['REQUEST_METHOD'].upper() - path = req.environ.get('RAW_PATH_INFO') or req.environ['PATH_INFO'] - LOG.info('%(req_method)s %(path)s%(params)s', { - 'req_method': req_method, - 'path': path, - 'params': '?' + urllib.urlencode(req.params) if req.params else ''} - ) + LOG.info('%(req_method)s %(uri)s', { + 'req_method': req.environ['REQUEST_METHOD'].upper(), + 'uri': wsgiref.util.request_uri(req.environ), + }) params = self._normalize_dict(params) @@ -272,7 +269,7 @@ def __call__(self, req): response_code = self._get_response_code(req) return render_response(body=result, status=response_code, - method=req_method) + method=req.environ['REQUEST_METHOD']) def _get_response_code(self, req): req_method = req.environ['REQUEST_METHOD'] @@ -776,7 +773,7 @@ def render_response(body=None, status=None, headers=None, method=None): status='%s %s' % status, headerlist=headers) - if method == 'HEAD': + if method and method.upper() == 'HEAD': # NOTE(morganfainberg): HEAD requests should return the same status # as a GET request and same headers (including content-type and # content-length). The webob.Response object automatically changes