Skip to content

Commit c5c9246

Browse files
committed
Drop support for fetching ACLs through 'metadata' operations.
We have separate APIs for ACLs, and the 'full' option was needlessly complex, maybe even expensive.
1 parent ccf2a96 commit c5c9246

File tree

4 files changed

+45
-80
lines changed

4 files changed

+45
-80
lines changed

gcloud/storage/bucket.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -322,17 +322,13 @@ def has_metadata(self, field=None):
322322
else:
323323
return True
324324

325-
def reload_metadata(self, full=False):
325+
def reload_metadata(self):
326326
"""Reload metadata from Cloud Storage.
327327
328-
:type full: bool
329-
:param full: If True, loads all data (include ACL data).
330-
331328
:rtype: :class:`Bucket`
332329
:returns: The bucket you just reloaded data for.
333330
"""
334-
projection = 'full' if full else 'noAcl'
335-
query_params = {'projection': projection}
331+
query_params = {'projection': 'noAcl'}
336332
self.metadata = self.connection.api_request(
337333
method='GET', path=self.path, query_params=query_params)
338334
return self
@@ -353,9 +349,11 @@ def get_metadata(self, field=None, default=None):
353349
:rtype: dict or anything
354350
:returns: All metadata or the value of the specific field.
355351
"""
352+
if field in ('acl', 'defaultObjectAcl'):
353+
return default
354+
356355
if not self.has_metadata(field=field):
357-
full = (field and field in ('acl', 'defaultObjectAcl'))
358-
self.reload_metadata(full=full)
356+
self.reload_metadata()
359357

360358
if field:
361359
return self.metadata.get(field, default)

gcloud/storage/key.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -315,17 +315,13 @@ def has_metadata(self, field=None):
315315
else:
316316
return True
317317

318-
def reload_metadata(self, full=False):
318+
def reload_metadata(self):
319319
"""Reload metadata from Cloud Storage.
320320
321-
:type full: bool
322-
:param full: If True, loads all data (include ACL data).
323-
324321
:rtype: :class:`Key`
325322
:returns: The key you just reloaded data for.
326323
"""
327-
projection = 'full' if full else 'noAcl'
328-
query_params = {'projection': projection}
324+
query_params = {'projection': 'noAcl'}
329325
self.metadata = self.connection.api_request(
330326
method='GET', path=self.path, query_params=query_params)
331327
return self
@@ -346,9 +342,11 @@ def get_metadata(self, field=None, default=None):
346342
:rtype: dict or anything
347343
:returns: All metadata or the value of the specific field.
348344
"""
345+
if field == 'acl':
346+
return default
347+
349348
if not self.has_metadata(field=field):
350-
full = (field and field == 'acl')
351-
self.reload_metadata(full=full)
349+
self.reload_metadata()
352350

353351
if field:
354352
return self.metadata.get(field, default)

gcloud/storage/test_bucket.py

Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,7 @@ def test_has_metdata_hit(self):
409409
bucket = self._makeOne(metadata=metadata)
410410
self.assertTrue(bucket.has_metadata(KEY))
411411

412-
def test_reload_metadata_default(self):
412+
def test_reload_metadata(self):
413413
NAME = 'name'
414414
before = {'foo': 'Foo'}
415415
after = {'bar': 'Bar'}
@@ -424,21 +424,6 @@ def test_reload_metadata_default(self):
424424
self.assertEqual(kw[0]['path'], '/b/%s' % NAME)
425425
self.assertEqual(kw[0]['query_params'], {'projection': 'noAcl'})
426426

427-
def test_reload_metadata_explicit(self):
428-
NAME = 'name'
429-
before = {'foo': 'Foo'}
430-
after = {'bar': 'Bar'}
431-
connection = _Connection(after)
432-
bucket = self._makeOne(connection, NAME, before)
433-
found = bucket.reload_metadata(True)
434-
self.assertTrue(found is bucket)
435-
self.assertEqual(found.metadata, after)
436-
kw = connection._requested
437-
self.assertEqual(len(kw), 1)
438-
self.assertEqual(kw[0]['method'], 'GET')
439-
self.assertEqual(kw[0]['path'], '/b/%s' % NAME)
440-
self.assertEqual(kw[0]['query_params'], {'projection': 'full'})
441-
442427
def test_get_metadata_none_set_none_passed(self):
443428
NAME = 'name'
444429
after = {'bar': 'Bar'}
@@ -453,34 +438,43 @@ def test_get_metadata_none_set_none_passed(self):
453438
self.assertEqual(kw[0]['path'], '/b/%s' % NAME)
454439
self.assertEqual(kw[0]['query_params'], {'projection': 'noAcl'})
455440

456-
def test_get_metadata_none_set_acl_hit(self):
441+
def test_get_metadata_acl_no_default(self):
457442
NAME = 'name'
458-
after = {'bar': 'Bar', 'acl': []}
459-
connection = _Connection(after)
443+
connection = _Connection()
460444
bucket = self._makeOne(connection, NAME)
461445
found = bucket.get_metadata('acl')
462-
self.assertEqual(found, [])
463-
self.assertEqual(bucket.metadata, after)
446+
self.assertEqual(found, None)
464447
kw = connection._requested
465-
self.assertEqual(len(kw), 1)
466-
self.assertEqual(kw[0]['method'], 'GET')
467-
self.assertEqual(kw[0]['path'], '/b/%s' % NAME)
468-
self.assertEqual(kw[0]['query_params'], {'projection': 'full'})
448+
self.assertEqual(len(kw), 0)
449+
450+
def test_get_metadata_acl_w_default(self):
451+
NAME = 'name'
452+
connection = _Connection()
453+
bucket = self._makeOne(connection, NAME)
454+
default = object()
455+
found = bucket.get_metadata('acl', default)
456+
self.assertTrue(found is default)
457+
kw = connection._requested
458+
self.assertEqual(len(kw), 0)
459+
460+
def test_get_metadata_defaultObjectAcl_no_default(self):
461+
NAME = 'name'
462+
connection = _Connection()
463+
bucket = self._makeOne(connection, NAME)
464+
found = bucket.get_metadata('defaultObjectAcl')
465+
self.assertEqual(found, None)
466+
kw = connection._requested
467+
self.assertEqual(len(kw), 0)
469468

