Skip to content

Commit

Permalink
Re-map 'Bucket.versioning' as a boolean property, 'versioning_enabled'.
Browse files Browse the repository at this point in the history
  • Loading branch information
tseaver committed Nov 7, 2014
1 parent 7c7745f commit 5e14e12
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 42 deletions.
19 changes: 8 additions & 11 deletions gcloud/storage/bucket.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class Bucket(_PropertyMixin):
'selfLink': 'self_link',
'storageClass': 'storage_class',
'timeCreated': 'time_created',
'versioning': 'get_versioning()',
'versioning': 'versioning_enabled',
}
"""Map field name -> accessor for fields w/ custom accessors."""

Expand Down Expand Up @@ -544,7 +544,8 @@ def time_created(self):
"""
return self.properties['timeCreated']

def get_versioning(self):
@property
def versioning_enabled(self):
"""Is versioning enabled for this bucket?
See: https://cloud.google.com/storage/docs/object-versioning for
Expand All @@ -556,21 +557,17 @@ def get_versioning(self):
versioning = self.properties.get('versioning', {})
return versioning.get('enabled', False)

def enable_versioning(self):
@versioning_enabled.setter
def versioning_enabled(self, value):
"""Enable versioning for this bucket.
See: https://cloud.google.com/storage/docs/object-versioning for
details.
"""
self._patch_properties({'versioning': {'enabled': True}})

def disable_versioning(self):
"""Disable versioning for this bucket.
See: https://cloud.google.com/storage/docs/object-versioning for
details.
:type value: convertible to bool
:param value: should versioning be anabled for the bucket?
"""
self._patch_properties({'versioning': {'enabled': False}})
self._patch_properties({'versioning': {'enabled': bool(value)}})

def configure_website(self, main_page_suffix=None, not_found_page=None):
"""Configure website-related properties.
Expand Down
46 changes: 15 additions & 31 deletions gcloud/storage/test_bucket.py
Original file line number Diff line number Diff line change
Expand Up @@ -708,55 +708,39 @@ def test_time_created(self):
bucket = self._makeOne(properties=properties)
self.assertEqual(bucket.time_created, TIME_CREATED)

def test_get_versioning_eager(self):
def test_versioning_enabled_getter_missing(self):
NAME = 'name'
before = {'bar': 'Bar', 'versioning': {'enabled': True}}
connection = _Connection()
bucket = self._makeOne(connection, NAME, before)
self.assertEqual(bucket.get_versioning(), True)
kw = connection._requested
self.assertEqual(len(kw), 0)

def test_get_versioning_lazy(self):
NAME = 'name'
after = {'bar': 'Bar', 'versioning': {'enabled': True}}
connection = _Connection(after)
connection = _Connection({})
bucket = self._makeOne(connection, NAME)
self.assertEqual(bucket.get_versioning(), True)
self.assertEqual(bucket.versioning_enabled, False)
kw = connection._requested
self.assertEqual(len(kw), 1)
self.assertEqual(kw[0]['method'], 'GET')
self.assertEqual(kw[0]['path'], '/b/%s' % NAME)
self.assertEqual(kw[0]['query_params'], {'projection': 'noAcl'})

def test_enable_versioning(self):
def test_versioning_enabled_getter(self):
NAME = 'name'
before = {'versioning': {'enabled': False}}
after = {'versioning': {'enabled': True}}
connection = _Connection(after)
before = {'versioning': {'enabled': True}}
connection = _Connection()
bucket = self._makeOne(connection, NAME, before)
self.assertFalse(bucket.get_versioning())
bucket.enable_versioning()
self.assertTrue(bucket.get_versioning())
self.assertEqual(bucket.versioning_enabled, True)
kw = connection._requested
self.assertEqual(len(kw), 1)
self.assertEqual(kw[0]['method'], 'PATCH')
self.assertEqual(kw[0]['data'], {'versioning': {'enabled': True}})
self.assertEqual(kw[0]['query_params'], {'projection': 'full'})
self.assertEqual(len(kw), 0)

def test_disable_versioning(self):
def test_versioning_enabled_setter(self):
NAME = 'name'
before = {'versioning': {'enabled': True}}
after = {'versioning': {'enabled': False}}
before = {'versioning': {'enabled': False}}
after = {'versioning': {'enabled': True}}
connection = _Connection(after)
bucket = self._makeOne(connection, NAME, before)
self.assertTrue(bucket.get_versioning())
bucket.disable_versioning()
self.assertFalse(bucket.get_versioning())
self.assertFalse(bucket.versioning_enabled)
bucket.versioning_enabled = True
self.assertTrue(bucket.versioning_enabled)
kw = connection._requested
self.assertEqual(len(kw), 1)
self.assertEqual(kw[0]['method'], 'PATCH')
self.assertEqual(kw[0]['data'], after)
self.assertEqual(kw[0]['data'], {'versioning': {'enabled': True}})
self.assertEqual(kw[0]['query_params'], {'projection': 'full'})

def test_configure_website_defaults(self):
Expand Down

0 comments on commit 5e14e12

Please sign in to comment.