Пример #1
0
  def get_object_metadata(self, request):
    r"""Retrieves an object's metadata.

    Args:
      request: (GetRequest) input message

    Returns:
      (Object) The response message.
    """
    kwargs = {'Bucket': request.bucket, 'Key': request.object}

    try:
      boto_response = self.client.head_object(**kwargs)
    except Exception as e:
      message = e.response['Error']['Message']
      code = e.response['ResponseMetadata']['HTTPStatusCode']
      raise messages.S3ClientError(message, code)

    item = messages.Item(
        boto_response['ETag'],
        request.object,
        boto_response['LastModified'],
        boto_response['ContentLength'],
        boto_response['ContentType'])

    return item
Пример #2
0
    def get_metadata(self):
        last_modified_datetime = None
        if self.last_modified:
            last_modified_datetime = datetime.datetime.utcfromtimestamp(
                self.last_modified)

        return messages.Item(self.etag,
                             self.key,
                             last_modified_datetime,
                             len(self.contents),
                             mime_type=None)
Пример #3
0
    def list(self, request):
        r"""Retrieves a list of objects matching the criteria.

    Args:
      request: (ListRequest) input message
    Returns:
      (ListResponse) The response message.
    """
        kwargs = {'Bucket': request.bucket, 'Prefix': request.prefix}

        if request.continuation_token is not None:
            kwargs['ContinuationToken'] = request.continuation_token

        try:
            boto_response = self.client.list_objects_v2(**kwargs)
        except Exception as e:
            message = e.response['Error']['Message']
            code = e.response['ResponseMetadata']['HTTPStatusCode']
            raise messages.S3ClientError(message, code)

        if boto_response['KeyCount'] == 0:
            message = 'Tried to list nonexistent S3 path: s3://%s/%s' % (
                request.bucket, request.prefix)
            raise messages.S3ClientError(message, 404)

        items = [
            messages.Item(etag=content['ETag'],
                          key=content['Key'],
                          last_modified=content['LastModified'],
                          size=content['Size'])
            for content in boto_response['Contents']
        ]

        try:
            next_token = boto_response['NextContinuationToken']
        except KeyError:
            next_token = None

        response = messages.ListResponse(items, next_token)
        return response
Пример #4
0
    def get_object_metadata(self, request):
        """Retrieves an object's metadata.

    Args:
      request: (GetRequest) input message

    Returns:
      (Object) The response message.
    """
        kwargs = {'Bucket': request.bucket, 'Key': request.object}

        try:
            boto_response = self.client.head_object(**kwargs)
        except Exception as e:
            raise messages.S3ClientError(str(e), get_http_error_code(e))

        item = messages.Item(boto_response['ETag'], request.object,
                             boto_response['LastModified'],
                             boto_response['ContentLength'],
                             boto_response['ContentType'])

        return item