@@ -309,132 +309,6 @@ def test_cancelled(self):
309309
310310 self .assertTrue (job .cancelled ())
311311
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-
438312 def test_query_plan (self ):
439313 from google .cloud ._helpers import _RFC3339_MICROS
440314 from google .cloud .bigquery .job import QueryPlanEntry
@@ -1905,8 +1779,6 @@ def test_reload_w_timeout(self):
19051779 )
19061780
19071781 def test_iter (self ):
1908- import types
1909-
19101782 begun_resource = self ._make_resource ()
19111783 query_resource = {
19121784 "jobComplete" : True ,
@@ -1921,3 +1793,97 @@ def test_iter(self):
19211793 job = self ._make_one (self .JOB_ID , self .QUERY , client )
19221794
19231795 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