Skip to content

Commit 670de48

Browse files
committed
feat: add support dataset.max_time_travel_hours
1 parent 83bc768 commit 670de48

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

google/cloud/bigquery/dataset.py

+25-1
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,9 @@ def from_api_repr(cls, resource: dict) -> "AccessEntry":
501501
if len(entry) != 0:
502502
raise ValueError("Entry has unexpected keys remaining.", entry)
503503

504-
return cls(role, entity_type, entity_id)
504+
config = cls(role, entity_type, entity_id)
505+
config._properties = copy.deepcopy(resource)
506+
return config
505507

506508

507509
class Dataset(object):
@@ -525,6 +527,7 @@ class Dataset(object):
525527
"friendly_name": "friendlyName",
526528
"default_encryption_configuration": "defaultEncryptionConfiguration",
527529
"storage_billing_model": "storageBillingModel",
530+
"max_time_travel_hours": "maxTimeTravelHours",
528531
"default_rounding_mode": "defaultRoundingMode",
529532
}
530533

@@ -533,6 +536,27 @@ def __init__(self, dataset_ref) -> None:
533536
dataset_ref = DatasetReference.from_string(dataset_ref)
534537
self._properties = {"datasetReference": dataset_ref.to_api_repr(), "labels": {}}
535538

539+
@property
540+
def max_time_travel_hours(self):
541+
"""
542+
Optional[int]: Defines the time travel window in hours. The value can be from 48 to 168 hours (2 to 7 days).
543+
value must in multiple of 24 hours (48, 72, 96, 120, 144, 168)
544+
The default value is 168 hours if this is not set.
545+
"""
546+
return self._properties.get("maxTimeTravelHours")
547+
548+
@max_time_travel_hours.setter
549+
def max_time_travel_hours(self, hours):
550+
if not isinstance(hours, int):
551+
raise ValueError("Pass the int value")
552+
if hours < 2 * 24 or hours > 7 * 24:
553+
raise ValueError(
554+
"Time Travel Window should be from 48 to 168 hours (2 to 7 days)"
555+
)
556+
if hours % 24 != 0:
557+
raise ValueError("Time Travel Window should be multiple of 24")
558+
self._properties["maxTimeTravelHours"] = hours
559+
536560
@property
537561
def default_rounding_mode(self):
538562
"""Union[str, None]: defaultRoundingMode of the dataset as set by the user

tests/system/test_client.py

+7
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,11 @@ def test_create_dataset(self):
238238
self.assertEqual(dataset.dataset_id, DATASET_ID)
239239
self.assertEqual(dataset.project, Config.CLIENT.project)
240240

241+
def test_create_dataset_max_time_travel_hours(self):
242+
DATASET_ID = _make_dataset_id("create_ci_dataset")
243+
dataset = self.temp_dataset(DATASET_ID, max_time_travel_hours=24 * 2)
244+
self.assertEqual(int(dataset.max_time_travel_hours), 24 * 2)
245+
241246
def test_get_dataset(self):
242247
dataset_id = _make_dataset_id("get_dataset")
243248
client = Config.CLIENT
@@ -2299,6 +2304,8 @@ def temp_dataset(self, dataset_id, *args, **kwargs):
22992304
dataset = Dataset(dataset_ref)
23002305
if kwargs.get("location"):
23012306
dataset.location = kwargs.get("location")
2307+
if kwargs.get("max_time_travel_hours"):
2308+
dataset.max_time_travel_hours = kwargs.get("max_time_travel_hours")
23022309
if kwargs.get("default_rounding_mode"):
23032310
dataset.default_rounding_mode = kwargs.get("default_rounding_mode")
23042311

0 commit comments

Comments
 (0)