470469
def test_get_metadata_none_set_defaultObjectAcl_miss_clear_default(self):
471470
NAME = 'name'
472-
after = {'bar': 'Bar'}
473-
connection = _Connection(after)
471+
connection = _Connection()
474472
bucket = self._makeOne(connection, NAME)
475473
default = object()
476474
found = bucket.get_metadata('defaultObjectAcl', default)
477475
self.assertTrue(found is default)
478-
self.assertEqual(bucket.metadata, after)
479476
kw = connection._requested
480-
self.assertEqual(len(kw), 1)
481-
self.assertEqual(kw[0]['method'], 'GET')
482-
self.assertEqual(kw[0]['path'], '/b/%s' % NAME)
483-
self.assertEqual(kw[0]['query_params'], {'projection': 'full'})
477+
self.assertEqual(len(kw), 0)
484478

485479
def test_get_metadata_miss(self):
486480
NAME = 'name'

gcloud/storage/test_key.py

Lines changed: 7 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ def test_has_metdata_hit(self):
349349
key = self._makeOne(metadata=metadata)
350350
self.assertTrue(key.has_metadata(KEY))
351351

352-
def test_reload_metadata_default(self):
352+
def test_reload_metadata(self):
353353
KEY = 'key'
354354
before = {'foo': 'Foo'}
355355
after = {'bar': 'Bar'}
@@ -365,22 +365,6 @@ def test_reload_metadata_default(self):
365365
self.assertEqual(kw[0]['path'], '/b/name/o/%s' % KEY)
366366
self.assertEqual(kw[0]['query_params'], {'projection': 'noAcl'})
367367

368-
def test_reload_metadata_explicit(self):
369-
KEY = 'key'
370-
before = {'foo': 'Foo'}
371-
after = {'bar': 'Bar'}
372-
connection = _Connection(after)
373-
bucket = _Bucket(connection)
374-
key = self._makeOne(bucket, KEY, before)
375-
found = key.reload_metadata(True)
376-
self.assertTrue(found is key)
377-
self.assertEqual(found.metadata, after)
378-
kw = connection._requested
379-
self.assertEqual(len(kw), 1)
380-
self.assertEqual(kw[0]['method'], 'GET')
381-
self.assertEqual(kw[0]['path'], '/b/name/o/%s' % KEY)
382-
self.assertEqual(kw[0]['query_params'], {'projection': 'full'})
383-
384368
def test_get_metadata_none_set_none_passed(self):
385369
KEY = 'key'
386370
after = {'bar': 'Bar'}
@@ -396,22 +380,17 @@ def test_get_metadata_none_set_none_passed(self):
396380
self.assertEqual(kw[0]['path'], '/b/name/o/%s' % KEY)
397381
self.assertEqual(kw[0]['query_params'], {'projection': 'noAcl'})
398382

399-
def test_get_metadata_none_set_acl_hit(self):
383+
def test_get_metadata_acl_no_default(self):
400384
KEY = 'key'
401-
after = {'bar': 'Bar', 'acl': []}
402-
connection = _Connection(after)
385+
connection = _Connection()
403386
bucket = _Bucket(connection)
404387
key = self._makeOne(bucket, KEY)
405388
found = key.get_metadata('acl')
406-
self.assertEqual(found, [])
407-
self.assertEqual(key.metadata, after)
389+
self.assertEqual(found, None)
408390
kw = connection._requested
409-
self.assertEqual(len(kw), 1)
410-
self.assertEqual(kw[0]['method'], 'GET')
411-
self.assertEqual(kw[0]['path'], '/b/name/o/%s' % KEY)
412-
self.assertEqual(kw[0]['query_params'], {'projection': 'full'})
391+
self.assertEqual(len(kw), 0)
413392

414-
def test_get_metadata_none_set_acl_miss_explicit_default(self):
393+
def test_get_metadata_acl_w_default(self):
415394
KEY = 'key'
416395
after = {'bar': 'Bar'}
417396
connection = _Connection(after)
@@ -420,12 +399,8 @@ def test_get_metadata_none_set_acl_miss_explicit_default(self):
420399
default = object()
421400
found = key.get_metadata('acl', default)
422401
self.assertTrue(found is default)
423-
self.assertEqual(key.metadata, after)
424402
kw = connection._requested
425-
self.assertEqual(len(kw), 1)
426-
self.assertEqual(kw[0]['method'], 'GET')
427-
self.assertEqual(kw[0]['path'], '/b/name/o/%s' % KEY)
428-
self.assertEqual(kw[0]['query_params'], {'projection': 'full'})
403+
self.assertEqual(len(kw), 0)
429404

430405
def test_get_metadata_miss(self):
431406
KEY = 'key'

0 commit comments

Comments
 (0)