Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions google/cloud/storage/bucket.py
Original file line number Diff line number Diff line change
Expand Up @@ -2618,6 +2618,21 @@ def time_created(self):
if value is not None:
return _rfc3339_nanos_to_datetime(value)

@property
def updated(self):
"""Retrieve the timestamp at which the bucket was last updated.

See https://cloud.google.com/storage/docs/json_api/v1/buckets

:rtype: :class:`datetime.datetime` or ``NoneType``
:returns: Datetime object parsed from RFC3339 valid timestamp, or
``None`` if the bucket's resource has not been loaded
from the server.
"""
value = self._properties.get("updated")
if value is not None:
return _rfc3339_nanos_to_datetime(value)

@property
def versioning_enabled(self):
"""Is versioning enabled for this bucket?
Expand Down
13 changes: 13 additions & 0 deletions tests/unit/test_bucket.py
Original file line number Diff line number Diff line change
Expand Up @@ -2959,6 +2959,19 @@ def test_time_created_unset(self):
bucket = self._make_one()
self.assertIsNone(bucket.time_created)

def test_updated(self):
from google.cloud._helpers import _RFC3339_MICROS

TIMESTAMP = datetime.datetime(2023, 11, 5, 20, 34, 37, tzinfo=_UTC)
UPDATED = TIMESTAMP.strftime(_RFC3339_MICROS)
properties = {"updated": UPDATED}
bucket = self._make_one(properties=properties)
self.assertEqual(bucket.updated, TIMESTAMP)

def test_updated_unset(self):
bucket = self._make_one()
self.assertIsNone(bucket.updated)

def test_versioning_enabled_getter_missing(self):
NAME = "name"
bucket = self._make_one(name=NAME)
Expand Down