From 1823b0fb21785625e53e7611582803c540731a91 Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Fri, 26 Sep 2014 14:23:42 -0400 Subject: [PATCH 1/2] Fix issue # in test comment. --- gcloud/storage/test_bucket.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/gcloud/storage/test_bucket.py b/gcloud/storage/test_bucket.py index fa5f0e9e5b14..15cc91d13ccc 100644 --- a/gcloud/storage/test_bucket.py +++ b/gcloud/storage/test_bucket.py @@ -648,7 +648,7 @@ def test_save_default_object_acl_existing_set_new_passed(self): bucket = self._makeOne(connection, NAME, metadata) bucket.reload_default_object_acl() self.assertTrue(bucket.save_default_object_acl(new_acl) is bucket) - # See: https://github.com/GoogleCloudPlatform/gcloud-python/issues/138 + # See: https://github.com/GoogleCloudPlatform/gcloud-python/issues/139 #self.assertEqual(list(bucket.default_object_acl), new_acl) kw = connection._requested self.assertEqual(len(kw), 1) @@ -666,14 +666,12 @@ def test_clear_default_object_acl(self): bucket = self._makeOne(connection, NAME, metadata) bucket.reload_default_object_acl() self.assertTrue(bucket.clear_default_object_acl() is bucket) - # See: https://github.com/GoogleCloudPlatform/gcloud-python/issues/138 + # See: https://github.com/GoogleCloudPlatform/gcloud-python/issues/139 #self.assertEqual(list(bucket.default_object_acl), []) kw = connection._requested self.assertEqual(len(kw), 1) self.assertEqual(kw[0]['method'], 'PATCH') self.assertEqual(kw[0]['path'], '/b/%s' % NAME) - # See: https://github.com/GoogleCloudPlatform/gcloud-python/issues/139 - #self.assertEqual(list(bucket.default_object_acl), []) #self.assertEqual(kw[0]['data'], {'defaultObjectAcl': []}) self.assertEqual(kw[0]['query_params'], {'projection': 'full'}) From e19cf86ca3e6361aa3df20cbac2c9d2af6feb0c7 Mon Sep 17 00:00:00 2001 From: Tres Seaver Date: Fri, 26 Sep 2014 14:47:07 -0400 Subject: [PATCH 2/2] Fix #139: clear existing (local) ACL when saving defaultObjectACL to server. --- gcloud/storage/bucket.py | 7 +++++-- gcloud/storage/test_bucket.py | 37 +++++++++++++++++++++++++---------- 2 files changed, 32 insertions(+), 12 deletions(-) diff --git a/gcloud/storage/bucket.py b/gcloud/storage/bucket.py index 37691396db5e..3b02ea13537a 100644 --- a/gcloud/storage/bucket.py +++ b/gcloud/storage/bucket.py @@ -517,12 +517,15 @@ def save_default_object_acl(self, acl=None): and save that. """ - acl = acl or self.default_object_acl + if acl is None: + acl = self.default_object_acl if acl is None: return self - return self.patch_metadata({'defaultObjectAcl': list(acl)}) + self.patch_metadata({'defaultObjectAcl': list(acl)}) + self.reload_default_object_acl() + return self def clear_default_object_acl(self): """Remove the Default Object ACL from this bucket.""" diff --git a/gcloud/storage/test_bucket.py b/gcloud/storage/test_bucket.py index 15cc91d13ccc..b602e14e7536 100644 --- a/gcloud/storage/test_bucket.py +++ b/gcloud/storage/test_bucket.py @@ -628,52 +628,69 @@ def test_save_default_object_acl_none_set_none_passed(self): def test_save_default_object_acl_existing_set_none_passed(self): NAME = 'name' connection = _Connection({'foo': 'Foo', 'acl': []}) + connection = _Connection({'foo': 'Foo', 'acl': []}, + {'foo': 'Foo', 'acl': [], + 'defaultObjectAcl': []}, + ) metadata = {'defaultObjectAcl': []} bucket = self._makeOne(connection, NAME, metadata) bucket.reload_default_object_acl() self.assertTrue(bucket.save_default_object_acl() is bucket) kw = connection._requested - self.assertEqual(len(kw), 1) + self.assertEqual(len(kw), 2) self.assertEqual(kw[0]['method'], 'PATCH') self.assertEqual(kw[0]['path'], '/b/%s' % NAME) self.assertEqual(kw[0]['data'], metadata) self.assertEqual(kw[0]['query_params'], {'projection': 'full'}) + self.assertEqual(kw[1]['method'], 'GET') + self.assertEqual(kw[1]['path'], '/b/%s' % NAME) + self.assertEqual(kw[1]['query_params'], {'projection': 'full'}) def test_save_default_object_acl_existing_set_new_passed(self): NAME = 'name' ROLE = 'role' new_acl = [{'entity': 'allUsers', 'role': ROLE}] - connection = _Connection({'foo': 'Foo', 'acl': new_acl}) + connection = _Connection({'foo': 'Foo', 'acl': new_acl}, + {'foo': 'Foo', 'acl': new_acl, + 'defaultObjectAcl': new_acl}, + ) metadata = {'defaultObjectAcl': []} bucket = self._makeOne(connection, NAME, metadata) bucket.reload_default_object_acl() self.assertTrue(bucket.save_default_object_acl(new_acl) is bucket) - # See: https://github.com/GoogleCloudPlatform/gcloud-python/issues/139 - #self.assertEqual(list(bucket.default_object_acl), new_acl) + self.assertEqual(list(bucket.default_object_acl), new_acl) kw = connection._requested - self.assertEqual(len(kw), 1) + self.assertEqual(len(kw), 2) self.assertEqual(kw[0]['method'], 'PATCH') self.assertEqual(kw[0]['path'], '/b/%s' % NAME) self.assertEqual(kw[0]['data'], {'defaultObjectAcl': new_acl}) self.assertEqual(kw[0]['query_params'], {'projection': 'full'}) + self.assertEqual(kw[1]['method'], 'GET') + self.assertEqual(kw[1]['path'], '/b/%s' % NAME) + self.assertEqual(kw[1]['query_params'], {'projection': 'full'}) def test_clear_default_object_acl(self): NAME = 'name' ROLE = 'role' old_acl = [{'entity': 'allUsers', 'role': ROLE}] - connection = _Connection({'foo': 'Foo', 'acl': []}) + connection = _Connection({'foo': 'Foo', 'acl': []}, + {'foo': 'Foo', 'acl': [], + 'defaultObjectAcl': []}, + ) metadata = {'defaultObjectAcl': old_acl} bucket = self._makeOne(connection, NAME, metadata) bucket.reload_default_object_acl() self.assertTrue(bucket.clear_default_object_acl() is bucket) - # See: https://github.com/GoogleCloudPlatform/gcloud-python/issues/139 - #self.assertEqual(list(bucket.default_object_acl), []) + self.assertEqual(list(bucket.default_object_acl), []) kw = connection._requested - self.assertEqual(len(kw), 1) + self.assertEqual(len(kw), 2) self.assertEqual(kw[0]['method'], 'PATCH') self.assertEqual(kw[0]['path'], '/b/%s' % NAME) - #self.assertEqual(kw[0]['data'], {'defaultObjectAcl': []}) + self.assertEqual(kw[0]['data'], {'defaultObjectAcl': []}) self.assertEqual(kw[0]['query_params'], {'projection': 'full'}) + self.assertEqual(kw[1]['method'], 'GET') + self.assertEqual(kw[1]['path'], '/b/%s' % NAME) + self.assertEqual(kw[1]['query_params'], {'projection': 'full'}) def test_make_public_defaults(self): from gcloud.storage.acl import ACL