diff --git a/gcloud/storage/_helpers.py b/gcloud/storage/_helpers.py index 725f91ed5071..c65f4ecf02bd 100644 --- a/gcloud/storage/_helpers.py +++ b/gcloud/storage/_helpers.py @@ -49,15 +49,6 @@ def __init__(self, name=None): self._properties = {} self._changes = set() - @property - def properties(self): - """Return a copy of properties. - - :rtype: dict - :returns: Copy of properties. - """ - return self._properties.copy() - @property def batch(self): """Return a context manager which defers/batches updates. @@ -82,7 +73,7 @@ def batch(self): """ return _PropertyBatch(self) - def _reload_properties(self): + def reload(self): """Reload properties from Cloud Storage. :rtype: :class:`_PropertyMixin` @@ -155,7 +146,7 @@ def _scalar_property(fieldname): """ def _getter(self): """Scalar property getter.""" - return self.properties[fieldname] + return self._properties[fieldname] def _setter(self, value): """Scalar property setter.""" diff --git a/gcloud/storage/api.py b/gcloud/storage/api.py index 4783dcfa9763..e44a0d89778e 100644 --- a/gcloud/storage/api.py +++ b/gcloud/storage/api.py @@ -126,7 +126,7 @@ def get_bucket(bucket_name, connection=None): connection = get_default_connection() bucket = Bucket(bucket_name, connection=connection) - bucket._reload_properties() + bucket.reload() return bucket diff --git a/gcloud/storage/blob.py b/gcloud/storage/blob.py index ed8491474a5f..8bc66f235f7c 100644 --- a/gcloud/storage/blob.py +++ b/gcloud/storage/blob.py @@ -250,7 +250,7 @@ def download_to_filename(self, filename): mtime = time.mktime( datetime.datetime.strptime( - self.properties['updated'], + self._properties['updated'], '%Y-%m-%dT%H:%M:%S.%fz').timetuple() ) os.utime(file_obj.name, (mtime, mtime)) @@ -489,7 +489,7 @@ def component_count(self): :rtype: integer """ - return self.properties['componentCount'] + return self._properties['componentCount'] @property def etag(self): @@ -500,7 +500,7 @@ def etag(self): :rtype: string """ - return self.properties['etag'] + return self._properties['etag'] @property def generation(self): @@ -510,7 +510,7 @@ def generation(self): :rtype: integer """ - return self.properties['generation'] + return self._properties['generation'] @property def id(self): @@ -520,7 +520,7 @@ def id(self): :rtype: string """ - return self.properties['id'] + return self._properties['id'] md5_hash = _scalar_property('md5Hash') """MD5 hash for this object. @@ -539,7 +539,7 @@ def media_link(self): :rtype: string """ - return self.properties['mediaLink'] + return self._properties['mediaLink'] @property def metadata(self): @@ -549,7 +549,7 @@ def metadata(self): :rtype: dict """ - return copy.deepcopy(self.properties['metadata']) + return copy.deepcopy(self._properties['metadata']) @metadata.setter def metadata(self, value): @@ -569,7 +569,7 @@ def metageneration(self): :rtype: integer """ - return self.properties['metageneration'] + return self._properties['metageneration'] @property def owner(self): @@ -580,7 +580,7 @@ def owner(self): :rtype: dict :returns: mapping of owner's role/ID. """ - return self.properties['owner'].copy() + return self._properties['owner'].copy() @property def self_link(self): @@ -590,7 +590,7 @@ def self_link(self): :rtype: string """ - return self.properties['selfLink'] + return self._properties['selfLink'] @property def size(self): @@ -600,7 +600,7 @@ def size(self): :rtype: integer """ - return self.properties['size'] + return self._properties['size'] @property def storage_class(self): @@ -612,7 +612,7 @@ def storage_class(self): :rtype: string :returns: Currently one of "STANDARD", "DURABLE_REDUCED_AVAILABILITY" """ - return self.properties['storageClass'] + return self._properties['storageClass'] @property def time_deleted(self): @@ -624,7 +624,7 @@ def time_deleted(self): :returns: timestamp in RFC 3339 format, or None if the object has a "live" version. """ - return self.properties.get('timeDeleted') + return self._properties.get('timeDeleted') @property def updated(self): @@ -635,7 +635,7 @@ def updated(self): :rtype: string :returns: timestamp in RFC 3339 format. """ - return self.properties['updated'] + return self._properties['updated'] class _UploadConfig(object): diff --git a/gcloud/storage/bucket.py b/gcloud/storage/bucket.py index d51225885724..5efd62c115a6 100644 --- a/gcloud/storage/bucket.py +++ b/gcloud/storage/bucket.py @@ -463,7 +463,7 @@ def cors(self): :returns: A sequence of mappings describing each CORS policy. """ return [copy.deepcopy(policy) - for policy in self.properties.get('cors', ())] + for policy in self._properties.get('cors', ())] @cors.setter def cors(self, entries): @@ -499,7 +499,7 @@ def etag(self): :rtype: string """ - return self.properties['etag'] + return self._properties['etag'] @property def id(self): @@ -509,7 +509,7 @@ def id(self): :rtype: string """ - return self.properties['id'] + return self._properties['id'] @property def lifecycle_rules(self): @@ -554,8 +554,8 @@ def get_logging(self): :returns: a dict w/ keys, ``logBucket`` and ``logObjectPrefix`` (if logging is enabled), or None (if not). """ - self._reload_properties() - info = self.properties.get('logging') + self.reload() + info = self._properties.get('logging') if info is not None: return info.copy() @@ -590,7 +590,7 @@ def metageneration(self): :rtype: integer """ - return self.properties['metageneration'] + return self._properties['metageneration'] @property def owner(self): @@ -601,7 +601,7 @@ def owner(self): :rtype: dict :returns: mapping of owner's role/ID. """ - return self.properties['owner'].copy() + return self._properties['owner'].copy() @property def project_number(self): @@ -611,7 +611,7 @@ def project_number(self): :rtype: integer """ - return self.properties['projectNumber'] + return self._properties['projectNumber'] @property def self_link(self): @@ -621,7 +621,7 @@ def self_link(self): :rtype: string """ - return self.properties['selfLink'] + return self._properties['selfLink'] @property def storage_class(self): @@ -633,7 +633,7 @@ def storage_class(self): :rtype: string :returns: Currently one of "STANDARD", "DURABLE_REDUCED_AVAILABILITY" """ - return self.properties['storageClass'] + return self._properties['storageClass'] @property def time_created(self): @@ -644,7 +644,7 @@ def time_created(self): :rtype: string :returns: timestamp in RFC 3339 format. """ - return self.properties['timeCreated'] + return self._properties['timeCreated'] @property def versioning_enabled(self): @@ -656,7 +656,7 @@ def versioning_enabled(self): :rtype: boolean :returns: True if enabled, else False. """ - versioning = self.properties.get('versioning', {}) + versioning = self._properties.get('versioning', {}) return versioning.get('enabled', False) @versioning_enabled.setter diff --git a/gcloud/storage/test__helpers.py b/gcloud/storage/test__helpers.py index fd30d35f32a0..52fab616b149 100644 --- a/gcloud/storage/test__helpers.py +++ b/gcloud/storage/test__helpers.py @@ -60,22 +60,10 @@ def test_batch(self): self.assertEqual(kw[0]['data'], {'foo': 'Qux', 'bar': 'Baz'}) self.assertEqual(kw[0]['query_params'], {'projection': 'full'}) - def test_properties_no_fetch(self): + def test_reload(self): connection = _Connection({'foo': 'Foo'}) derived = self._derivedClass(connection, '/path')() - self.assertEqual(derived.properties, {}) - derived._reload_properties() - self.assertEqual(derived.properties, {'foo': 'Foo'}) - kw = connection._requested - self.assertEqual(len(kw), 1) - self.assertEqual(kw[0]['method'], 'GET') - self.assertEqual(kw[0]['path'], '/path') - self.assertEqual(kw[0]['query_params'], {'projection': 'noAcl'}) - - def test__reload_properties(self): - connection = _Connection({'foo': 'Foo'}) - derived = self._derivedClass(connection, '/path')() - derived._reload_properties() + derived.reload() self.assertEqual(derived._properties, {'foo': 'Foo'}) kw = connection._requested self.assertEqual(len(kw), 1) @@ -175,7 +163,7 @@ def test_getter(self): class Test(object): def __init__(self, **kw): - self.properties = kw.copy() + self._properties = kw.copy() do_re_mi = self._callFUT('solfege') test = Test(solfege='Latido') diff --git a/gcloud/storage/test_blob.py b/gcloud/storage/test_blob.py index a9f05119c06e..f28bdfafab75 100644 --- a/gcloud/storage/test_blob.py +++ b/gcloud/storage/test_blob.py @@ -65,7 +65,7 @@ def test_ctor_explicit(self): self.assertTrue(blob.bucket is bucket) self.assertTrue(blob.connection is connection) self.assertEqual(blob.name, BLOB_NAME) - self.assertEqual(blob.properties, properties) + self.assertEqual(blob._properties, properties) self.assertFalse(blob._acl.loaded) self.assertTrue(blob._acl.blob is blob) @@ -294,7 +294,7 @@ def test_download_to_filename(self): mtime = os.path.getmtime(f.name) updatedTime = time.mktime( datetime.datetime.strptime( - blob.properties['updated'], + blob._properties['updated'], '%Y-%m-%dT%H:%M:%S.%fz').timetuple() ) self.assertEqual(wrote, b'abcdef') diff --git a/gcloud/storage/test_bucket.py b/gcloud/storage/test_bucket.py index 0dfe8670be28..3257ee9c0b79 100644 --- a/gcloud/storage/test_bucket.py +++ b/gcloud/storage/test_bucket.py @@ -846,7 +846,7 @@ def test_versioning_enabled_getter_missing(self): NAME = 'name' connection = _Connection({}) bucket = self._makeOne(NAME, connection) - bucket._reload_properties() + bucket.reload() self.assertEqual(bucket.versioning_enabled, False) kw = connection._requested self.assertEqual(len(kw), 1) @@ -887,7 +887,7 @@ def test_configure_website_defaults(self): bucket = self._makeOne(NAME, connection) bucket.configure_website() bucket.patch() - self.assertEqual(bucket.properties, patched) + self.assertEqual(bucket._properties, patched) kw = connection._requested self.assertEqual(len(kw), 1) self.assertEqual(kw[0]['method'], 'PATCH') @@ -903,7 +903,7 @@ def test_configure_website_explicit(self): bucket = self._makeOne(NAME, connection) bucket.configure_website('html', '404.html') bucket.patch() - self.assertEqual(bucket.properties, patched) + self.assertEqual(bucket._properties, patched) kw = connection._requested self.assertEqual(len(kw), 1) self.assertEqual(kw[0]['method'], 'PATCH') @@ -919,7 +919,7 @@ def test_disable_website(self): bucket = self._makeOne(NAME, connection) bucket.disable_website() bucket.patch() - self.assertEqual(bucket.properties, patched) + self.assertEqual(bucket._properties, patched) kw = connection._requested self.assertEqual(len(kw), 1) self.assertEqual(kw[0]['method'], 'PATCH') diff --git a/regression/storage.py b/regression/storage.py index 9d9a7f585514..7c6a1ecdea2c 100644 --- a/regression/storage.py +++ b/regression/storage.py @@ -157,7 +157,7 @@ def test_direct_write_and_read_into_file(self): self.case_blobs_to_delete.append(blob) same_blob = storage.Blob(bucket=self.bucket, name='MyBuffer') - same_blob._reload_properties() # Initialize properties. + same_blob.reload() # Initialize properties. temp_filename = tempfile.mktemp() with open(temp_filename, 'wb') as file_obj: same_blob.download_to_file(file_obj)