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))
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 __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()