Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 3 additions & 14 deletions gcloud/storage/bucket.py
Original file line number Diff line number Diff line change
Expand Up @@ -477,19 +477,6 @@ def cors(self, entries):
"""
self._patch_properties({'cors': entries})

def get_default_object_acl(self):
"""Get the current Default Object ACL rules.

If the acl isn't available locally, this method will reload it from
Cloud Storage.

:rtype: :class:`gcloud.storage.acl.DefaultObjectACL`
:returns: A DefaultObjectACL object for this bucket.
"""
if not self.default_object_acl.loaded:
self.default_object_acl.reload()
return self.default_object_acl

@property
def etag(self):
"""Retrieve the ETag for the bucket.
Expand Down Expand Up @@ -737,7 +724,9 @@ def make_public(self, recursive=False, future=False):
self.acl.save()

if future:
doa = self.get_default_object_acl()
doa = self.default_object_acl
if not doa.loaded:
doa.reload()

This comment was marked as spam.

This comment was marked as spam.

doa.all().grant_read()
doa.save()

Expand Down
57 changes: 25 additions & 32 deletions gcloud/storage/test_bucket.py
Original file line number Diff line number Diff line change
Expand Up @@ -568,30 +568,6 @@ def upload_from_file(self, fh):
self.assertEqual(found._name, BLOB_NAME)
self.assertTrue(found._bucket is bucket)

def test_get_default_object_acl_lazy(self):
from gcloud.storage.acl import BucketACL
NAME = 'name'
connection = _Connection({'items': []})
bucket = self._makeOne(NAME, connection)
acl = bucket.get_default_object_acl()
self.assertTrue(acl is bucket.default_object_acl)
self.assertTrue(isinstance(acl, BucketACL))
self.assertEqual(list(bucket.default_object_acl), [])
kw = connection._requested
self.assertEqual(len(kw), 1)
self.assertEqual(kw[0]['method'], 'GET')
self.assertEqual(kw[0]['path'], '/b/%s/defaultObjectAcl' % NAME)

def test_get_default_object_acl_eager(self):
connection = _Connection()
bucket = self._makeOne()
preset = bucket.default_object_acl # ensure it is assigned
preset.loaded = True
acl = bucket.get_default_object_acl()
self.assertTrue(acl is preset)
kw = connection._requested
self.assertEqual(len(kw), 0)

def test_etag(self):
ETAG = 'ETAG'
properties = {'etag': ETAG}
Expand Down Expand Up @@ -943,29 +919,46 @@ def test_make_public_defaults(self):
self.assertEqual(kw[0]['data'], {'acl': after['acl']})
self.assertEqual(kw[0]['query_params'], {'projection': 'full'})

def test_make_public_w_future(self):
def _make_public_w_future_helper(self, default_object_acl_loaded=True):
from gcloud.storage.acl import _ACLEntity
NAME = 'name'
permissive = [{'entity': 'allUsers', 'role': _ACLEntity.READER_ROLE}]
after1 = {'acl': permissive, 'defaultObjectAcl': []}
after2 = {'acl': permissive, 'defaultObjectAcl': permissive}
connection = _Connection(after1, after2)
if default_object_acl_loaded:
num_requests = 2
connection = _Connection(after1, after2)
else:
num_requests = 3
# We return the same value for default_object_acl.reload()
# to consume.
connection = _Connection(after1, after1, after2)
bucket = self._makeOne(NAME, connection)
bucket.acl.loaded = True
bucket.default_object_acl.loaded = True
bucket.default_object_acl.loaded = default_object_acl_loaded
bucket.make_public(future=True)
self.assertEqual(list(bucket.acl), permissive)
self.assertEqual(list(bucket.default_object_acl), permissive)
kw = connection._requested
self.assertEqual(len(kw), 2)
self.assertEqual(len(kw), num_requests)
self.assertEqual(kw[0]['method'], 'PATCH')
self.assertEqual(kw[0]['path'], '/b/%s' % NAME)
self.assertEqual(kw[0]['data'], {'acl': permissive})
self.assertEqual(kw[0]['query_params'], {'projection': 'full'})
self.assertEqual(kw[1]['method'], 'PATCH')
self.assertEqual(kw[1]['path'], '/b/%s' % NAME)
self.assertEqual(kw[1]['data'], {'defaultObjectAcl': permissive})
self.assertEqual(kw[1]['query_params'], {'projection': 'full'})
if not default_object_acl_loaded:
self.assertEqual(kw[1]['method'], 'GET')
self.assertEqual(kw[1]['path'], '/b/%s/defaultObjectAcl' % NAME)
# Last could be 1 or 2 depending on `default_object_acl_loaded`.
self.assertEqual(kw[-1]['method'], 'PATCH')
self.assertEqual(kw[-1]['path'], '/b/%s' % NAME)
self.assertEqual(kw[-1]['data'], {'defaultObjectAcl': permissive})
self.assertEqual(kw[-1]['query_params'], {'projection': 'full'})

def test_make_public_w_future(self):
self._make_public_w_future_helper(default_object_acl_loaded=True)

def test_make_public_w_future_reload_default(self):
self._make_public_w_future_helper(default_object_acl_loaded=False)

def test_make_public_recursive(self):
from gcloud.storage.acl import _ACLEntity
Expand Down