Convert "outgoing" literals to unicode
The patch convers most literals throughout marconi to unicode. Lietrals not leaving "marconi-land" were left untouched. This is the first patch of a serie that will enforce unicode usage within marconi. Decode early, encode late. String format parameters were left untouched on purpose. Those parameters should be decoded before getting there. Implements blueprint enforce-decoding Change-Id: I85e534ced188191c9c7a17e9908cb720e7d63ca9
This commit is contained in:
parent
9272cf4742
commit
d8c68d8609
@ -43,7 +43,7 @@ class Bootstrap(object):
|
|||||||
|
|
||||||
@decorators.lazy_property(write=False)
|
@decorators.lazy_property(write=False)
|
||||||
def storage(self):
|
def storage(self):
|
||||||
LOG.debug(_('Loading Storage Driver'))
|
LOG.debug(_(u'Loading Storage Driver'))
|
||||||
try:
|
try:
|
||||||
mgr = driver.DriverManager('marconi.storage',
|
mgr = driver.DriverManager('marconi.storage',
|
||||||
CFG.storage,
|
CFG.storage,
|
||||||
@ -55,7 +55,7 @@ class Bootstrap(object):
|
|||||||
|
|
||||||
@decorators.lazy_property(write=False)
|
@decorators.lazy_property(write=False)
|
||||||
def transport(self):
|
def transport(self):
|
||||||
LOG.debug(_('Loading Transport Driver'))
|
LOG.debug(_(u'Loading Transport Driver'))
|
||||||
try:
|
try:
|
||||||
mgr = driver.DriverManager('marconi.transport',
|
mgr = driver.DriverManager('marconi.transport',
|
||||||
CFG.transport,
|
CFG.transport,
|
||||||
|
@ -39,8 +39,8 @@ def run():
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
try:
|
try:
|
||||||
info = _('Starting marconi-gc')
|
info = _(u'Starting marconi-gc')
|
||||||
print(info + _('. Use CTRL+C to exit...\n'))
|
print(info + _(u'. Use CTRL+C to exit...\n'))
|
||||||
LOG.info(info)
|
LOG.info(info)
|
||||||
|
|
||||||
boot = bootstrap.Bootstrap(cli_args=sys.argv[1:])
|
boot = bootstrap.Bootstrap(cli_args=sys.argv[1:])
|
||||||
@ -57,7 +57,5 @@ def run():
|
|||||||
time.sleep(gc_interval)
|
time.sleep(gc_interval)
|
||||||
|
|
||||||
except NotImplementedError as ex:
|
except NotImplementedError as ex:
|
||||||
print('The configured storage driver does not support GC.\n')
|
print(_(u'The configured storage driver does not support GC.\n'))
|
||||||
|
|
||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
print('')
|
|
||||||
|
@ -72,7 +72,7 @@ def runnable(func):
|
|||||||
PROJECT_CFG.load(args=sys.argv[1:])
|
PROJECT_CFG.load(args=sys.argv[1:])
|
||||||
func()
|
func()
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
LOG.info('Terminating')
|
LOG.info(_(u'Terminating'))
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
_fail(1, ex)
|
_fail(1, ex)
|
||||||
|
|
||||||
|
@ -197,4 +197,4 @@ def _make_opt(name, default):
|
|||||||
try:
|
try:
|
||||||
return deduction[type(default)](name, help=help, default=default)
|
return deduction[type(default)](name, help=help, default=default)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise cfg.Error('unrecognized option type')
|
raise cfg.Error(u'unrecognized option type')
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
|
|
||||||
class InvalidDriver(Exception):
|
class InvalidDriver(Exception):
|
||||||
pass
|
"""A driver was not found or loaded."""
|
||||||
|
|
||||||
|
|
||||||
class PatternNotFound(Exception):
|
class PatternNotFound(Exception):
|
||||||
|
@ -21,11 +21,11 @@ class ConnectionError(Exception):
|
|||||||
|
|
||||||
|
|
||||||
class DoesNotExist(Exception):
|
class DoesNotExist(Exception):
|
||||||
pass
|
"""Resource does not exist."""
|
||||||
|
|
||||||
|
|
||||||
class NotPermitted(Exception):
|
class NotPermitted(Exception):
|
||||||
pass
|
"""Operation not permitted."""
|
||||||
|
|
||||||
|
|
||||||
class Conflict(Exception):
|
class Conflict(Exception):
|
||||||
@ -53,9 +53,9 @@ class MessageConflict(Conflict):
|
|||||||
posted. Note that these must be in the same order as the
|
posted. Note that these must be in the same order as the
|
||||||
list of messages originally submitted to be enqueued.
|
list of messages originally submitted to be enqueued.
|
||||||
"""
|
"""
|
||||||
msg = ('Message could not be enqueued due to a conflict '
|
msg = (u'Message could not be enqueued due to a conflict '
|
||||||
'with another message that is already in '
|
u'with another message that is already in '
|
||||||
'queue %(queue)s for project %(project)s' %
|
u'queue %(queue)s for project %(project)s' %
|
||||||
dict(queue=queue, project=project))
|
dict(queue=queue, project=project))
|
||||||
|
|
||||||
super(MessageConflict, self).__init__(msg)
|
super(MessageConflict, self).__init__(msg)
|
||||||
@ -70,7 +70,7 @@ class MessageConflict(Conflict):
|
|||||||
class QueueDoesNotExist(DoesNotExist):
|
class QueueDoesNotExist(DoesNotExist):
|
||||||
|
|
||||||
def __init__(self, name, project):
|
def __init__(self, name, project):
|
||||||
msg = ('Queue %(name)s does not exist for project %(project)s' %
|
msg = (u'Queue %(name)s does not exist for project %(project)s' %
|
||||||
dict(name=name, project=project))
|
dict(name=name, project=project))
|
||||||
super(QueueDoesNotExist, self).__init__(msg)
|
super(QueueDoesNotExist, self).__init__(msg)
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ class QueueDoesNotExist(DoesNotExist):
|
|||||||
class QueueIsEmpty(Exception):
|
class QueueIsEmpty(Exception):
|
||||||
|
|
||||||
def __init__(self, name, project):
|
def __init__(self, name, project):
|
||||||
msg = ('Queue %(name)s in project %(project)s is empty' %
|
msg = (u'Queue %(name)s in project %(project)s is empty' %
|
||||||
dict(name=name, project=project))
|
dict(name=name, project=project))
|
||||||
super(QueueIsEmpty, self).__init__(msg)
|
super(QueueIsEmpty, self).__init__(msg)
|
||||||
|
|
||||||
@ -86,8 +86,8 @@ class QueueIsEmpty(Exception):
|
|||||||
class MessageDoesNotExist(DoesNotExist):
|
class MessageDoesNotExist(DoesNotExist):
|
||||||
|
|
||||||
def __init__(self, mid, queue, project):
|
def __init__(self, mid, queue, project):
|
||||||
msg = ('Message %(mid)s does not exist in '
|
msg = (u'Message %(mid)s does not exist in '
|
||||||
'queue %(queue)s for project %(project)s' %
|
u'queue %(queue)s for project %(project)s' %
|
||||||
dict(mid=mid, queue=queue, project=project))
|
dict(mid=mid, queue=queue, project=project))
|
||||||
super(MessageDoesNotExist, self).__init__(msg)
|
super(MessageDoesNotExist, self).__init__(msg)
|
||||||
|
|
||||||
@ -95,8 +95,8 @@ class MessageDoesNotExist(DoesNotExist):
|
|||||||
class ClaimDoesNotExist(DoesNotExist):
|
class ClaimDoesNotExist(DoesNotExist):
|
||||||
|
|
||||||
def __init__(self, cid, queue, project):
|
def __init__(self, cid, queue, project):
|
||||||
msg = ('Claim %(cid)s does not exist in '
|
msg = (u'Claim %(cid)s does not exist in '
|
||||||
'queue %(queue)s for project %(project)s' %
|
u'queue %(queue)s for project %(project)s' %
|
||||||
dict(cid=cid, queue=queue, project=project))
|
dict(cid=cid, queue=queue, project=project))
|
||||||
super(ClaimDoesNotExist, self).__init__(msg)
|
super(ClaimDoesNotExist, self).__init__(msg)
|
||||||
|
|
||||||
@ -104,6 +104,6 @@ class ClaimDoesNotExist(DoesNotExist):
|
|||||||
class ClaimNotPermitted(NotPermitted):
|
class ClaimNotPermitted(NotPermitted):
|
||||||
|
|
||||||
def __init__(self, mid, cid):
|
def __init__(self, mid, cid):
|
||||||
msg = ('Message %(mid)s is not claimed by %(cid)s' %
|
msg = (u'Message %(mid)s is not claimed by %(cid)s' %
|
||||||
dict(cid=cid, mid=mid))
|
dict(cid=cid, mid=mid))
|
||||||
super(ClaimNotPermitted, self).__init__(msg)
|
super(ClaimNotPermitted, self).__init__(msg)
|
||||||
|
@ -198,7 +198,7 @@ class ClaimController(storage.ClaimBase):
|
|||||||
expires = now + ttl_delta
|
expires = now + ttl_delta
|
||||||
|
|
||||||
if now > expires:
|
if now > expires:
|
||||||
raise ValueError('New ttl will make the claim expires')
|
raise ValueError(u'New ttl will make the claim expires')
|
||||||
|
|
||||||
msg_ctrl = self.driver.message_controller
|
msg_ctrl = self.driver.message_controller
|
||||||
claimed = msg_ctrl.claimed(queue, cid, expires=now,
|
claimed = msg_ctrl.claimed(queue, cid, expires=now,
|
||||||
|
@ -46,7 +46,7 @@ class Driver(storage.DriverBase):
|
|||||||
return self._database
|
return self._database
|
||||||
|
|
||||||
def gc(self):
|
def gc(self):
|
||||||
LOG.info('Performing garbage collection.')
|
LOG.info(_(u'Performing garbage collection.'))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.message_controller.remove_expired()
|
self.message_controller.remove_expired()
|
||||||
|
@ -208,7 +208,7 @@ class MessageController(storage.MessageBase):
|
|||||||
|
|
||||||
if head is None:
|
if head is None:
|
||||||
# Assume queue was just deleted via a parallel request
|
# Assume queue was just deleted via a parallel request
|
||||||
LOG.warning(_('Queue %s is empty or missing.') % queue_name)
|
LOG.warning(_(u'Queue %s is empty or missing.') % queue_name)
|
||||||
return
|
return
|
||||||
|
|
||||||
# NOTE(flaper87): Can we use k instead of
|
# NOTE(flaper87): Can we use k instead of
|
||||||
@ -257,8 +257,8 @@ class MessageController(storage.MessageBase):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if sort not in (1, -1):
|
if sort not in (1, -1):
|
||||||
raise ValueError('sort must be either 1 (ascending) '
|
raise ValueError(u'sort must be either 1 (ascending) '
|
||||||
'or -1 (descending)')
|
u'or -1 (descending)')
|
||||||
|
|
||||||
now = timeutils.utcnow()
|
now = timeutils.utcnow()
|
||||||
|
|
||||||
@ -273,7 +273,7 @@ class MessageController(storage.MessageBase):
|
|||||||
}
|
}
|
||||||
|
|
||||||
if fields and not isinstance(fields, (dict, list)):
|
if fields and not isinstance(fields, (dict, list)):
|
||||||
raise TypeError('Fields must be an instance of list / dict')
|
raise TypeError(u'Fields must be an instance of list / dict')
|
||||||
|
|
||||||
if not echo and client_uuid is not None:
|
if not echo and client_uuid is not None:
|
||||||
query['u'] = {'$ne': client_uuid}
|
query['u'] = {'$ne': client_uuid}
|
||||||
@ -519,9 +519,9 @@ class MessageController(storage.MessageBase):
|
|||||||
|
|
||||||
# Log a message if we retried, for debugging perf issues
|
# Log a message if we retried, for debugging perf issues
|
||||||
if attempt != 0:
|
if attempt != 0:
|
||||||
message = _('%(attempts)d attempt(s) required to post '
|
message = _(u'%(attempts)d attempt(s) required to post '
|
||||||
'%(num_messages)d messages to queue '
|
u'%(num_messages)d messages to queue '
|
||||||
'%(queue_name)s and project %(project)s')
|
u'%(queue_name)s and project %(project)s')
|
||||||
message %= dict(queue_name=queue_name, attempts=attempt+1,
|
message %= dict(queue_name=queue_name, attempts=attempt+1,
|
||||||
num_messages=len(ids), project=project)
|
num_messages=len(ids), project=project)
|
||||||
|
|
||||||
@ -539,8 +539,9 @@ class MessageController(storage.MessageBase):
|
|||||||
#
|
#
|
||||||
# TODO(kgriffs): Add transaction ID to help match up loglines
|
# TODO(kgriffs): Add transaction ID to help match up loglines
|
||||||
if attempt == 0:
|
if attempt == 0:
|
||||||
message = _('First attempt failed while adding messages '
|
message = _(u'First attempt failed while '
|
||||||
'to queue %s for current request') % queue_name
|
u'adding messages to queue %s '
|
||||||
|
u'for current request') % queue_name
|
||||||
|
|
||||||
LOG.debug(message)
|
LOG.debug(message)
|
||||||
|
|
||||||
@ -584,8 +585,8 @@ class MessageController(storage.MessageBase):
|
|||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
message = _('Hit maximum number of attempts (%(max)s) for queue '
|
message = _(u'Hit maximum number of attempts (%(max)s) for queue '
|
||||||
'%(id)s in project %(project)s')
|
u'%(id)s in project %(project)s')
|
||||||
message %= dict(max=options.CFG.max_attempts, id=queue_name,
|
message %= dict(max=options.CFG.max_attempts, id=queue_name,
|
||||||
project=project)
|
project=project)
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ def dup_marker_from_error(error_message):
|
|||||||
"""
|
"""
|
||||||
match = DUP_MARKER_REGEX.findall(error_message)
|
match = DUP_MARKER_REGEX.findall(error_message)
|
||||||
if not match:
|
if not match:
|
||||||
description = ('Error message could not be parsed: %s' %
|
description = (u'Error message could not be parsed: %s' %
|
||||||
error_message)
|
error_message)
|
||||||
raise exceptions.PatternNotFound(description)
|
raise exceptions.PatternNotFound(description)
|
||||||
|
|
||||||
@ -96,16 +96,16 @@ def calculate_backoff(attempt, max_attempts, max_sleep, max_jitter=0):
|
|||||||
the ratio attempt / max_attempts, with optional jitter.
|
the ratio attempt / max_attempts, with optional jitter.
|
||||||
"""
|
"""
|
||||||
if max_attempts < 0:
|
if max_attempts < 0:
|
||||||
raise ValueError('max_attempts must be >= 0')
|
raise ValueError(u'max_attempts must be >= 0')
|
||||||
|
|
||||||
if max_sleep < 0:
|
if max_sleep < 0:
|
||||||
raise ValueError('max_sleep must be >= 0')
|
raise ValueError(u'max_sleep must be >= 0')
|
||||||
|
|
||||||
if max_jitter < 0:
|
if max_jitter < 0:
|
||||||
raise ValueError('max_jitter must be >= 0')
|
raise ValueError(u'max_jitter must be >= 0')
|
||||||
|
|
||||||
if not (0 <= attempt < max_attempts):
|
if not (0 <= attempt < max_attempts):
|
||||||
raise ValueError('attempt value is out of range')
|
raise ValueError(u'attempt value is out of range')
|
||||||
|
|
||||||
ratio = float(attempt) / float(max_attempts)
|
ratio = float(attempt) / float(max_attempts)
|
||||||
backoff_sec = ratio * max_sleep
|
backoff_sec = ratio * max_sleep
|
||||||
@ -128,7 +128,7 @@ def to_oid(obj):
|
|||||||
try:
|
try:
|
||||||
return objectid.ObjectId(obj)
|
return objectid.ObjectId(obj)
|
||||||
except (TypeError, berrors.InvalidId):
|
except (TypeError, berrors.InvalidId):
|
||||||
msg = 'Invalid oid: %s' % obj
|
msg = u'Invalid oid: %s' % obj
|
||||||
raise storage_exceptions.MalformedID(msg)
|
raise storage_exceptions.MalformedID(msg)
|
||||||
|
|
||||||
|
|
||||||
@ -137,7 +137,7 @@ def oid_utc(oid):
|
|||||||
try:
|
try:
|
||||||
return timeutils.normalize_time(oid.generation_time)
|
return timeutils.normalize_time(oid.generation_time)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
raise TypeError('Expected ObjectId and got %s' % type(oid))
|
raise TypeError(u'Expected ObjectId and got %s' % type(oid))
|
||||||
|
|
||||||
|
|
||||||
def stat_message(message, now):
|
def stat_message(message, now):
|
||||||
@ -166,7 +166,7 @@ def raises_conn_error(func):
|
|||||||
return func(*args, **kwargs)
|
return func(*args, **kwargs)
|
||||||
except errors.ConnectionFailure:
|
except errors.ConnectionFailure:
|
||||||
# NOTE(flaper87): Raise the error
|
# NOTE(flaper87): Raise the error
|
||||||
msg = "ConnectionFailure caught"
|
msg = u'ConnectionFailure caught'
|
||||||
LOG.error(msg)
|
LOG.error(msg)
|
||||||
raise storage_exceptions.ConnectionError(msg)
|
raise storage_exceptions.ConnectionError(msg)
|
||||||
|
|
||||||
|
@ -99,8 +99,8 @@ class MessageController(base.MessageBase):
|
|||||||
limit 1'''
|
limit 1'''
|
||||||
|
|
||||||
if sort not in (1, -1):
|
if sort not in (1, -1):
|
||||||
raise ValueError('sort must be either 1 (ascending) '
|
raise ValueError(u'sort must be either 1 (ascending) '
|
||||||
'or -1 (descending)')
|
u'or -1 (descending)')
|
||||||
|
|
||||||
sql = sql % ('DESC' if sort == -1 else 'ASC')
|
sql = sql % ('DESC' if sort == -1 else 'ASC')
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ class KeystoneAuth(object):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def install(cls, app, conf):
|
def install(cls, app, conf):
|
||||||
"""Install Auth check on application."""
|
"""Install Auth check on application."""
|
||||||
LOG.debug(_("Installing Keystone's auth protocol"))
|
LOG.debug(_(u"Installing Keystone's auth protocol"))
|
||||||
cls._register_opts(conf)
|
cls._register_opts(conf)
|
||||||
conf = dict(conf.get(cls.OPT_GROUP_NAME))
|
conf = dict(conf.get(cls.OPT_GROUP_NAME))
|
||||||
return auth_token.AuthProtocol(app, conf=conf)
|
return auth_token.AuthProtocol(app, conf=conf)
|
||||||
|
@ -42,9 +42,9 @@ class CollectionResource(object):
|
|||||||
self.claim_controller = claim_controller
|
self.claim_controller = claim_controller
|
||||||
|
|
||||||
def on_post(self, req, resp, project_id, queue_name):
|
def on_post(self, req, resp, project_id, queue_name):
|
||||||
LOG.debug(_("Claims collection POST - queue: %(queue)s, "
|
LOG.debug(_(u'Claims collection POST - queue: %(queue)s, '
|
||||||
"project: %(project)s") %
|
u'project: %(project)s') %
|
||||||
{"queue": queue_name, "project": project_id})
|
{'queue': queue_name, 'project': project_id})
|
||||||
|
|
||||||
# Check for an explicit limit on the # of messages to claim
|
# Check for an explicit limit on the # of messages to claim
|
||||||
limit = req.get_param_as_int('limit')
|
limit = req.get_param_as_int('limit')
|
||||||
@ -52,7 +52,7 @@ class CollectionResource(object):
|
|||||||
|
|
||||||
# Place JSON size restriction before parsing
|
# Place JSON size restriction before parsing
|
||||||
if req.content_length > CFG.metadata_max_length:
|
if req.content_length > CFG.metadata_max_length:
|
||||||
description = _('Claim metadata size is too large.')
|
description = _(u'Claim metadata size is too large.')
|
||||||
raise wsgi_exceptions.HTTPBadRequestBody(description)
|
raise wsgi_exceptions.HTTPBadRequestBody(description)
|
||||||
|
|
||||||
# Read claim metadata (e.g., TTL) and raise appropriate
|
# Read claim metadata (e.g., TTL) and raise appropriate
|
||||||
@ -81,7 +81,7 @@ class CollectionResource(object):
|
|||||||
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
description = _('Claim could not be created.')
|
description = _(u'Claim could not be created.')
|
||||||
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
||||||
|
|
||||||
# Serialize claimed messages, if any. This logic assumes
|
# Serialize claimed messages, if any. This logic assumes
|
||||||
@ -108,11 +108,11 @@ class ItemResource(object):
|
|||||||
self.claim_controller = claim_controller
|
self.claim_controller = claim_controller
|
||||||
|
|
||||||
def on_get(self, req, resp, project_id, queue_name, claim_id):
|
def on_get(self, req, resp, project_id, queue_name, claim_id):
|
||||||
LOG.debug(_("Claim item GET - claim: %(claim_id)s, "
|
LOG.debug(_(u'Claim item GET - claim: %(claim_id)s, '
|
||||||
"queue: %(queue_name)s, project: %(project_id)s") %
|
u'queue: %(queue_name)s, project: %(project_id)s') %
|
||||||
{"queue_name": queue_name,
|
{'queue_name': queue_name,
|
||||||
"project_id": project_id,
|
'project_id': project_id,
|
||||||
"claim_id": claim_id})
|
'claim_id': claim_id})
|
||||||
try:
|
try:
|
||||||
meta, msgs = self.claim_controller.get(
|
meta, msgs = self.claim_controller.get(
|
||||||
queue_name,
|
queue_name,
|
||||||
@ -127,7 +127,7 @@ class ItemResource(object):
|
|||||||
raise falcon.HTTPNotFound()
|
raise falcon.HTTPNotFound()
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
description = _('Claim could not be queried.')
|
description = _(u'Claim could not be queried.')
|
||||||
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
||||||
|
|
||||||
# Serialize claimed messages
|
# Serialize claimed messages
|
||||||
@ -145,15 +145,15 @@ class ItemResource(object):
|
|||||||
resp.status = falcon.HTTP_200
|
resp.status = falcon.HTTP_200
|
||||||
|
|
||||||
def on_patch(self, req, resp, project_id, queue_name, claim_id):
|
def on_patch(self, req, resp, project_id, queue_name, claim_id):
|
||||||
LOG.debug(_("Claim Item PATCH - claim: %(claim_id)s, "
|
LOG.debug(_(u'Claim Item PATCH - claim: %(claim_id)s, '
|
||||||
"queue: %(queue_name)s, project:%(project_id)s") %
|
u'queue: %(queue_name)s, project:%(project_id)s') %
|
||||||
{"queue_name": queue_name,
|
{'queue_name': queue_name,
|
||||||
"project_id": project_id,
|
'project_id': project_id,
|
||||||
"claim_id": claim_id})
|
'claim_id': claim_id})
|
||||||
|
|
||||||
# Place JSON size restriction before parsing
|
# Place JSON size restriction before parsing
|
||||||
if req.content_length > CFG.metadata_max_length:
|
if req.content_length > CFG.metadata_max_length:
|
||||||
description = _('Claim metadata size is too large.')
|
description = _(u'Claim metadata size is too large.')
|
||||||
raise wsgi_exceptions.HTTPBadRequestBody(description)
|
raise wsgi_exceptions.HTTPBadRequestBody(description)
|
||||||
|
|
||||||
# Read claim metadata (e.g., TTL) and raise appropriate
|
# Read claim metadata (e.g., TTL) and raise appropriate
|
||||||
@ -178,15 +178,15 @@ class ItemResource(object):
|
|||||||
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
description = _('Claim could not be updated.')
|
description = _(u'Claim could not be updated.')
|
||||||
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
||||||
|
|
||||||
def on_delete(self, req, resp, project_id, queue_name, claim_id):
|
def on_delete(self, req, resp, project_id, queue_name, claim_id):
|
||||||
LOG.debug(_("Claim item DELETE - claim: %(claim_id)s, "
|
LOG.debug(_(u'Claim item DELETE - claim: %(claim_id)s, '
|
||||||
"queue: %(queue_name)s, project: %(project_id)s") %
|
u'queue: %(queue_name)s, project: %(project_id)s') %
|
||||||
{"queue_name": queue_name,
|
{'queue_name': queue_name,
|
||||||
"project_id": project_id,
|
'project_id': project_id,
|
||||||
"claim_id": claim_id})
|
'claim_id': claim_id})
|
||||||
try:
|
try:
|
||||||
self.claim_controller.delete(queue_name,
|
self.claim_controller.delete(queue_name,
|
||||||
claim_id=claim_id,
|
claim_id=claim_id,
|
||||||
@ -196,7 +196,7 @@ class ItemResource(object):
|
|||||||
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
description = _('Claim could not be deleted.')
|
description = _(u'Claim could not be deleted.')
|
||||||
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
||||||
|
|
||||||
|
|
||||||
|
@ -43,11 +43,11 @@ LOG = logging.getLogger(__name__)
|
|||||||
def _check_media_type(req, resp, params):
|
def _check_media_type(req, resp, params):
|
||||||
if not req.client_accepts('application/json'):
|
if not req.client_accepts('application/json'):
|
||||||
raise falcon.HTTPNotAcceptable(
|
raise falcon.HTTPNotAcceptable(
|
||||||
'''
|
u'''
|
||||||
Endpoint only serves `application/json`; specify client-side
|
Endpoint only serves `application/json`; specify client-side
|
||||||
media type support with the "Accept" header.''',
|
media type support with the "Accept" header.''',
|
||||||
href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html",
|
href=u'http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html',
|
||||||
href_text='"14.1 Accept", Hypertext Transfer Protocol -- HTTP/1.1')
|
href_text=u'14.1 Accept, Hypertext Transfer Protocol -- HTTP/1.1')
|
||||||
|
|
||||||
|
|
||||||
def _extract_project_id(req, resp, params):
|
def _extract_project_id(req, resp, params):
|
||||||
@ -121,7 +121,7 @@ class Driver(transport.DriverBase):
|
|||||||
def listen(self):
|
def listen(self):
|
||||||
"""Self-host using 'bind' and 'port' from the WSGI config group."""
|
"""Self-host using 'bind' and 'port' from the WSGI config group."""
|
||||||
|
|
||||||
msg = _('Serving on host %(bind)s:%(port)s')
|
msg = _(u'Serving on host %(bind)s:%(port)s')
|
||||||
msg %= {'bind': WSGI_CFG.bind, 'port': WSGI_CFG.port}
|
msg %= {'bind': WSGI_CFG.bind, 'port': WSGI_CFG.port}
|
||||||
LOG.info(msg)
|
LOG.info(msg)
|
||||||
|
|
||||||
|
@ -19,8 +19,8 @@ import falcon
|
|||||||
class HTTPServiceUnavailable(falcon.HTTPServiceUnavailable):
|
class HTTPServiceUnavailable(falcon.HTTPServiceUnavailable):
|
||||||
"""Wraps falcon.HTTPServiceUnavailable with Marconi messaging."""
|
"""Wraps falcon.HTTPServiceUnavailable with Marconi messaging."""
|
||||||
|
|
||||||
TITLE = _('Service temporarily unavailable')
|
TITLE = _(u'Service temporarily unavailable')
|
||||||
DESCRIPTION = ('Please try again in a few seconds.')
|
DESCRIPTION = (u'Please try again in a few seconds.')
|
||||||
|
|
||||||
def __init__(self, description, retry_after=30):
|
def __init__(self, description, retry_after=30):
|
||||||
description = description + ' ' + self.DESCRIPTION
|
description = description + ' ' + self.DESCRIPTION
|
||||||
@ -31,7 +31,7 @@ class HTTPServiceUnavailable(falcon.HTTPServiceUnavailable):
|
|||||||
class HTTPBadRequestBody(falcon.HTTPBadRequest):
|
class HTTPBadRequestBody(falcon.HTTPBadRequest):
|
||||||
"""Wraps falcon.HTTPBadRequest with a contextual title."""
|
"""Wraps falcon.HTTPBadRequest with a contextual title."""
|
||||||
|
|
||||||
TITLE = _('Invalid request body')
|
TITLE = _(u'Invalid request body')
|
||||||
|
|
||||||
def __init__(self, description):
|
def __init__(self, description):
|
||||||
super(HTTPBadRequestBody, self).__init__(self.TITLE, description)
|
super(HTTPBadRequestBody, self).__init__(self.TITLE, description)
|
||||||
@ -40,7 +40,7 @@ class HTTPBadRequestBody(falcon.HTTPBadRequest):
|
|||||||
class HTTPDocumentTypeNotSupported(HTTPBadRequestBody):
|
class HTTPDocumentTypeNotSupported(HTTPBadRequestBody):
|
||||||
"""Wraps HTTPBadRequestBody with a standard description."""
|
"""Wraps HTTPBadRequestBody with a standard description."""
|
||||||
|
|
||||||
DESCRIPTION = ('Document type not supported.')
|
DESCRIPTION = _(u'Document type not supported.')
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(HTTPDocumentTypeNotSupported, self).__init__(self.DESCRIPTION)
|
super(HTTPDocumentTypeNotSupported, self).__init__(self.DESCRIPTION)
|
||||||
|
@ -58,7 +58,7 @@ class CollectionResource(object):
|
|||||||
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
description = _('Message could not be retrieved.')
|
description = _(u'Message could not be retrieved.')
|
||||||
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
||||||
|
|
||||||
# Prepare response
|
# Prepare response
|
||||||
@ -103,19 +103,19 @@ class CollectionResource(object):
|
|||||||
raise falcon.HTTPNotFound()
|
raise falcon.HTTPNotFound()
|
||||||
|
|
||||||
except storage_exceptions.MalformedMarker:
|
except storage_exceptions.MalformedMarker:
|
||||||
title = _('Invalid query string parameter')
|
title = _(u'Invalid query string parameter')
|
||||||
description = _('The value for the query string '
|
description = _(u'The value for the query string '
|
||||||
'parameter "marker" could not be '
|
u'parameter "marker" could not be '
|
||||||
'parsed. We recommend using the '
|
u'parsed. We recommend using the '
|
||||||
'"next" URI from a previous '
|
u'"next" URI from a previous '
|
||||||
'request directly, rather than '
|
u'request directly, rather than '
|
||||||
'constructing the URI manually. ')
|
u'constructing the URI manually. ')
|
||||||
|
|
||||||
raise falcon.HTTPBadRequest(title, description)
|
raise falcon.HTTPBadRequest(title, description)
|
||||||
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
description = _('Messages could not be listed.')
|
description = _(u'Messages could not be listed.')
|
||||||
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
||||||
|
|
||||||
if not messages:
|
if not messages:
|
||||||
@ -142,15 +142,15 @@ class CollectionResource(object):
|
|||||||
#-----------------------------------------------------------------------
|
#-----------------------------------------------------------------------
|
||||||
|
|
||||||
def on_post(self, req, resp, project_id, queue_name):
|
def on_post(self, req, resp, project_id, queue_name):
|
||||||
LOG.debug(_("Messages collection POST - queue: %(queue)s, "
|
LOG.debug(_(u'Messages collection POST - queue: %(queue)s, '
|
||||||
"project: %(project)s") %
|
u'project: %(project)s') %
|
||||||
{"queue": queue_name, "project": project_id})
|
{'queue': queue_name, 'project': project_id})
|
||||||
|
|
||||||
uuid = req.get_header('Client-ID', required=True)
|
uuid = req.get_header('Client-ID', required=True)
|
||||||
|
|
||||||
# Place JSON size restriction before parsing
|
# Place JSON size restriction before parsing
|
||||||
if req.content_length > CFG.content_max_length:
|
if req.content_length > CFG.content_max_length:
|
||||||
description = _('Message collection size is too large.')
|
description = _(u'Message collection size is too large.')
|
||||||
raise wsgi_exceptions.HTTPBadRequestBody(description)
|
raise wsgi_exceptions.HTTPBadRequestBody(description)
|
||||||
|
|
||||||
# Pull out just the fields we care about
|
# Pull out just the fields we care about
|
||||||
@ -164,7 +164,7 @@ class CollectionResource(object):
|
|||||||
# NOTE(kgriffs): This check assumes messages is a
|
# NOTE(kgriffs): This check assumes messages is a
|
||||||
# collection (not a generator).
|
# collection (not a generator).
|
||||||
if not messages:
|
if not messages:
|
||||||
description = _('No messages were provided.')
|
description = _(u'No messages were provided.')
|
||||||
raise wsgi_exceptions.HTTPBadRequestBody(description)
|
raise wsgi_exceptions.HTTPBadRequestBody(description)
|
||||||
|
|
||||||
# Enqueue the messages
|
# Enqueue the messages
|
||||||
@ -197,12 +197,12 @@ class CollectionResource(object):
|
|||||||
if not message_ids:
|
if not message_ids:
|
||||||
# TODO(kgriffs): Include error code that is different
|
# TODO(kgriffs): Include error code that is different
|
||||||
# from the code used in the generic case, below.
|
# from the code used in the generic case, below.
|
||||||
description = _('No messages could be enqueued.')
|
description = _(u'No messages could be enqueued.')
|
||||||
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
||||||
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
description = _('Messages could not be enqueued.')
|
description = _(u'Messages could not be enqueued.')
|
||||||
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
||||||
|
|
||||||
# Prepare the response
|
# Prepare the response
|
||||||
@ -216,9 +216,9 @@ class CollectionResource(object):
|
|||||||
resp.body = utils.to_json(body)
|
resp.body = utils.to_json(body)
|
||||||
|
|
||||||
def on_get(self, req, resp, project_id, queue_name):
|
def on_get(self, req, resp, project_id, queue_name):
|
||||||
LOG.debug(_("Messages collection GET - queue: %(queue)s, "
|
LOG.debug(_(u'Messages collection GET - queue: %(queue)s, '
|
||||||
"project: %(project)s") %
|
u'project: %(project)s') %
|
||||||
{"queue": queue_name, "project": project_id})
|
{'queue': queue_name, 'project': project_id})
|
||||||
|
|
||||||
resp.content_location = req.relative_uri
|
resp.content_location = req.relative_uri
|
||||||
|
|
||||||
@ -252,7 +252,7 @@ class CollectionResource(object):
|
|||||||
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
description = 'Messages could not be deleted.'
|
description = _(u'Messages could not be deleted.')
|
||||||
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@ -267,11 +267,11 @@ class ItemResource(object):
|
|||||||
self.message_controller = message_controller
|
self.message_controller = message_controller
|
||||||
|
|
||||||
def on_get(self, req, resp, project_id, queue_name, message_id):
|
def on_get(self, req, resp, project_id, queue_name, message_id):
|
||||||
LOG.debug(_("Messages item GET - message: %(message)s, "
|
LOG.debug(_(u'Messages item GET - message: %(message)s, '
|
||||||
"queue: %(queue)s, project: %(project)s") %
|
u'queue: %(queue)s, project: %(project)s') %
|
||||||
{"message": message_id,
|
{'message': message_id,
|
||||||
"queue": queue_name,
|
'queue': queue_name,
|
||||||
"project": project_id})
|
'project': project_id})
|
||||||
try:
|
try:
|
||||||
message = self.message_controller.get(
|
message = self.message_controller.get(
|
||||||
queue_name,
|
queue_name,
|
||||||
@ -283,7 +283,7 @@ class ItemResource(object):
|
|||||||
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
description = _('Message could not be retrieved.')
|
description = _(u'Message could not be retrieved.')
|
||||||
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
||||||
|
|
||||||
# Prepare response
|
# Prepare response
|
||||||
@ -295,11 +295,11 @@ class ItemResource(object):
|
|||||||
resp.status = falcon.HTTP_200
|
resp.status = falcon.HTTP_200
|
||||||
|
|
||||||
def on_delete(self, req, resp, project_id, queue_name, message_id):
|
def on_delete(self, req, resp, project_id, queue_name, message_id):
|
||||||
LOG.debug(_("Messages item DELETE - message: %(message)s, "
|
LOG.debug(_(u'Messages item DELETE - message: %(message)s, '
|
||||||
"queue: %(queue)s, project: %(project)s") %
|
u'queue: %(queue)s, project: %(project)s') %
|
||||||
{"message": message_id,
|
{'message': message_id,
|
||||||
"queue": queue_name,
|
'queue': queue_name,
|
||||||
"project": project_id})
|
'project': project_id})
|
||||||
try:
|
try:
|
||||||
self.message_controller.delete(
|
self.message_controller.delete(
|
||||||
queue_name,
|
queue_name,
|
||||||
@ -309,13 +309,13 @@ class ItemResource(object):
|
|||||||
|
|
||||||
except storage_exceptions.NotPermitted as ex:
|
except storage_exceptions.NotPermitted as ex:
|
||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
title = _('Invalid claim')
|
title = _(u'Invalid claim')
|
||||||
description = _('The specified claim either does not '
|
description = _(u'The specified claim either does not '
|
||||||
'exist or has expired.')
|
u'exist or has expired.')
|
||||||
raise falcon.HTTPForbidden(title, description)
|
raise falcon.HTTPForbidden(title, description)
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
description = _('Message could not be deleted.')
|
description = _(u'Message could not be deleted.')
|
||||||
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
||||||
|
|
||||||
# Alles guete
|
# Alles guete
|
||||||
|
@ -36,9 +36,9 @@ class Resource(object):
|
|||||||
self.queue_ctrl = queue_controller
|
self.queue_ctrl = queue_controller
|
||||||
|
|
||||||
def on_get(self, req, resp, project_id, queue_name):
|
def on_get(self, req, resp, project_id, queue_name):
|
||||||
LOG.debug(_("Queue metadata GET - queue: %(queue)s, "
|
LOG.debug(_(u'Queue metadata GET - queue: %(queue)s, '
|
||||||
"project: %(project)s") %
|
u'project: %(project)s') %
|
||||||
{"queue": queue_name, "project": project_id})
|
{'queue': queue_name, 'project': project_id})
|
||||||
|
|
||||||
try:
|
try:
|
||||||
resp_dict = self.queue_ctrl.get_metadata(queue_name,
|
resp_dict = self.queue_ctrl.get_metadata(queue_name,
|
||||||
@ -49,7 +49,7 @@ class Resource(object):
|
|||||||
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
description = _('Queue metadata could not be retrieved.')
|
description = _(u'Queue metadata could not be retrieved.')
|
||||||
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
||||||
|
|
||||||
resp.content_location = req.path
|
resp.content_location = req.path
|
||||||
@ -57,13 +57,13 @@ class Resource(object):
|
|||||||
resp.status = falcon.HTTP_200
|
resp.status = falcon.HTTP_200
|
||||||
|
|
||||||
def on_put(self, req, resp, project_id, queue_name):
|
def on_put(self, req, resp, project_id, queue_name):
|
||||||
LOG.debug(_("Queue metadata PUT - queue: %(queue)s, "
|
LOG.debug(_(u'Queue metadata PUT - queue: %(queue)s, '
|
||||||
"project: %(project)s") %
|
u'project: %(project)s') %
|
||||||
{"queue": queue_name, "project": project_id})
|
{'queue': queue_name, 'project': project_id})
|
||||||
|
|
||||||
# Place JSON size restriction before parsing
|
# Place JSON size restriction before parsing
|
||||||
if req.content_length > CFG.metadata_max_length:
|
if req.content_length > CFG.metadata_max_length:
|
||||||
description = _('Queue metadata size is too large.')
|
description = _(u'Queue metadata size is too large.')
|
||||||
raise wsgi_exceptions.HTTPBadRequestBody(description)
|
raise wsgi_exceptions.HTTPBadRequestBody(description)
|
||||||
|
|
||||||
# Deserialize queue metadata
|
# Deserialize queue metadata
|
||||||
@ -81,7 +81,7 @@ class Resource(object):
|
|||||||
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
description = _('Metadata could not be updated.')
|
description = _(u'Metadata could not be updated.')
|
||||||
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
||||||
|
|
||||||
resp.status = falcon.HTTP_204
|
resp.status = falcon.HTTP_204
|
||||||
|
@ -34,9 +34,9 @@ class ItemResource(object):
|
|||||||
self.message_controller = message_controller
|
self.message_controller = message_controller
|
||||||
|
|
||||||
def on_put(self, req, resp, project_id, queue_name):
|
def on_put(self, req, resp, project_id, queue_name):
|
||||||
LOG.debug(_("Queue item PUT - queue: %(queue)s, "
|
LOG.debug(_(u'Queue item PUT - queue: %(queue)s, '
|
||||||
"project: %(project)s") %
|
u'project: %(project)s') %
|
||||||
{"queue": queue_name, "project": project_id})
|
{'queue': queue_name, 'project': project_id})
|
||||||
|
|
||||||
try:
|
try:
|
||||||
validation.queue_creation(name=queue_name)
|
validation.queue_creation(name=queue_name)
|
||||||
@ -49,16 +49,16 @@ class ItemResource(object):
|
|||||||
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
description = _('Queue could not be created.')
|
description = _(u'Queue could not be created.')
|
||||||
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
||||||
|
|
||||||
resp.status = falcon.HTTP_201 if created else falcon.HTTP_204
|
resp.status = falcon.HTTP_201 if created else falcon.HTTP_204
|
||||||
resp.location = req.path
|
resp.location = req.path
|
||||||
|
|
||||||
def on_head(self, req, resp, project_id, queue_name):
|
def on_head(self, req, resp, project_id, queue_name):
|
||||||
LOG.debug(_("Queue item exists - queue: %(queue)s, "
|
LOG.debug(_(u'Queue item exists - queue: %(queue)s, '
|
||||||
"project: %(project)s") %
|
'project: %(project)s') %
|
||||||
{"queue": queue_name, "project": project_id})
|
{'queue': queue_name, 'project': project_id})
|
||||||
|
|
||||||
if self.queue_controller.exists(queue_name,
|
if self.queue_controller.exists(queue_name,
|
||||||
project=project_id):
|
project=project_id):
|
||||||
@ -71,15 +71,15 @@ class ItemResource(object):
|
|||||||
on_get = on_head
|
on_get = on_head
|
||||||
|
|
||||||
def on_delete(self, req, resp, project_id, queue_name):
|
def on_delete(self, req, resp, project_id, queue_name):
|
||||||
LOG.debug(_("Queue item DELETE - queue: %(queue)s, "
|
LOG.debug(_(u'Queue item DELETE - queue: %(queue)s, '
|
||||||
"project: %(project)s") %
|
u'project: %(project)s') %
|
||||||
{"queue": queue_name, "project": project_id})
|
{'queue': queue_name, 'project': project_id})
|
||||||
try:
|
try:
|
||||||
self.queue_controller.delete(queue_name, project=project_id)
|
self.queue_controller.delete(queue_name, project=project_id)
|
||||||
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
description = _('Queue could not be deleted.')
|
description = _(u'Queue could not be deleted.')
|
||||||
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
||||||
|
|
||||||
resp.status = falcon.HTTP_204
|
resp.status = falcon.HTTP_204
|
||||||
@ -109,7 +109,7 @@ class CollectionResource(object):
|
|||||||
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
description = _('Queues could not be listed.')
|
description = _(u'Queues could not be listed.')
|
||||||
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
||||||
|
|
||||||
# Buffer list of queues
|
# Buffer list of queues
|
||||||
|
@ -58,5 +58,5 @@ class Resource(object):
|
|||||||
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
description = _('Queue stats could not be read.')
|
description = _(u'Queue stats could not be read.')
|
||||||
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
raise wsgi_exceptions.HTTPServiceUnavailable(description)
|
||||||
|
@ -56,7 +56,7 @@ def filter_stream(stream, len, spec=None, doctype=JSONObject):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if len is None:
|
if len is None:
|
||||||
description = _('Request body can not be empty')
|
description = _(u'Request body can not be empty')
|
||||||
raise exceptions.HTTPBadRequestBody(description)
|
raise exceptions.HTTPBadRequestBody(description)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -67,18 +67,18 @@ def filter_stream(stream, len, spec=None, doctype=JSONObject):
|
|||||||
|
|
||||||
except utils.MalformedJSON as ex:
|
except utils.MalformedJSON as ex:
|
||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
description = _('Request body could not be parsed.')
|
description = _(u'Request body could not be parsed.')
|
||||||
raise exceptions.HTTPBadRequestBody(description)
|
raise exceptions.HTTPBadRequestBody(description)
|
||||||
|
|
||||||
except utils.OverflowedJSONInteger as ex:
|
except utils.OverflowedJSONInteger as ex:
|
||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
description = _('JSON contains integer that is too large.')
|
description = _(u'JSON contains integer that is too large.')
|
||||||
raise exceptions.HTTPBadRequestBody(description)
|
raise exceptions.HTTPBadRequestBody(description)
|
||||||
|
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
# Error while reading from the network/server
|
# Error while reading from the network/server
|
||||||
LOG.exception(ex)
|
LOG.exception(ex)
|
||||||
description = _('Request body could not be read.')
|
description = _(u'Request body could not be read.')
|
||||||
raise exceptions.HTTPServiceUnavailable(description)
|
raise exceptions.HTTPServiceUnavailable(description)
|
||||||
|
|
||||||
if doctype is JSONObject:
|
if doctype is JSONObject:
|
||||||
@ -144,12 +144,12 @@ def get_checked_field(document, name, value_type):
|
|||||||
try:
|
try:
|
||||||
value = document[name]
|
value = document[name]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
description = _('Missing "{name}" field.').format(name=name)
|
description = _(u'Missing "{name}" field.').format(name=name)
|
||||||
raise exceptions.HTTPBadRequestBody(description)
|
raise exceptions.HTTPBadRequestBody(description)
|
||||||
|
|
||||||
if value_type == '*' or isinstance(value, value_type):
|
if value_type == '*' or isinstance(value, value_type):
|
||||||
return value
|
return value
|
||||||
|
|
||||||
description = _('The value of the "{name}" field must be a {vtype}.')
|
description = _(u'The value of the "{name}" field must be a {vtype}.')
|
||||||
description = description.format(name=name, vtype=value_type.__name__)
|
description = description.format(name=name, vtype=value_type.__name__)
|
||||||
raise exceptions.HTTPBadRequestBody(description)
|
raise exceptions.HTTPBadRequestBody(description)
|
||||||
|
Loading…
Reference in New Issue
Block a user