Use http_client constants instead of hardcoding

This patch swaps use of hardcoded int and strings for known http
status codes with the values from six.moves.http_client.

Change-Id: Iab83af97920b950d075036ff1499f388299588a0
This commit is contained in:
Eric Brown 2016-07-07 15:04:38 -07:00
parent 88de82e130
commit af0b966af8
8 changed files with 70 additions and 33 deletions

View File

@ -16,6 +16,7 @@
import uuid import uuid
import six import six
from six.moves import http_client
from keystone.catalog import schema from keystone.catalog import schema
from keystone.common import controller from keystone.common import controller
@ -231,7 +232,8 @@ class RegionV3(controller.V3Controller):
ref = self.catalog_api.create_region(ref, initiator) ref = self.catalog_api.create_region(ref, initiator)
return wsgi.render_response( return wsgi.render_response(
RegionV3.wrap_member(request.context_dict, ref), RegionV3.wrap_member(request.context_dict, ref),
status=(201, 'Created')) status=(http_client.CREATED,
http_client.responses[http_client.CREATED]))
@controller.filterprotected('parent_region_id') @controller.filterprotected('parent_region_id')
def list_regions(self, request, filters): def list_regions(self, request, filters):

View File

@ -31,6 +31,7 @@ from oslo_utils import importutils
from oslo_utils import strutils from oslo_utils import strutils
import routes.middleware import routes.middleware
import six import six
from six.moves import http_client
import webob.dec import webob.dec
import webob.exc import webob.exc
@ -245,7 +246,9 @@ class Application(BaseApplication):
user_locale=best_match_language(req)) user_locale=best_match_language(req))
if result is None: if result is None:
return render_response(status=(204, 'No Content')) return render_response(
status=(http_client.NO_CONTENT,
http_client.responses[http_client.NO_CONTENT]))
elif isinstance(result, six.string_types): elif isinstance(result, six.string_types):
return result return result
elif isinstance(result, webob.Response): elif isinstance(result, webob.Response):
@ -263,7 +266,8 @@ class Application(BaseApplication):
controller = importutils.import_class('keystone.common.controller') controller = importutils.import_class('keystone.common.controller')
code = None code = None
if isinstance(self, controller.V3Controller) and req_method == 'POST': if isinstance(self, controller.V3Controller) and req_method == 'POST':
code = (201, 'Created') code = (http_client.CREATED,
http_client.responses[http_client.CREATED])
return code return code
def _normalize_arg(self, arg): def _normalize_arg(self, arg):
@ -695,7 +699,7 @@ class V3ExtensionRouter(ExtensionRouter, RoutersBase):
response = request.get_response(self.application) response = request.get_response(self.application)
if response.status_code != 200: if response.status_code != http_client.OK:
# The request failed, so don't update the response. # The request failed, so don't update the response.
return response return response
@ -721,7 +725,8 @@ def render_response(body=None, status=None, headers=None, method=None):
if body is None: if body is None:
body = b'' body = b''
status = status or (204, 'No Content') status = status or (http_client.NO_CONTENT,
http_client.responses[http_client.NO_CONTENT])
else: else:
content_types = [v for h, v in headers if h == 'Content-Type'] content_types = [v for h, v in headers if h == 'Content-Type']
if content_types: if content_types:
@ -733,7 +738,8 @@ def render_response(body=None, status=None, headers=None, method=None):
body = jsonutils.dump_as_bytes(body, cls=utils.SmarterEncoder) body = jsonutils.dump_as_bytes(body, cls=utils.SmarterEncoder)
if content_type is None: if content_type is None:
headers.append(('Content-Type', 'application/json')) headers.append(('Content-Type', 'application/json'))
status = status or (200, 'OK') status = status or (http_client.OK,
http_client.responses[http_client.OK])
# NOTE(davechen): `mod_wsgi` follows the standards from pep-3333 and # NOTE(davechen): `mod_wsgi` follows the standards from pep-3333 and
# requires the value in response header to be binary type(str) on python2, # requires the value in response header to be binary type(str) on python2,

View File

@ -39,6 +39,7 @@ import uuid
from keystoneclient.contrib.ec2 import utils as ec2_utils from keystoneclient.contrib.ec2 import utils as ec2_utils
from oslo_serialization import jsonutils from oslo_serialization import jsonutils
import six import six
from six.moves import http_client
from keystone.common import controller from keystone.common import controller
from keystone.common import dependency from keystone.common import dependency
@ -435,4 +436,6 @@ def render_token_data_response(token_id, token_data):
headers = [('X-Subject-Token', token_id)] headers = [('X-Subject-Token', token_id)]
return wsgi.render_response(body=token_data, return wsgi.render_response(body=token_data,
status=(200, 'OK'), headers=headers) status=(http_client.OK,
http_client.responses[http_client.OK]),
headers=headers)

