@@ -75,7 +75,7 @@ def get_items_from_response(self, response):
7575 for item in response .get ('items' , []):
7676 name = item .get ('name' )
7777 blob = Blob (name , bucket = self .bucket )
78- blob ._properties = item
78+ blob ._set_properties ( item )
7979 yield blob
8080
8181
@@ -152,9 +152,10 @@ def create(self, project=None):
152152 'from environment.' )
153153
154154 query_params = {'project' : project }
155- self . _properties = self .connection .api_request (
155+ api_response = self .connection .api_request (
156156 method = 'POST' , path = '/b' , query_params = query_params ,
157157 data = {'name' : self .name })
158+ self ._set_properties (api_response )
158159
159160 @property
160161 def acl (self ):
@@ -220,7 +221,7 @@ def get_blob(self, blob_name):
220221 path = blob .path )
221222 name = response .get ('name' ) # Expect this to be blob_name
222223 blob = Blob (name , bucket = self )
223- blob ._properties = response
224+ blob ._set_properties ( response )
224225 return blob
225226 except NotFound :
226227 return None
@@ -408,7 +409,7 @@ def copy_blob(self, blob, destination_bucket, new_name=None):
408409 new_blob = Blob (bucket = destination_bucket , name = new_name )
409410 api_path = blob .path + '/copyTo' + new_blob .path
410411 copy_result = self .connection .api_request (method = 'POST' , path = api_path )
411- new_blob ._properties = copy_result
412+ new_blob ._set_properties ( copy_result )
412413 return new_blob
413414
414415 def upload_file (self , filename , blob_name = None ):
@@ -506,7 +507,7 @@ def cors(self):
506507 :returns: A sequence of mappings describing each CORS policy.
507508 """
508509 return [copy .deepcopy (policy )
509- for policy in self ._properties .get ('cors' , ())]
510+ for policy in self ._get_properties () .get ('cors' , ())]
510511
511512 @cors .setter
512513 def cors (self , entries ):
@@ -531,7 +532,7 @@ def etag(self):
531532 :returns: The bucket etag or ``None`` if the property is not
532533 set locally.
533534 """
534- return self ._properties .get ('etag' )
535+ return self ._get_properties () .get ('etag' )
535536
536537 @property
537538 def id (self ):
@@ -543,7 +544,7 @@ def id(self):
543544 :returns: The ID of the bucket or ``None`` if the property is not
544545 set locally.
545546 """
546- return self ._properties .get ('id' )
547+ return self ._get_properties () .get ('id' )
547548
548549 @property
549550 def lifecycle_rules (self ):
@@ -555,7 +556,7 @@ def lifecycle_rules(self):
555556 :rtype: list(dict)
556557 :returns: A sequence of mappings describing each lifecycle rule.
557558 """
558- info = self ._properties .get ('lifecycle' , {})
559+ info = self ._get_properties () .get ('lifecycle' , {})
559560 return [copy .deepcopy (rule ) for rule in info .get ('rule' , ())]
560561
561562 @lifecycle_rules .setter
@@ -590,7 +591,7 @@ def get_logging(self):
590591 :returns: a dict w/ keys, ``logBucket`` and ``logObjectPrefix``
591592 (if logging is enabled), or None (if not).
592593 """
593- info = self ._properties .get ('logging' )
594+ info = self ._get_properties () .get ('logging' )
594595 return copy .deepcopy (info )
595596
596597 def enable_logging (self , bucket_name , object_prefix = '' ):
@@ -624,7 +625,7 @@ def metageneration(self):
624625 :returns: The metageneration of the bucket or ``None`` if the property
625626 is not set locally.
626627 """
627- metageneration = self ._properties .get ('metageneration' )
628+ metageneration = self ._get_properties () .get ('metageneration' )
628629 if metageneration is not None :
629630 return int (metageneration )
630631
@@ -638,7 +639,7 @@ def owner(self):
638639 :returns: Mapping of owner's role/ID. If the property is not set
639640 locally, returns ``None``.
640641 """
641- return copy .deepcopy (self ._properties .get ('owner' ))
642+ return copy .deepcopy (self ._get_properties () .get ('owner' ))
642643
643644 @property
644645 def project_number (self ):
@@ -650,7 +651,7 @@ def project_number(self):
650651 :returns: The project number that owns the bucket or ``None`` if the
651652 property is not set locally.
652653 """
653- project_number = self ._properties .get ('projectNumber' )
654+ project_number = self ._get_properties () .get ('projectNumber' )
654655 if project_number is not None :
655656 return int (project_number )
656657
@@ -664,7 +665,7 @@ def self_link(self):
664665 :returns: The self link for the bucket or ``None`` if the property is
665666 not set locally.
666667 """
667- return self ._properties .get ('selfLink' )
668+ return self ._get_properties () .get ('selfLink' )
668669
669670 @property
670671 def storage_class (self ):
@@ -678,7 +679,7 @@ def storage_class(self):
678679 :returns: If set, one of "STANDARD", "NEARLINE", or
679680 "DURABLE_REDUCED_AVAILABILITY", else ``None``.
680681 """
681- return self ._properties .get ('storageClass' )
682+ return self ._get_properties () .get ('storageClass' )
682683
683684 @property
684685 def time_created (self ):
@@ -690,7 +691,7 @@ def time_created(self):
690691 :returns: Datetime object parsed from RFC3339 valid timestamp, or
691692 ``None`` if the property is not set locally.
692693 """
693- value = self ._properties .get ('timeCreated' )
694+ value = self ._get_properties () .get ('timeCreated' )
694695 if value is not None :
695696 return datetime .datetime .strptime (value , _GOOGLE_TIMESTAMP_FORMAT )
696697
@@ -704,7 +705,7 @@ def versioning_enabled(self):
704705 :rtype: boolean
705706 :returns: True if enabled, else False.
706707 """
707- versioning = self ._properties .get ('versioning' , {})
708+ versioning = self ._get_properties () .get ('versioning' , {})
708709 return versioning .get ('enabled' , False )
709710
710711 @versioning_enabled .setter
0 commit comments