def testGetContentLength(self):
     headers = {"content-length": 69}
     self.assertEqual(69, common.get_stored_content_length(headers))
     headers = {"x-goog-stored-content-length": 75}
     self.assertEqual(75, common.get_stored_content_length(headers))
     headers = {"x-goog-stored-content-length": 75, "content-length": 69}
     self.assertEqual(75, common.get_stored_content_length(headers))
     headers = {"x-goog-stored-content-length": 0, "content-length": 69}
     self.assertEqual(0, common.get_stored_content_length(headers))
     headers = {"foo": 69}
     self.assertIsNone(common.get_stored_content_length(headers))
 def testGetContentLength(self):
     headers = {'content-length': 69}
     self.assertEqual(69, common.get_stored_content_length(headers))
     headers = {'x-goog-stored-content-length': 75}
     self.assertEqual(75, common.get_stored_content_length(headers))
     headers = {'x-goog-stored-content-length': 75, 'content-length': 69}
     self.assertEqual(75, common.get_stored_content_length(headers))
     headers = {'x-goog-stored-content-length': 0, 'content-length': 69}
     self.assertEqual(0, common.get_stored_content_length(headers))
     headers = {'foo': 69}
     self.assertIsNone(common.get_stored_content_length(headers))
Example #3
0
def stat(filename, retry_params=None, _account_id=None):
    """Get GCSFileStat of a Google Cloud storage file.

  Args:
    filename: A Google Cloud Storage filename of form '/bucket/filename'.
    retry_params: An api_utils.RetryParams for this call to GCS. If None,
      the default one is used.
    _account_id: Internal-use only.

  Returns:
    a GCSFileStat object containing info about this file.

  Raises:
    errors.AuthorizationError: if authorization failed.
    errors.NotFoundError: if an object that's expected to exist doesn't.
  """
    common.validate_file_path(filename)
    api = storage_api._get_storage_api(retry_params=retry_params,
                                       account_id=_account_id)
    status, headers, content = api.head_object(
        api_utils._quote_filename(filename))
    errors.check_status(status, [200],
                        filename,
                        resp_headers=headers,
                        body=content)
    file_stat = common.GCSFileStat(
        filename=filename,
        st_size=common.get_stored_content_length(headers),
        st_ctime=common.http_time_to_posix(headers.get('last-modified')),
        etag=headers.get('etag'),
        content_type=headers.get('content-type'),
        metadata=common.get_metadata(headers))

    return file_stat
def stat(filename, retry_params=None, _account_id=None):
  """Get GCSFileStat of a Google Cloud storage file.

  Args:
    filename: A Google Cloud Storage filename of form '/bucket/filename'.
    retry_params: An api_utils.RetryParams for this call to GCS. If None,
      the default one is used.
    _account_id: Internal-use only.

  Returns:
    a GCSFileStat object containing info about this file.

  Raises:
    errors.AuthorizationError: if authorization failed.
    errors.NotFoundError: if an object that's expected to exist doesn't.
  """
  common.validate_file_path(filename)
  api = storage_api._get_storage_api(retry_params=retry_params,
                                     account_id=_account_id)
  status, headers, content = api.head_object(
      api_utils._quote_filename(filename))
  errors.check_status(status, [200], filename, resp_headers=headers,
                      body=content)
  file_stat = common.GCSFileStat(
      filename=filename,
      st_size=common.get_stored_content_length(headers),
      st_ctime=common.http_time_to_posix(headers.get('last-modified')),
      etag=headers.get('etag'),
      content_type=headers.get('content-type'),
      metadata=common.get_metadata(headers))

  return file_stat
Example #5
0
    def __init__(self,
                 api,
                 path,
                 buffer_size=DEFAULT_BUFFER_SIZE,
                 max_request_size=MAX_REQUEST_SIZE):
        """Constructor.

    Args:
      api: A StorageApi instance.
      path: Quoted/escaped path to the object, e.g. /mybucket/myfile
      buffer_size: buffer size. The ReadBuffer keeps
        one buffer. But there may be a pending future that contains
        a second buffer. This size must be less than max_request_size.
      max_request_size: Max bytes to request in one urlfetch.
    """
        self._api = api
        self._path = path
        self.name = api_utils._unquote_filename(path)
        self.closed = False

        assert buffer_size <= max_request_size
        self._buffer_size = buffer_size
        self._max_request_size = max_request_size
        self._offset = 0
        self._buffer = _Buffer()
        self._etag = None

        get_future = self._get_segment(0,
                                       self._buffer_size,
                                       check_response=False)

        status, headers, content = self._api.head_object(path)
        errors.check_status(status, [200],
                            path,
                            resp_headers=headers,
                            body=content)
        self._file_size = long(common.get_stored_content_length(headers))
        self._check_etag(headers.get('etag'))

        self._buffer_future = None

        if self._file_size != 0:
            content, check_response_closure = get_future.get_result()
            check_response_closure()
            self._buffer.reset(content)
            self._request_next_buffer()
  def __init__(self,
               api,
               path,
               buffer_size=DEFAULT_BUFFER_SIZE,
               max_request_size=MAX_REQUEST_SIZE):
    """Constructor.

    Args:
      api: A StorageApi instance.
      path: Quoted/escaped path to the object, e.g. /mybucket/myfile
      buffer_size: buffer size. The ReadBuffer keeps
        one buffer. But there may be a pending future that contains
        a second buffer. This size must be less than max_request_size.
      max_request_size: Max bytes to request in one urlfetch.
    """
    self._api = api
    self._path = path
    self.name = api_utils._unquote_filename(path)
    self.closed = False

    assert buffer_size <= max_request_size
    self._buffer_size = buffer_size
    self._max_request_size = max_request_size
    self._offset = 0
    self._buffer = _Buffer()
    self._etag = None

    get_future = self._get_segment(0, self._buffer_size, check_response=False)

    status, headers, content = self._api.head_object(path)
    errors.check_status(status, [200], path, resp_headers=headers, body=content)
    self._file_size = long(common.get_stored_content_length(headers))
    self._check_etag(headers.get('etag'))

    self._buffer_future = None

    if self._file_size != 0:
      content, check_response_closure = get_future.get_result()
      check_response_closure()
      self._buffer.reset(content)
      self._request_next_buffer()