Fix keystone.common.wsgi to explicitly use bytes

The WSGI spec says that the body of a response needs to be bytes. This
ensures that we are using bytes in both Python2 and Python3.

bp python3

Change-Id: I40148c2e2e1e517358b64028d335ac27d17323a3
This commit is contained in:
David Stanek 2016-02-10 23:17:03 +00:00 committed by Steve Martinelli
parent 3578566bf2
commit cfe07fc764
4 changed files with 9 additions and 20 deletions

View File

@ -721,8 +721,8 @@ class V3ExtensionRouter(ExtensionRouter, RoutersBase):
response_data = jsonutils.loads(response.body)
self._update_version_response(response_data)
response.body = jsonutils.dumps(response_data,
cls=utils.SmarterEncoder)
response.body = jsonutils.dump_as_bytes(response_data,
cls=utils.SmarterEncoder)
return response
@ -735,7 +735,7 @@ def render_response(body=None, status=None, headers=None, method=None):
headers.append(('Vary', 'X-Auth-Token'))
if body is None:
body = ''
body = b''
status = status or (204, 'No Content')
else:
content_types = [v for h, v in headers if h == 'Content-Type']
@ -745,7 +745,7 @@ def render_response(body=None, status=None, headers=None, method=None):
content_type = None
if content_type is None or content_type in JSON_ENCODE_CONTENT_TYPES:
body = jsonutils.dumps(body, cls=utils.SmarterEncoder)
body = jsonutils.dump_as_bytes(body, cls=utils.SmarterEncoder)
if content_type is None:
headers.append(('Content-Type', 'application/json'))
status = status or (200, 'OK')

View File

@ -53,7 +53,7 @@ class AuthTestMixin(object):
message='_build_auth requires 1 (and only 1) '
'secret type and value')
secret_type, secret_value = kwargs.items()[0]
secret_type, secret_value = list(kwargs.items())[0]
# NOTE(dstanek): just to ensure sanity in the tests
self.assertIn(secret_type, ('passcode', 'password'),

View File

@ -534,7 +534,7 @@ class RestfulTestCase(unit.SQLDriverOverrides, rest.RestfulTestCase,
def head(self, path, expected_status=http_client.NO_CONTENT, **kwargs):
r = self.v3_request(path, method='HEAD',
expected_status=expected_status, **kwargs)
self.assertEqual('', r.body)
self.assertEqual(b'', r.body)
return r
def post(self, path, expected_status=http_client.CREATED, **kwargs):
@ -1339,7 +1339,7 @@ class AuthContextMiddlewareAdminTokenTestCase(RestfulTestCase):
def _middleware_request(self, token, extra_environ=None):
def application(environ, start_response):
body = 'body'
body = b'body'
headers = [('Content-Type', 'text/html; charset=utf8'),
('Content-Length', str(len(body)))]
start_response('200 OK', headers)
@ -1381,7 +1381,7 @@ class AuthContextMiddlewareTestCase(RestfulTestCase):
def _middleware_request(self, token, extra_environ=None):
def application(environ, start_response):
body = 'body'
body = b'body'
headers = [('Content-Type', 'text/html; charset=utf8'),
('Content-Length', str(len(body)))]
start_response('200 OK', headers)
@ -1390,7 +1390,7 @@ class AuthContextMiddlewareTestCase(RestfulTestCase):
app = webtest.TestApp(middleware.AuthContextMiddleware(application),
extra_environ=extra_environ)
resp = app.get('/', headers={middleware.AUTH_TOKEN_HEADER: token})
self.assertEqual('body', resp.text) # just to make sure it worked
self.assertEqual(b'body', resp.body) # just to make sure it worked
return resp.request
def test_auth_context_build_by_middleware(self):

View File

@ -1,22 +1,11 @@
keystone.tests.unit.common.test_ldap
keystone.tests.unit.common.test_notifications
keystone.tests.unit.test_associate_project_endpoint_extension
keystone.tests.unit.test_backend_ldap
keystone.tests.unit.test_backend_ldap_pool
keystone.tests.unit.test_ipv6
keystone.tests.unit.test_v2
keystone.tests.unit.test_v3
keystone.tests.unit.test_v3_assignment
keystone.tests.unit.test_v3_auth
keystone.tests.unit.test_v3_credential
keystone.tests.unit.test_v3_domain_config
keystone.tests.unit.test_v3_endpoint_policy
keystone.tests.unit.test_v3_federation
keystone.tests.unit.test_v3_identity
keystone.tests.unit.test_v3_oauth1
keystone.tests.unit.test_v3_os_revoke
keystone.tests.unit.test_v3_protection
keystone.tests.unit.test_v3_resource
keystone.tests.unit.test_v3_trust
keystone.tests.unit.test_versions
keystone.tests.unit.token.test_fernet_provider