Skip to content

Commit 9d7fc2f

Browse files
committed
Merge branch '314-bucket_versioning_support' into 314-omnibus
2 parents 7533899 + 8477e85 commit 9d7fc2f

2 files changed

Lines changed: 85 additions & 0 deletions

File tree

gcloud/storage/bucket.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class Bucket(_PropertyMixin):
3434
'selfLink': 'self_link',
3535
'storageClass': 'storage_class',
3636
'timeCreated': 'time_created',
37+
'versioning': 'get_versioning',
3738
}
3839
"""Map field name -> accessor for fields w/ custom accessors."""
3940

@@ -564,6 +565,36 @@ def time_created(self):
564565
"""
565566
return self.properties['timeCreated']
566567

568+
def get_versioning(self):
569+
"""Is versioning enabled for this bucket?
570+
571+
See: https://cloud.google.com/storage/docs/object-versioning for
572+
details.
573+
574+
:rtype: boolean
575+
:returns: True if enabled, else False.
576+
"""
577+
if not self.has_metadata(field='versioning'):
578+
self.reload_metadata()
579+
versioning = self.metadata.get('versioning', {})
580+
return versioning.get('enabled', False)
581+
582+
def enable_versioning(self):
583+
"""Enable versioning for this bucket.
584+
585+
See: https://cloud.google.com/storage/docs/object-versioning for
586+
details.
587+
"""
588+
self.patch_metadata({'versioning': {'enabled': True}})
589+
590+
def disable_versioning(self):
591+
"""Disable versioning for this bucket.
592+
593+
See: https://cloud.google.com/storage/docs/object-versioning for
594+
details.
595+
"""
596+
self.patch_metadata({'versioning': {'enabled': False}})
597+
567598

568599
class BucketIterator(Iterator):
569600
"""An iterator listing all buckets.

gcloud/storage/test_bucket.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,60 @@ def test_time_created(self):
667667
bucket = self._makeOne(properties=properties)
668668
self.assertEqual(bucket.time_created, TIME_CREATED)
669669

670+
def test_get_versioning_eager(self):
671+
NAME = 'name'
672+
before = {'bar': 'Bar', 'versioning': {'enabled': True}}
673+
connection = _Connection()
674+
bucket = self._makeOne(connection, NAME, before)
675+
self.assertEqual(bucket.get_versioning(), True)
676+
kw = connection._requested
677+
self.assertEqual(len(kw), 0)
678+
679+
def test_get_versioning_lazy(self):
680+
NAME = 'name'
681+
before = {'bar': 'Bar'}
682+
after = {'bar': 'Bar', 'versioning': {'enabled': True}}
683+
connection = _Connection(after)
684+
bucket = self._makeOne(connection, NAME, before)
685+
self.assertEqual(bucket.get_versioning(), True)
686+
kw = connection._requested
687+
self.assertEqual(len(kw), 1)
688+
self.assertEqual(kw[0]['method'], 'GET')
689+
self.assertEqual(kw[0]['path'], '/b/%s' % NAME)
690+
self.assertEqual(kw[0]['query_params'], {'projection': 'noAcl'})
691+
692+
def test_enable_versioning(self):
693+
NAME = 'name'
694+
before = {'versioning': {'enabled': False}}
695+
after = {'versioning': {'enabled': True}}
696+
connection = _Connection(after)
697+
bucket = self._makeOne(connection, NAME, before)
698+
self.assertFalse(bucket.get_versioning())
699+
bucket.enable_versioning()
700+
self.assertTrue(bucket.get_versioning())
701+
kw = connection._requested
702+
self.assertEqual(len(kw), 1)
703+
self.assertEqual(kw[0]['method'], 'PATCH')
704+
self.assertEqual(kw[0]['path'], '/b/%s' % NAME)
705+
self.assertEqual(kw[0]['data'], {'versioning': {'enabled': True}})
706+
self.assertEqual(kw[0]['query_params'], {'projection': 'full'})
707+
708+
def test_disable_versioning(self):
709+
NAME = 'name'
710+
before = {'versioning': {'enabled': True}}
711+
after = {'versioning': {'enabled': False}}
712+
connection = _Connection(after)
713+
bucket = self._makeOne(connection, NAME, before)
714+
self.assertTrue(bucket.get_versioning())
715+
bucket.disable_versioning()
716+
self.assertFalse(bucket.get_versioning())
717+
kw = connection._requested
718+
self.assertEqual(len(kw), 1)
719+
self.assertEqual(kw[0]['method'], 'PATCH')
720+
self.assertEqual(kw[0]['path'], '/b/%s' % NAME)
721+
self.assertEqual(kw[0]['data'], {'versioning': {'enabled': False}})
722+
self.assertEqual(kw[0]['query_params'], {'projection': 'full'})
723+
670724

671725
class TestBucketIterator(unittest2.TestCase):
672726

0 commit comments

Comments
 (0)