View File

@ -15,6 +15,7 @@
import string import string
from oslo_log import log from oslo_log import log
from six.moves import http_client
from six.moves import urllib from six.moves import urllib
import webob import webob
@ -96,7 +97,9 @@ class IdentityProvider(_ControllerBase):
identity_provider.setdefault('enabled', False) identity_provider.setdefault('enabled', False)
idp_ref = self.federation_api.create_idp(idp_id, identity_provider) idp_ref = self.federation_api.create_idp(idp_id, identity_provider)
response = IdentityProvider.wrap_member(request.context_dict, idp_ref) response = IdentityProvider.wrap_member(request.context_dict, idp_ref)
return wsgi.render_response(body=response, status=(201, 'Created')) return wsgi.render_response(
body=response, status=(http_client.CREATED,
http_client.responses[http_client.CREATED]))
@controller.filterprotected('id', 'enabled') @controller.filterprotected('id', 'enabled')
def list_identity_providers(self, request, filters): def list_identity_providers(self, request, filters):
@ -184,7 +187,9 @@ class FederationProtocol(_ControllerBase):
ref = self._normalize_dict(protocol) ref = self._normalize_dict(protocol)
ref = self.federation_api.create_protocol(idp_id, protocol_id, ref) ref = self.federation_api.create_protocol(idp_id, protocol_id, ref)
response = FederationProtocol.wrap_member(request.context_dict, ref) response = FederationProtocol.wrap_member(request.context_dict, ref)
return wsgi.render_response(body=response, status=(201, 'Created')) return wsgi.render_response(
body=response, status=(http_client.CREATED,
http_client.responses[http_client.CREATED]))
@controller.protected() @controller.protected()
@validation.validated(schema.protocol_update, 'protocol') @validation.validated(schema.protocol_update, 'protocol')
@ -223,7 +228,9 @@ class MappingController(_ControllerBase):
mapping_ref = self.federation_api.create_mapping(mapping_id, ref) mapping_ref = self.federation_api.create_mapping(mapping_id, ref)
response = MappingController.wrap_member(request.context_dict, response = MappingController.wrap_member(request.context_dict,
mapping_ref) mapping_ref)
return wsgi.render_response(body=response, status=(201, 'Created')) return wsgi.render_response(
body=response, status=(http_client.CREATED,
http_client.responses[http_client.CREATED]))
@controller.protected() @controller.protected()
def list_mappings(self, request): def list_mappings(self, request):
@ -395,9 +402,10 @@ class Auth(auth_controllers.Auth):
(response, service_provider) = t (response, service_provider) = t
headers = self._build_response_headers(service_provider) headers = self._build_response_headers(service_provider)
return wsgi.render_response(body=response.to_string(), return wsgi.render_response(
status=(200, 'OK'), body=response.to_string(),
headers=headers) status=(http_client.OK, http_client.responses[http_client.OK]),
headers=headers)
@validation.validated(schema.saml_create, 'auth') @validation.validated(schema.saml_create, 'auth')
def create_ecp_assertion(self, context, auth): def create_ecp_assertion(self, context, auth):
@ -415,9 +423,10 @@ class Auth(auth_controllers.Auth):
relay_state_prefix) relay_state_prefix)
headers = self._build_response_headers(service_provider) headers = self._build_response_headers(service_provider)
return wsgi.render_response(body=ecp_assertion.to_string(), return wsgi.render_response(
status=(200, 'OK'), body=ecp_assertion.to_string(),
headers=headers) status=(http_client.OK, http_client.responses[http_client.OK]),
headers=headers)
@dependency.requires('assignment_api', 'resource_api') @dependency.requires('assignment_api', 'resource_api')
@ -494,7 +503,9 @@ class ServiceProvider(_ControllerBase):
CONF.saml.relay_state_prefix) CONF.saml.relay_state_prefix)
sp_ref = self.federation_api.create_sp(sp_id, service_provider) sp_ref = self.federation_api.create_sp(sp_id, service_provider)
response = ServiceProvider.wrap_member(request.context_dict, sp_ref) response = ServiceProvider.wrap_member(request.context_dict, sp_ref)
return wsgi.render_response(body=response, status=(201, 'Created')) return wsgi.render_response(
body=response, status=(http_client.CREATED,
http_client.responses[http_client.CREATED]))
@controller.filterprotected('id', 'enabled') @controller.filterprotected('id', 'enabled')
def list_service_providers(self, request, filters): def list_service_providers(self, request, filters):
@ -532,5 +543,7 @@ class SAMLMetadataV3(_ControllerBase):
except IOError as e: except IOError as e:
# Raise HTTP 500 in case Metadata file cannot be read. # Raise HTTP 500 in case Metadata file cannot be read.
raise exception.MetadataFileError(reason=e) raise exception.MetadataFileError(reason=e)
return wsgi.render_response(body=metadata, status=(200, 'OK'), return wsgi.render_response(
headers=[('Content-Type', 'text/xml')]) body=metadata, status=(http_client.OK,
http_client.responses[http_client.OK]),
headers=[('Content-Type', 'text/xml')])

