in gslib/gcs_json_api.py [0:0]
def _TranslateApitoolsException(self,
e,
bucket_name=None,
object_name=None,
generation=None,
not_found_exception=None):
"""Translates apitools exceptions into their gsutil Cloud Api equivalents.
Args:
e: Any exception in TRANSLATABLE_APITOOLS_EXCEPTIONS.
bucket_name: Optional bucket name in request that caused the exception.
object_name: Optional object name in request that caused the exception.
generation: Optional generation in request that caused the exception.
not_found_exception: Optional exception to raise in the not-found case.
Returns:
ServiceException for translatable exceptions, None
otherwise.
"""
if isinstance(e, apitools_exceptions.HttpError):
message = self._GetMessageFromHttpError(e)
if e.status_code == 400:
# It is possible that the Project ID is incorrect. Unfortunately the
# JSON API does not give us much information about what part of the
# request was bad.
return BadRequestException(message or 'Bad Request',
status=e.status_code)
elif e.status_code == 401:
if 'Login Required' in str(e):
return AccessDeniedException(message or
'Access denied: login required.',
status=e.status_code)
elif 'insufficient_scope' in str(e):
# If the service includes insufficient scope error detail in the
# response body, this check can be removed.
return AccessDeniedException(
_INSUFFICIENT_OAUTH2_SCOPE_MESSAGE,
status=e.status_code,
body=self._GetAcceptableScopesFromHttpError(e))
elif e.status_code == 403:
if 'The account for the specified project has been disabled' in str(e):
return AccessDeniedException(message or 'Account disabled.',
status=e.status_code)
elif 'Daily Limit for Unauthenticated Use Exceeded' in str(e):
return AccessDeniedException(message or
'Access denied: quota exceeded. '
'Is your project ID valid?',
status=e.status_code)
elif 'The bucket you tried to delete was not empty.' in str(e):
return NotEmptyException('BucketNotEmpty (%s)' % bucket_name,
status=e.status_code)
elif ('The bucket you tried to create requires domain ownership '
'verification.' in str(e)):
return AccessDeniedException(
'The bucket you tried to create requires domain ownership '
'verification. Please see '
'https://cloud.google.com/storage/docs/naming'
'?hl=en#verification for more details.',
status=e.status_code)
elif 'User Rate Limit Exceeded' in str(e):
return AccessDeniedException(
'Rate limit exceeded. Please retry this '
'request later.',
status=e.status_code)
elif 'Access Not Configured' in str(e):
return AccessDeniedException(
'Access Not Configured. Please go to the Google Cloud Platform '
'Console (https://cloud.google.com/console#/project) for your '
'project, select APIs and Auth and enable the '
'Google Cloud Storage JSON API.',
status=e.status_code)
elif 'insufficient_scope' in str(e):
# If the service includes insufficient scope error detail in the
# response body, this check can be removed.
return AccessDeniedException(
_INSUFFICIENT_OAUTH2_SCOPE_MESSAGE,
status=e.status_code,
body=self._GetAcceptableScopesFromHttpError(e))
elif 'does not have permission to publish messages' in str(e):
return PublishPermissionDeniedException(message, status=e.status_code)
else:
return AccessDeniedException(message or str(e), status=e.status_code)
elif e.status_code == 404:
if not_found_exception:
# The exception is pre-constructed prior to translation; the HTTP
# status code isn't available at that time.
setattr(not_found_exception, 'status', e.status_code)
return not_found_exception
elif bucket_name:
if object_name:
return CreateObjectNotFoundException(e.status_code,
self.provider,
bucket_name,
object_name,
generation=generation)
return CreateBucketNotFoundException(e.status_code, self.provider,
bucket_name)
return NotFoundException(message or e.message, status=e.status_code)
elif e.status_code == 409 and bucket_name:
if 'The bucket you tried to delete is not empty.' in str(e):
return NotEmptyException('BucketNotEmpty (%s)' % bucket_name,
status=e.status_code)
return ServiceException(
'A Cloud Storage bucket named \'%s\' already exists. Try another '
'name. Bucket names must be globally unique across all Google Cloud '
'projects, including those outside of your '
'organization.' % bucket_name,
status=e.status_code)
elif e.status_code == 412:
return PreconditionException(message, status=e.status_code)
return ServiceException(message, status=e.status_code)
elif isinstance(e, apitools_exceptions.TransferInvalidError):
return ServiceException('Transfer invalid (possible encoding error: %s)' %
str(e))