26
26
import operator
27
27
import time
28
28
29
+ import pytest
29
30
import six
30
31
31
32
from google .cloud .bigquery import SchemaField
50
51
'WHERE state = "TX"' )
51
52
52
53
53
- def snippet (func ):
54
- """Mark ``func`` as a snippet example function."""
55
- func ._snippet = True
56
- return func
54
+ @pytest .fixture (scope = 'module' )
55
+ def client ():
56
+ return Client ()
57
+
58
+
59
+ @pytest .fixture
60
+ def to_delete ():
61
+ doomed = []
62
+ yield doomed
63
+ for item in doomed :
64
+ item .delete ()
57
65
58
66
59
67
def _millis ():
@@ -69,8 +77,7 @@ def delete(self):
69
77
self ._wrapped .close ()
70
78
71
79
72
- @snippet
73
- def client_list_datasets (client , _ ):
80
+ def test_client_list_datasets (client ):
74
81
"""List datasets for a project."""
75
82
76
83
def do_something_with (_ ):
@@ -82,8 +89,7 @@ def do_something_with(_):
82
89
# [END client_list_datasets]
83
90
84
91
85
- @snippet
86
- def dataset_create (client , to_delete ):
92
+ def test_dataset_create (client , to_delete ):
87
93
"""Create a dataset."""
88
94
DATASET_NAME = 'dataset_create_%d' % (_millis (),)
89
95
@@ -95,8 +101,7 @@ def dataset_create(client, to_delete):
95
101
to_delete .append (dataset )
96
102
97
103
98
- @snippet
99
- def dataset_exists (client , to_delete ):
104
+ def test_dataset_exists (client , to_delete ):
100
105
"""Test existence of a dataset."""
101
106
DATASET_NAME = 'dataset_exists_%d' % (_millis (),)
102
107
dataset = client .dataset (DATASET_NAME )
@@ -109,8 +114,7 @@ def dataset_exists(client, to_delete):
109
114
# [END dataset_exists]
110
115
111
116
112
- @snippet
113
- def dataset_reload (client , to_delete ):
117
+ def test_dataset_reload (client , to_delete ):
114
118
"""Reload a dataset's metadata."""
115
119
DATASET_NAME = 'dataset_reload_%d' % (_millis (),)
116
120
dataset = client .dataset (DATASET_NAME )
@@ -127,8 +131,7 @@ def dataset_reload(client, to_delete):
127
131
# [END dataset_reload]
128
132
129
133
130
- @snippet
131
- def dataset_patch (client , to_delete ):
134
+ def test_dataset_patch (client , to_delete ):
132
135
"""Patch a dataset's metadata."""
133
136
DATASET_NAME = 'dataset_patch_%d' % (_millis (),)
134
137
dataset = client .dataset (DATASET_NAME )
@@ -148,8 +151,7 @@ def dataset_patch(client, to_delete):
148
151
# [END dataset_patch]
149
152
150
153
151
- @snippet
152
- def dataset_update (client , to_delete ):
154
+ def test_dataset_update (client , to_delete ):
153
155
"""Update a dataset's metadata."""
154
156
DATASET_NAME = 'dataset_update_%d' % (_millis (),)
155
157
dataset = client .dataset (DATASET_NAME )
@@ -178,8 +180,7 @@ def dataset_update(client, to_delete):
178
180
# [END dataset_update]
179
181
180
182
181
- @snippet
182
- def dataset_delete (client , _ ):
183
+ def test_dataset_delete (client ):
183
184
"""Delete a dataset."""
184
185
DATASET_NAME = 'dataset_delete_%d' % (_millis (),)
185
186
dataset = client .dataset (DATASET_NAME )
@@ -192,8 +193,7 @@ def dataset_delete(client, _):
192
193
# [END dataset_delete]
193
194
194
195
195
- @snippet
196
- def dataset_list_tables (client , to_delete ):
196
+ def test_dataset_list_tables (client , to_delete ):
197
197
"""List tables within a dataset."""
198
198
DATASET_NAME = 'dataset_list_tables_dataset_%d' % (_millis (),)
199
199
TABLE_NAME = 'dataset_list_tables_table_%d' % (_millis (),)
@@ -214,8 +214,7 @@ def dataset_list_tables(client, to_delete):
214
214
to_delete .insert (0 , table )
215
215
216
216
217
- @snippet
218
- def table_create (client , to_delete ):
217
+ def test_table_create (client , to_delete ):
219
218
"""Create a table."""
220
219
DATASET_NAME = 'table_create_dataset_%d' % (_millis (),)
221
220
TABLE_NAME = 'table_create_table_%d' % (_millis (),)
@@ -231,8 +230,7 @@ def table_create(client, to_delete):
231
230
to_delete .insert (0 , table )
232
231
233
232
234
- @snippet
235
- def table_exists (client , to_delete ):
233
+ def test_table_exists (client , to_delete ):
236
234
"""Test existence of a table."""
237
235
DATASET_NAME = 'table_exists_dataset_%d' % (_millis (),)
238
236
TABLE_NAME = 'table_exists_table_%d' % (_millis (),)
@@ -250,8 +248,7 @@ def table_exists(client, to_delete):
250
248
to_delete .insert (0 , table )
251
249
252
250
253
- @snippet
254
- def table_reload (client , to_delete ):
251
+ def test_table_reload (client , to_delete ):
255
252
"""Reload a table's metadata."""
256
253
DATASET_NAME = 'table_reload_dataset_%d' % (_millis (),)
257
254
TABLE_NAME = 'table_reload_table_%d' % (_millis (),)
@@ -276,8 +273,7 @@ def table_reload(client, to_delete):
276
273
# [END table_reload]
277
274
278
275
279
- @snippet
280
- def table_patch (client , to_delete ):
276
+ def test_table_patch (client , to_delete ):
281
277
"""Patch a table's metadata."""
282
278
DATASET_NAME = 'table_patch_dataset_%d' % (_millis (),)
283
279
TABLE_NAME = 'table_patch_table_%d' % (_millis (),)
@@ -304,8 +300,7 @@ def table_patch(client, to_delete):
304
300
# [END table_patch]
305
301
306
302
307
- @snippet
308
- def table_update (client , to_delete ):
303
+ def test_table_update (client , to_delete ):
309
304
"""Update a table's metadata."""
310
305
DATASET_NAME = 'table_update_dataset_%d' % (_millis (),)
311
306
TABLE_NAME = 'table_update_table_%d' % (_millis (),)
@@ -350,8 +345,7 @@ def _warm_up_inserted_table_data(table):
350
345
time .sleep (5 )
351
346
352
347
353
- @snippet
354
- def table_insert_fetch_data (client , to_delete ):
348
+ def test_table_insert_fetch_data (client , to_delete ):
355
349
"""Insert / fetch table data."""
356
350
DATASET_NAME = 'table_insert_fetch_data_dataset_%d' % (_millis (),)
357
351
TABLE_NAME = 'table_insert_fetch_data_table_%d' % (_millis (),)
@@ -391,11 +385,8 @@ def do_something(row):
391
385
assert found == to_insert
392
386
393
387
394
- @snippet
395
- def table_upload_from_file (client , to_delete ):
388
+ def test_table_upload_from_file (client , to_delete ):
396
389
"""Upload table data from a CSV file."""
397
- import csv
398
- import tempfile
399
390
DATASET_NAME = 'table_upload_from_file_dataset_%d' % (_millis (),)
400
391
TABLE_NAME = 'table_upload_from_file_table_%d' % (_millis (),)
401
392
dataset = client .dataset (DATASET_NAME )
@@ -406,19 +397,15 @@ def table_upload_from_file(client, to_delete):
406
397
table .create ()
407
398
to_delete .insert (0 , table )
408
399
409
- csv_file = tempfile .NamedTemporaryFile (suffix = '.csv' )
410
- to_delete .append (_CloseOnDelete (csv_file ))
411
-
412
400
# [START table_upload_from_file]
413
- writer = csv .writer (csv_file )
414
- writer .writerow ((b'full_name' , b'age' ))
415
- writer .writerow ((b'Phred Phlyntstone' , b'32' ))
416
- writer .writerow ((b'Wylma Phlyntstone' , b'29' ))
417
- csv_file .flush ()
418
-
419
- with open (csv_file .name , 'rb' ) as readable :
420
- table .upload_from_file (
421
- readable , source_format = 'CSV' , skip_leading_rows = 1 )
401
+ csv_file = six .BytesIO (b"""full_name,age
402
+ Phred Phlyntstone,32
403
+ Wylma Phlyntstone,29
404
+ """ )
405
+
406
+ load_job = table .upload_from_file (
407
+ csv_file , source_format = 'CSV' , skip_leading_rows = 1 )
408
+ load_job .result () # Wait for table load to complete.
422
409
# [END table_upload_from_file]
423
410
424
411
_warm_up_inserted_table_data (table )
@@ -431,12 +418,11 @@ def table_upload_from_file(client, to_delete):
431
418
432
419
assert len (rows ) == total == 2
433
420
assert token is None
434
- assert rows [ 0 ] == (u'Phred Phlyntstone' , 32 )
435
- assert rows [ 1 ] == (u'Wylma Phlyntstone' , 29 )
421
+ assert (u'Phred Phlyntstone' , 32 ) in rows
422
+ assert (u'Wylma Phlyntstone' , 29 ) in rows
436
423
437
424
438
- @snippet
439
- def table_delete (client , to_delete ):
425
+ def test_table_delete (client , to_delete ):
440
426
"""Delete a table."""
441
427
DATASET_NAME = 'table_delete_dataset_%d' % (_millis (),)
442
428
TABLE_NAME = 'table_create_table_%d' % (_millis (),)
@@ -454,8 +440,7 @@ def table_delete(client, to_delete):
454
440
# [END table_delete]
455
441
456
442
457
- @snippet
458
- def client_list_jobs (client , _ ):
443
+ def test_client_list_jobs (client ):
459
444
"""List jobs for a project."""
460
445
461
446
def do_something_with (_ ):
@@ -468,12 +453,11 @@ def do_something_with(_):
468
453
# [END client_list_jobs]
469
454
470
455
471
- @snippet
472
- def client_run_sync_query (client , _ ):
456
+ def test_client_run_sync_query (client ):
473
457
"""Run a synchronous query."""
474
458
LIMIT = 100
475
459
LIMITED = '%s LIMIT %d' % (QUERY , LIMIT )
476
- TIMEOUT_MS = 1000
460
+ TIMEOUT_MS = 10000
477
461
478
462
# [START client_run_sync_query]
479
463
query = client .run_sync_query (LIMITED )
@@ -486,15 +470,14 @@ def client_run_sync_query(client, _):
486
470
# [END client_run_sync_query]
487
471
488
472
489
- @snippet
490
- def client_run_sync_query_w_param (client , _ ):
473
+ def test_client_run_sync_query_w_param (client ):
491
474
"""Run a synchronous query using a query parameter"""
492
475
QUERY_W_PARAM = (
493
476
'SELECT name FROM `bigquery-public-data.usa_names.usa_1910_2013` '
494
477
'WHERE state = @state' )
495
478
LIMIT = 100
496
479
LIMITED = '%s LIMIT %d' % (QUERY_W_PARAM , LIMIT )
497
- TIMEOUT_MS = 1000
480
+ TIMEOUT_MS = 10000
498
481
499
482
# [START client_run_sync_query_w_param]
500
483
from google .cloud .bigquery import ScalarQueryParameter
@@ -510,10 +493,9 @@ def client_run_sync_query_w_param(client, _):
510
493
# [END client_run_sync_query_w_param]
511
494
512
495
513
- @snippet
514
- def client_run_sync_query_paged (client , _ ):
496
+ def test_client_run_sync_query_paged (client ):
515
497
"""Run a synchronous query with paged results."""
516
- TIMEOUT_MS = 1000
498
+ TIMEOUT_MS = 10000
517
499
PAGE_SIZE = 100
518
500
LIMIT = 1000
519
501
LIMITED = '%s LIMIT %d' % (QUERY , LIMIT )
@@ -543,8 +525,7 @@ def do_something_with(row):
543
525
assert len (all_rows ) == LIMIT
544
526
545
527
546
- @snippet
547
- def client_run_sync_query_timeout (client , _ ):
528
+ def test_client_run_sync_query_timeout (client ):
548
529
"""Run a synchronous query w/ timeout"""
549
530
TIMEOUT_MS = 10
550
531
@@ -580,28 +561,5 @@ def do_something_with(row):
580
561
assert len (all_rows ) == iterator .total_rows
581
562
582
563
583
- def _find_examples ():
584
- funcs = [obj for obj in globals ().values ()
585
- if getattr (obj , '_snippet' , False )]
586
- for func in sorted (funcs , key = lambda f : f .func_code .co_firstlineno ):
587
- yield func
588
-
589
-
590
- def main ():
591
- client = Client ()
592
- for example in _find_examples ():
593
- to_delete = []
594
- print ('%-30s: %s' % (
595
- example .func_name , example .func_doc ))
596
- try :
597
- example (client , to_delete )
598
- except AssertionError as e :
599
- print (' FAIL: %s' % (e ,))
600
- except Exception as e : # pylint: disable=broad-except
601
- print (' ERROR: %r' % (e ,))
602
- for item in to_delete :
603
- item .delete ()
604
-
605
-
606
564
if __name__ == '__main__' :
607
- main ()
565
+ pytest . main ()
0 commit comments