View File

@ -16,6 +16,7 @@
from oslo_serialization import jsonutils from oslo_serialization import jsonutils
from oslo_utils import timeutils from oslo_utils import timeutils
from six.moves import http_client
from keystone.common import controller from keystone.common import controller
from keystone.common import dependency from keystone.common import dependency
@ -262,9 +263,11 @@ class OAuthControllerV3(controller.V3Controller):
result += expiry_bit result += expiry_bit
headers = [('Content-Type', 'application/x-www-urlformencoded')] headers = [('Content-Type', 'application/x-www-urlformencoded')]
response = wsgi.render_response(result, response = wsgi.render_response(
status=(201, 'Created'), result,
headers=headers) status=(http_client.CREATED,
http_client.responses[http_client.CREATED]),
headers=headers)
return response return response
@ -341,9 +344,11 @@ class OAuthControllerV3(controller.V3Controller):
result += expiry_bit result += expiry_bit
headers = [('Content-Type', 'application/x-www-urlformencoded')] headers = [('Content-Type', 'application/x-www-urlformencoded')]
response = wsgi.render_response(result, response = wsgi.render_response(
status=(201, 'Created'), result,
headers=headers) status=(http_client.CREATED,
http_client.responses[http_client.CREATED]),
headers=headers)
return response return response

View File

@ -17,6 +17,7 @@
import uuid import uuid
from six.moves import http_client
from keystone.common import controller from keystone.common import controller
from keystone.common import dependency from keystone.common import dependency
@ -188,8 +189,10 @@ class DomainConfigV3(controller.V3Controller):
# Return status code 200, since config already existed # Return status code 200, since config already existed
return wsgi.render_response(body={self.member_name: ref}) return wsgi.render_response(body={self.member_name: ref})
else: else:
return wsgi.render_response(body={self.member_name: ref}, return wsgi.render_response(
status=(201, 'Created')) body={self.member_name: ref},
status=(http_client.CREATED,
http_client.responses[http_client.CREATED]))
@controller.protected() @controller.protected()
def get_domain_config(self, request, domain_id, group=None, option=None): def get_domain_config(self, request, domain_id, group=None, option=None):

View File

@ -107,7 +107,8 @@ class ApplicationTest(BaseWSGITest):
def test_render_response_custom_status(self): def test_render_response_custom_status(self):
resp = wsgi.render_response( resp = wsgi.render_response(
status=(http_client.NOT_IMPLEMENTED, 'Not Implemented')) status=(http_client.NOT_IMPLEMENTED,
http_client.responses[http_client.NOT_IMPLEMENTED]))
self.assertEqual('501 Not Implemented', resp.status) self.assertEqual('501 Not Implemented', resp.status)
self.assertEqual(http_client.NOT_IMPLEMENTED, resp.status_int) self.assertEqual(http_client.NOT_IMPLEMENTED, resp.status_int)

View File

@ -13,6 +13,7 @@
# under the License. # under the License.
from oslo_serialization import jsonutils from oslo_serialization import jsonutils
from six.moves import http_client
import webob import webob
from keystone.common import extension from keystone.common import extension
@ -169,11 +170,14 @@ class Version(wsgi.Application):
headers=(('Content-Type', MimeTypes.JSON_HOME),)) headers=(('Content-Type', MimeTypes.JSON_HOME),))
versions = self._get_versions_list(request.context_dict) versions = self._get_versions_list(request.context_dict)
return wsgi.render_response(status=(300, 'Multiple Choices'), body={ return wsgi.render_response(
'versions': { status=(http_client.MULTIPLE_CHOICES,
'values': list(versions.values()) http_client.responses[http_client.MULTIPLE_CHOICES]),
} body={
}) 'versions': {
'values': list(versions.values())
}
})
def get_version_v2(self, request): def get_version_v2(self, request):
versions = self._get_versions_list(request.context_dict) versions = self._get_versions_list(request.context_dict)