@@ -309,132 +309,6 @@ def test_cancelled(self):
309
309
310
310
self .assertTrue (job .cancelled ())
311
311
312
- def test_done_job_complete (self ):
313
- client = _make_client (project = self .PROJECT )
314
- resource = self ._make_resource (ended = True )
315
- job = self ._get_target_class ().from_api_repr (resource , client )
316
- job ._query_results = google .cloud .bigquery .query ._QueryResults .from_api_repr (
317
- {"jobComplete" : True , "jobReference" : resource ["jobReference" ]}
318
- )
319
- self .assertTrue (job .done ())
320
-
321
- def test_done_w_timeout (self ):
322
- client = _make_client (project = self .PROJECT )
323
- resource = self ._make_resource (ended = False )
324
- job = self ._get_target_class ().from_api_repr (resource , client )
325
-
326
- with mock .patch .object (
327
- client , "_get_query_results"
328
- ) as fake_get_results , mock .patch .object (job , "reload" ) as fake_reload :
329
- job .done (timeout = 42 )
330
-
331
- fake_get_results .assert_called_once ()
332
- call_args = fake_get_results .call_args
333
- self .assertEqual (call_args .kwargs .get ("timeout" ), 42 )
334
-
335
- call_args = fake_reload .call_args
336
- self .assertEqual (call_args .kwargs .get ("timeout" ), 42 )
337
-
338
- def test_done_w_timeout_and_longer_internal_api_timeout (self ):
339
- client = _make_client (project = self .PROJECT )
340
- resource = self ._make_resource (ended = False )
341
- job = self ._get_target_class ().from_api_repr (resource , client )
342
- job ._done_timeout = 8.8
343
-
344
- with mock .patch .object (
345
- client , "_get_query_results"
346
- ) as fake_get_results , mock .patch .object (job , "reload" ) as fake_reload :
347
- job .done (timeout = 5.5 )
348
-
349
- # The expected timeout used is simply the given timeout, as the latter
350
- # is shorter than the job's internal done timeout.
351
- expected_timeout = 5.5
352
-
353
- fake_get_results .assert_called_once ()
354
- call_args = fake_get_results .call_args
355
- self .assertAlmostEqual (call_args .kwargs .get ("timeout" ), expected_timeout )
356
-
357
- call_args = fake_reload .call_args
358
- self .assertAlmostEqual (call_args .kwargs .get ("timeout" ), expected_timeout )
359
-
360
- def test_done_w_query_results_error_reload_ok_job_finished (self ):
361
- client = _make_client (project = self .PROJECT )
362
- bad_request_error = exceptions .BadRequest ("Error in query" )
363
- client ._get_query_results = mock .Mock (side_effect = bad_request_error )
364
-
365
- resource = self ._make_resource (ended = False )
366
- job = self ._get_target_class ().from_api_repr (resource , client )
367
- job ._exception = None
368
-
369
- def fake_reload (self , * args , ** kwargs ):
370
- self ._properties ["status" ]["state" ] = "DONE"
371
- self .set_exception (copy .copy (bad_request_error ))
372
-
373
- fake_reload_method = types .MethodType (fake_reload , job )
374
-
375
- with mock .patch .object (job , "reload" , new = fake_reload_method ):
376
- is_done = job .done ()
377
-
378
- assert is_done
379
- assert isinstance (job ._exception , exceptions .BadRequest )
380
-
381
- def test_done_w_query_results_error_reload_ok_job_still_running (self ):
382
- client = _make_client (project = self .PROJECT )
383
- retry_error = exceptions .RetryError ("Too many retries" , cause = TimeoutError )
384
- client ._get_query_results = mock .Mock (side_effect = retry_error )
385
-
386
- resource = self ._make_resource (ended = False )
387
- job = self ._get_target_class ().from_api_repr (resource , client )
388
- job ._exception = None
389
-
390
- def fake_reload (self , * args , ** kwargs ):
391
- self ._properties ["status" ]["state" ] = "RUNNING"
392
-
393
- fake_reload_method = types .MethodType (fake_reload , job )
394
-
395
- with mock .patch .object (job , "reload" , new = fake_reload_method ):
396
- is_done = job .done ()
397
-
398
- assert not is_done
399
- assert job ._exception is None
400
-
401
- def test_done_w_query_results_error_reload_error (self ):
402
- client = _make_client (project = self .PROJECT )
403
- bad_request_error = exceptions .BadRequest ("Error in query" )
404
- client ._get_query_results = mock .Mock (side_effect = bad_request_error )
405
-
406
- resource = self ._make_resource (ended = False )
407
- job = self ._get_target_class ().from_api_repr (resource , client )
408
- reload_error = exceptions .DataLoss ("Oops, sorry!" )
409
- job .reload = mock .Mock (side_effect = reload_error )
410
- job ._exception = None
411
-
412
- is_done = job .done ()
413
-
414
- assert is_done
415
- assert job ._exception is bad_request_error
416
-
417
- def test_done_w_job_query_results_ok_reload_error (self ):
418
- client = _make_client (project = self .PROJECT )
419
- query_results = google .cloud .bigquery .query ._QueryResults (
420
- properties = {
421
- "jobComplete" : True ,
422
- "jobReference" : {"projectId" : self .PROJECT , "jobId" : "12345" },
423
- }
424
- )
425
- client ._get_query_results = mock .Mock (return_value = query_results )
426
-
427
- resource = self ._make_resource (ended = False )
428
- job = self ._get_target_class ().from_api_repr (resource , client )
429
- retry_error = exceptions .RetryError ("Too many retries" , cause = TimeoutError )
430
- job .reload = mock .Mock (side_effect = retry_error )
431
- job ._exception = None
432
-
433
- is_done = job .done ()
434
-
435
- assert is_done
436
- assert job ._exception is retry_error
437
-
438
312
def test_query_plan (self ):
439
313
from google .cloud ._helpers import _RFC3339_MICROS
440
314
from google .cloud .bigquery .job import QueryPlanEntry
@@ -1905,8 +1779,6 @@ def test_reload_w_timeout(self):
1905
1779
)
1906
1780
1907
1781
def test_iter (self ):
1908
- import types
1909
-
1910
1782
begun_resource = self ._make_resource ()
1911
1783
query_resource = {
1912
1784
"jobComplete" : True ,
@@ -1921,3 +1793,97 @@ def test_iter(self):
1921
1793
job = self ._make_one (self .JOB_ID , self .QUERY , client )
1922
1794
1923
1795
self .assertIsInstance (iter (job ), types .GeneratorType )
1796
+
1797
+ def test__done_or_raise_w_timeout (self ):
1798
+ client = _make_client (project = self .PROJECT )
1799
+ resource = self ._make_resource (ended = False )
1800
+ job = self ._get_target_class ().from_api_repr (resource , client )
1801
+
1802
+ with mock .patch .object (
1803
+ client , "_get_query_results"
1804
+ ) as fake_get_results , mock .patch .object (job , "reload" ) as fake_reload :
1805
+ job ._done_or_raise (timeout = 42 )
1806
+
1807
+ fake_get_results .assert_called_once ()
1808
+ call_args = fake_get_results .call_args
1809
+ self .assertEqual (call_args .kwargs .get ("timeout" ), 42 )
1810
+
1811
+ call_args = fake_reload .call_args
1812
+ self .assertEqual (call_args .kwargs .get ("timeout" ), 42 )
1813
+
1814
+ def test__done_or_raise_w_timeout_and_longer_internal_api_timeout (self ):
1815
+ client = _make_client (project = self .PROJECT )
1816
+ resource = self ._make_resource (ended = False )
1817
+ job = self ._get_target_class ().from_api_repr (resource , client )
1818
+ job ._done_timeout = 8.8
1819
+
1820
+ with mock .patch .object (
1821
+ client , "_get_query_results"
1822
+ ) as fake_get_results , mock .patch .object (job , "reload" ) as fake_reload :
1823
+ job ._done_or_raise (timeout = 5.5 )
1824
+
1825
+ # The expected timeout used is simply the given timeout, as the latter
1826
+ # is shorter than the job's internal done timeout.
1827
+ expected_timeout = 5.5
1828
+
1829
+ fake_get_results .assert_called_once ()
1830
+ call_args = fake_get_results .call_args
1831
+ self .assertAlmostEqual (call_args .kwargs .get ("timeout" ), expected_timeout )
1832
+
1833
+ call_args = fake_reload .call_args
1834
+ self .assertAlmostEqual (call_args .kwargs .get ("timeout" ), expected_timeout )
1835
+
1836
+ def test__done_or_raise_w_query_results_error_reload_ok (self ):
1837
+ client = _make_client (project = self .PROJECT )
1838
+ bad_request_error = exceptions .BadRequest ("Error in query" )
1839
+ client ._get_query_results = mock .Mock (side_effect = bad_request_error )
1840
+
1841
+ resource = self ._make_resource (ended = False )
1842
+ job = self ._get_target_class ().from_api_repr (resource , client )
1843
+ job ._exception = None
1844
+
1845
+ def fake_reload (self , * args , ** kwargs ):
1846
+ self ._properties ["status" ]["state" ] = "DONE"
1847
+ self .set_exception (copy .copy (bad_request_error ))
1848
+
1849
+ fake_reload_method = types .MethodType (fake_reload , job )
1850
+
1851
+ with mock .patch .object (job , "reload" , new = fake_reload_method ):
1852
+ job ._done_or_raise ()
1853
+
1854
+ assert isinstance (job ._exception , exceptions .BadRequest )
1855
+
1856
+ def test__done_or_raise_w_query_results_error_reload_error (self ):
1857
+ client = _make_client (project = self .PROJECT )
1858
+ bad_request_error = exceptions .BadRequest ("Error in query" )
1859
+ client ._get_query_results = mock .Mock (side_effect = bad_request_error )
1860
+
1861
+ resource = self ._make_resource (ended = False )
1862
+ job = self ._get_target_class ().from_api_repr (resource , client )
1863
+ reload_error = exceptions .DataLoss ("Oops, sorry!" )
1864
+ job .reload = mock .Mock (side_effect = reload_error )
1865
+ job ._exception = None
1866
+
1867
+ job ._done_or_raise ()
1868
+
1869
+ assert job ._exception is bad_request_error
1870
+
1871
+ def test__done_or_raise_w_job_query_results_ok_reload_error (self ):
1872
+ client = _make_client (project = self .PROJECT )
1873
+ query_results = google .cloud .bigquery .query ._QueryResults (
1874
+ properties = {
1875
+ "jobComplete" : True ,
1876
+ "jobReference" : {"projectId" : self .PROJECT , "jobId" : "12345" },
1877
+ }
1878
+ )
1879
+ client ._get_query_results = mock .Mock (return_value = query_results )
1880
+
1881
+ resource = self ._make_resource (ended = False )
1882
+ job = self ._get_target_class ().from_api_repr (resource , client )
1883
+ retry_error = exceptions .RetryError ("Too many retries" , cause = TimeoutError )
1884
+ job .reload = mock .Mock (side_effect = retry_error )
1885
+ job ._exception = None
1886
+
1887
+ job ._done_or_raise ()
1888
+
1889
+ assert job ._exception is retry_error
0 commit comments