feat: support job reservation (#2186) · googleapis/python-bigquery@cb646ce
@@ -443,6 +443,16 @@ def test_state(self):
443443status["state"] = state
444444self.assertEqual(job.state, state)
445445446+def test_reservation_id(self):
447+reservation_id = "RESERVATION-ID"
448+client = _make_client(project=self.PROJECT)
449+job = self._make_one(self.JOB_ID, client)
450+self.assertIsNone(job.reservation_id)
451+stats = job._properties["statistics"] = {}
452+self.assertIsNone(job.reservation_id)
453+stats["reservation_id"] = reservation_id
454+self.assertEqual(job.reservation_id, reservation_id)
455+446456def _set_properties_job(self):
447457client = _make_client(project=self.PROJECT)
448458job = self._make_one(self.JOB_ID, client)
@@ -1188,31 +1198,37 @@ def test_fill_query_job_config_from_default(self):
11881198job_config = QueryJobConfig()
11891199job_config.dry_run = True
11901200job_config.maximum_bytes_billed = 1000
1201+job_config.reservation = "reservation_1"
1191120211921203default_job_config = QueryJobConfig()
11931204default_job_config.use_query_cache = True
11941205default_job_config.maximum_bytes_billed = 2000
1206+default_job_config.reservation = "reservation_2"
1195120711961208final_job_config = job_config._fill_from_default(default_job_config)
11971209self.assertTrue(final_job_config.dry_run)
11981210self.assertTrue(final_job_config.use_query_cache)
11991211self.assertEqual(final_job_config.maximum_bytes_billed, 1000)
1212+self.assertEqual(final_job_config.reservation, "reservation_1")
1200121312011214def test_fill_load_job_from_default(self):
12021215from google.cloud.bigquery import LoadJobConfig
1203121612041217job_config = LoadJobConfig()
12051218job_config.create_session = True
12061219job_config.encoding = "UTF-8"
1220+job_config.reservation = "reservation_1"
1207122112081222default_job_config = LoadJobConfig()
12091223default_job_config.ignore_unknown_values = True
12101224default_job_config.encoding = "ISO-8859-1"
1225+default_job_config.reservation = "reservation_2"
1211122612121227final_job_config = job_config._fill_from_default(default_job_config)
12131228self.assertTrue(final_job_config.create_session)
12141229self.assertTrue(final_job_config.ignore_unknown_values)
12151230self.assertEqual(final_job_config.encoding, "UTF-8")
1231+self.assertEqual(final_job_config.reservation, "reservation_1")
1216123212171233def test_fill_from_default_conflict(self):
12181234from google.cloud.bigquery import QueryJobConfig
@@ -1232,10 +1248,12 @@ def test_fill_from_empty_default_conflict(self):
12321248job_config = QueryJobConfig()
12331249job_config.dry_run = True
12341250job_config.maximum_bytes_billed = 1000
1251+job_config.reservation = "reservation_1"
1235125212361253final_job_config = job_config._fill_from_default(default_job_config=None)
12371254self.assertTrue(final_job_config.dry_run)
12381255self.assertEqual(final_job_config.maximum_bytes_billed, 1000)
1256+self.assertEqual(final_job_config.reservation, "reservation_1")
1239125712401258@mock.patch("google.cloud.bigquery._helpers._get_sub_prop")
12411259def test__get_sub_prop_wo_default(self, _get_sub_prop):
@@ -1338,3 +1356,27 @@ def test_job_timeout_properties(self):
13381356job_config.job_timeout_ms = None
13391357assert job_config.job_timeout_ms is None
13401358assert "jobTimeoutMs" not in job_config._properties
1359+1360+def test_reservation_miss(self):
1361+job_config = self._make_one()
1362+self.assertEqual(job_config.reservation, None)
1363+1364+def test_reservation_hit(self):
1365+job_config = self._make_one()
1366+job_config._properties["reservation"] = "foo"
1367+self.assertEqual(job_config.reservation, "foo")
1368+1369+def test_reservation_update_in_place(self):
1370+job_config = self._make_one()
1371+job_config.reservation = "bar" # update in place
1372+self.assertEqual(job_config.reservation, "bar")
1373+1374+def test_reservation_setter_invalid(self):
1375+job_config = self._make_one()
1376+with self.assertRaises(ValueError):
1377+job_config.reservation = object()
1378+1379+def test_reservation_setter(self):
1380+job_config = self._make_one()
1381+job_config.reservation = "foo"
1382+self.assertEqual(job_config._properties["reservation"], "foo")