Skip to content

Commit f65f7c7

Browse files
committed
Merge pull request #774 from dhermes/make-lifecycle-a-property
Adding Bucket.lifecycle_rules property to replace methods.
2 parents 4d69bb3 + e84a9cf commit f65f7c7

File tree

2 files changed

+40
-56
lines changed

2 files changed

+40
-56
lines changed

gcloud/storage/bucket.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
... print blob
3434
"""
3535

36+
import copy
3637
import os
3738
import six
3839

@@ -513,29 +514,30 @@ def id(self):
513514
"""
514515
return self.properties['id']
515516

516-
def get_lifecycle(self):
517-
"""Retrieve lifecycle rules configured for this bucket.
517+
@property
518+
def lifecycle_rules(self):
519+
"""Lifecycle rules configured for this bucket.
518520
519521
See: https://cloud.google.com/storage/docs/lifecycle and
520522
https://cloud.google.com/storage/docs/json_api/v1/buckets
521523
522524
:rtype: list(dict)
523525
:returns: A sequence of mappings describing each lifecycle rule.
524526
"""
525-
info = self.properties.get('lifecycle', {})
526-
return [rule.copy() for rule in info.get('rule', ())]
527+
info = self._properties.get('lifecycle', {})
528+
return [copy.deepcopy(rule) for rule in info.get('rule', ())]
527529

528-
def update_lifecycle(self, rules):
529-
"""Update CORS policies configured for this bucket.
530+
@lifecycle_rules.setter
531+
def lifecycle_rules(self, rules):
532+
"""Update the lifecycle rules configured for this bucket.
530533
531534
See: https://cloud.google.com/storage/docs/lifecycle and
532535
https://cloud.google.com/storage/docs/json_api/v1/buckets
533536
534-
:type rules: list(dict)
535-
:param rules: A sequence of mappings describing each lifecycle rule.
537+
:rtype: list(dict)
538+
:returns: A sequence of mappings describing each lifecycle rule.
536539
"""
537540
self._patch_properties({'lifecycle': {'rule': rules}})
538-
self.patch()
539541

540542
location = _scalar_property('location')
541543
"""Retrieve location configured for this bucket.

gcloud/storage/test_bucket.py

Lines changed: 29 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -674,75 +674,57 @@ def test_id(self):
674674
bucket = self._makeOne(properties=properties)
675675
self.assertEqual(bucket.id, ID)
676676

677-
def test_get_lifecycle_eager(self):
677+
def test_location_getter(self):
678678
NAME = 'name'
679-
LC_RULE = {'action': {'type': 'Delete'}, 'condition': {'age': 42}}
680-
before = {'lifecycle': {'rule': [LC_RULE]}}
681679
connection = _Connection()
680+
before = {'location': 'AS'}
682681
bucket = self._makeOne(NAME, connection, properties=before)
683-
entries = bucket.get_lifecycle()
684-
self.assertEqual(len(entries), 1)
685-
self.assertEqual(entries[0]['action']['type'], 'Delete')
686-
self.assertEqual(entries[0]['condition']['age'], 42)
682+
self.assertEqual(bucket.location, 'AS')
687683
kw = connection._requested
688684
self.assertEqual(len(kw), 0)
689685

690-
def test_get_lifecycle_lazy(self):
691-
NAME = 'name'
692-
LC_RULE = {'action': {'type': 'Delete'}, 'condition': {'age': 42}}
693-
after = {'lifecycle': {'rule': [LC_RULE]}}
694-
connection = _Connection(after)
695-
bucket = self._makeOne(NAME, connection)
696-
bucket._reload_properties()
697-
entries = bucket.get_lifecycle()
698-
self.assertEqual(len(entries), 1)
699-
self.assertEqual(entries[0]['action']['type'], 'Delete')
700-
self.assertEqual(entries[0]['condition']['age'], 42)
701-
kw = connection._requested
702-
self.assertEqual(len(kw), 1)
703-
self.assertEqual(kw[0]['method'], 'GET')
704-
self.assertEqual(kw[0]['path'], '/b/%s' % NAME)
705-
self.assertEqual(kw[0]['query_params'], {'projection': 'noAcl'})
706-
707-
def test_update_lifecycle(self):
686+
def test_location_setter(self):
708687
NAME = 'name'
709-
LC_RULE = {'action': {'type': 'Delete'}, 'condition': {'age': 42}}
710-
after = {'lifecycle': {'rule': [LC_RULE]}}
711-
connection = _Connection(after)
688+
connection = _Connection({'location': 'AS'})
712689
bucket = self._makeOne(NAME, connection)
713-
bucket.update_lifecycle([LC_RULE])
690+
bucket.location = 'AS'
691+
bucket.patch()
692+
self.assertEqual(bucket.location, 'AS')
714693
kw = connection._requested
715694
self.assertEqual(len(kw), 1)
716695
self.assertEqual(kw[0]['method'], 'PATCH')
717696
self.assertEqual(kw[0]['path'], '/b/%s' % NAME)
718-
self.assertEqual(kw[0]['data'], after)
697+
self.assertEqual(kw[0]['data'], {'location': 'AS'})
719698
self.assertEqual(kw[0]['query_params'], {'projection': 'full'})
720-
entries = bucket.get_lifecycle()
721-
self.assertEqual(len(entries), 1)
722-
self.assertEqual(entries[0]['action']['type'], 'Delete')
723-
self.assertEqual(entries[0]['condition']['age'], 42)
724699

725-
def test_location_getter(self):
700+
def test_lifecycle_rules_getter(self):
726701
NAME = 'name'
727-
connection = _Connection()
728-
before = {'location': 'AS'}
729-
bucket = self._makeOne(NAME, connection, properties=before)
730-
self.assertEqual(bucket.location, 'AS')
731-
kw = connection._requested
732-
self.assertEqual(len(kw), 0)
733-
734-
def test_location_setter(self):
702+
LC_RULE = {'action': {'type': 'Delete'}, 'condition': {'age': 42}}
703+
rules = [LC_RULE]
704+
properties = {'lifecycle': {'rule': rules}}
705+
bucket = self._makeOne(NAME, properties=properties)
706+
self.assertEqual(bucket.lifecycle_rules, rules)
707+
# Make sure it's a copy
708+
self.assertFalse(bucket.lifecycle_rules is rules)
709+
710+
def test_lifecycle_rules_setter(self):
735711
NAME = 'name'
736-
connection = _Connection({'location': 'AS'})
712+
LC_RULE = {'action': {'type': 'Delete'}, 'condition': {'age': 42}}
713+
rules = [LC_RULE]
714+
after = {'lifecycle': {'rule': rules}}
715+
connection = _Connection(after)
716+
737717
bucket = self._makeOne(NAME, connection)
738-
bucket.location = 'AS'
718+
self.assertEqual(bucket.lifecycle_rules, [])
719+
720+
bucket.lifecycle_rules = rules
739721
bucket.patch()
740-
self.assertEqual(bucket.location, 'AS')
722+
self.assertEqual(bucket.lifecycle_rules, rules)
741723
kw = connection._requested
742724
self.assertEqual(len(kw), 1)
743725
self.assertEqual(kw[0]['method'], 'PATCH')
744726
self.assertEqual(kw[0]['path'], '/b/%s' % NAME)
745-
self.assertEqual(kw[0]['data'], {'location': 'AS'})
727+
self.assertEqual(kw[0]['data'], after)
746728
self.assertEqual(kw[0]['query_params'], {'projection': 'full'})
747729

748730
def test_get_logging_w_prefix(self):

0 commit comments

Comments
 (0)