22
22
)
23
23
from dataretrieval .utils import NoSitesError
24
24
25
+ try :
26
+ import geopandas as gpd
27
+ except ImportError :
28
+ gpd = None
25
29
26
30
def test_query_waterdata_validation ():
27
31
"""Tests the validation parameters of the query_waterservices method"""
@@ -80,7 +84,10 @@ def test_get_dv(requests_mock):
80
84
response_file_path = 'data/waterservices_dv.txt'
81
85
mock_request (requests_mock , request_url , response_file_path )
82
86
df , md = get_dv (sites = ["01491000" , "01645000" ], start = '2020-02-14' , end = '2020-02-15' )
83
- assert type (df ) is DataFrame
87
+
88
+ if not isinstance (df , DataFrame ):
89
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
90
+
84
91
assert df .size == 8
85
92
assert_metadata (requests_mock , request_url , md , site , None , format )
86
93
@@ -99,7 +106,9 @@ def test_get_dv_site_value_types(requests_mock, site_input_type_list):
99
106
else :
100
107
sites = site
101
108
df , md = get_dv (sites = sites , start = '2020-02-14' , end = '2020-02-15' )
102
- assert type (df ) is DataFrame
109
+ if not isinstance (df , DataFrame ):
110
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
111
+
103
112
assert df .size == 8
104
113
105
114
@@ -112,7 +121,9 @@ def test_get_iv(requests_mock):
112
121
response_file_path = 'data/waterservices_iv.txt'
113
122
mock_request (requests_mock , request_url , response_file_path )
114
123
df , md = get_iv (sites = ["01491000" , "01645000" ], start = '2019-02-14' , end = '2020-02-15' )
115
- assert type (df ) is DataFrame
124
+ if not isinstance (df , DataFrame ):
125
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
126
+
116
127
assert df .size == 563380
117
128
assert md .url == request_url
118
129
assert_metadata (requests_mock , request_url , md , site , None , format )
@@ -132,7 +143,8 @@ def test_get_iv_site_value_types(requests_mock, site_input_type_list):
132
143
else :
133
144
sites = site
134
145
df , md = get_iv (sites = sites , start = '2019-02-14' , end = '2020-02-15' )
135
- assert type (df ) is DataFrame
146
+ if not isinstance (df , DataFrame ):
147
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
136
148
assert df .size == 563380
137
149
assert md .url == request_url
138
150
@@ -142,15 +154,26 @@ def test_get_info(requests_mock):
142
154
Tests get_info method correctly generates the request url and returns the result in a DataFrame.
143
155
Note that only sites and format are passed as query params
144
156
"""
157
+ size = 24
145
158
format = "rdb"
146
159
site = '01491000%2C01645000'
147
160
parameter_cd = "00618"
148
161
request_url = 'https://waterservices.usgs.gov/nwis/site?sites={}¶meterCd={}&siteOutput=Expanded&format={}' .format (site , parameter_cd , format )
149
162
response_file_path = 'data/waterservices_site.txt'
150
163
mock_request (requests_mock , request_url , response_file_path )
151
164
df , md = get_info (sites = ["01491000" , "01645000" ], parameterCd = "00618" )
152
- assert type (df ) is DataFrame
153
- assert df .size == 24
165
+ if not isinstance (df , DataFrame ):
166
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
167
+
168
+ if "geometry" in list (df ):
169
+ geom_type = df .geom_type .unique ()
170
+ if len (geom_type ) > 1 or geom_type [0 ] != "Point" :
171
+ raise AssertionError (
172
+ f"Geometry type { geom_type } not valid, expecting Point"
173
+ )
174
+ size += len (df )
175
+
176
+ assert df .size == size
154
177
assert md .url == request_url
155
178
assert_metadata (requests_mock , request_url , md , site , [parameter_cd ], format )
156
179
@@ -167,7 +190,19 @@ def test_get_qwdata(requests_mock):
167
190
mock_request (requests_mock , request_url , response_file_path )
168
191
with pytest .warns (DeprecationWarning ):
169
192
df , md = get_qwdata (sites = ["01491000" , "01645000" ])
170
- assert type (df ) is DataFrame
193
+ if not isinstance (df , DataFrame ):
194
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
195
+
196
+ if "geometry" in list (df ):
197
+ if not isinstance (df , gpd .GeoDataFrame ):
198
+ raise AssertionError (f"{ type (df )} is not a GeoDataFrame" )
199
+
200
+ geom_type = df .geom_type .unique ()
201
+ if len (geom_type ) > 1 or geom_type [0 ] != "Point" :
202
+ raise AssertionError (
203
+ f"Geometry type { geom_type } not valid, expecting Point"
204
+ )
205
+
171
206
assert df .size == 1821472
172
207
assert_metadata (requests_mock , request_url , md , site , None , format )
173
208
@@ -202,7 +237,9 @@ def test_get_gwlevels(requests_mock):
202
237
response_file_path = 'data/waterservices_gwlevels.txt'
203
238
mock_request (requests_mock , request_url , response_file_path )
204
239
df , md = get_gwlevels (sites = [site ])
205
- assert type (df ) is DataFrame
240
+ if not isinstance (df , DataFrame ):
241
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
242
+
206
243
assert df .size == 16
207
244
assert_metadata (requests_mock , request_url , md , site , None , format )
208
245
@@ -221,7 +258,8 @@ def test_get_gwlevels_site_value_types(requests_mock, site_input_type_list):
221
258
else :
222
259
sites = site
223
260
df , md = get_gwlevels (sites = sites )
224
- assert type (df ) is DataFrame
261
+ if not isinstance (df , DataFrame ):
262
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
225
263
assert df .size == 16
226
264
227
265
@@ -234,7 +272,9 @@ def test_get_discharge_peaks(requests_mock):
234
272
response_file_path = 'data/waterservices_peaks.txt'
235
273
mock_request (requests_mock , request_url , response_file_path )
236
274
df , md = get_discharge_peaks (sites = [site ], start = '2000-02-14' , end = '2020-02-15' )
237
- assert type (df ) is DataFrame
275
+ if not isinstance (df , DataFrame ):
276
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
277
+
238
278
assert df .size == 240
239
279
assert_metadata (requests_mock , request_url , md , site , None , format )
240
280
@@ -255,7 +295,9 @@ def test_get_discharge_peaks_sites_value_types(requests_mock, site_input_type_li
255
295
sites = site
256
296
257
297
df , md = get_discharge_peaks (sites = sites , start = '2000-02-14' , end = '2020-02-15' )
258
- assert type (df ) is DataFrame
298
+ if not isinstance (df , DataFrame ):
299
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
300
+
259
301
assert df .size == 240
260
302
261
303
@@ -269,7 +311,9 @@ def test_get_discharge_measurements(requests_mock):
269
311
response_file_path = 'data/waterdata_measurements.txt'
270
312
mock_request (requests_mock , request_url , response_file_path )
271
313
df , md = get_discharge_measurements (sites = [site ], start = '2000-02-14' , end = '2020-02-15' )
272
- assert type (df ) is DataFrame
314
+ if not isinstance (df , DataFrame ):
315
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
316
+
273
317
assert df .size == 2130
274
318
assert_metadata (requests_mock , request_url , md , site , None , format )
275
319
@@ -288,7 +332,8 @@ def test_get_discharge_measurements_sites_value_types(requests_mock, site_input_
288
332
else :
289
333
sites = site
290
334
df , md = get_discharge_measurements (sites = sites , start = '2000-02-14' , end = '2020-02-15' )
291
- assert type (df ) is DataFrame
335
+ if not isinstance (df , DataFrame ):
336
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
292
337
assert df .size == 2130
293
338
294
339
@@ -300,7 +345,8 @@ def test_get_pmcodes(requests_mock):
300
345
response_file_path = 'data/waterdata_pmcodes.txt'
301
346
mock_request (requests_mock , request_url , response_file_path )
302
347
df , md = get_pmcodes (parameterCd = '00618' )
303
- assert type (df ) is DataFrame
348
+ if not isinstance (df , DataFrame ):
349
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
304
350
assert df .size == 13
305
351
assert_metadata (requests_mock , request_url , md , None , None , format )
306
352
@@ -319,7 +365,8 @@ def test_get_pmcodes_parameterCd_value_types(requests_mock, parameterCd_input_ty
319
365
else :
320
366
parameterCd = parameterCd
321
367
df , md = get_pmcodes (parameterCd = parameterCd )
322
- assert type (df ) is DataFrame
368
+ if not isinstance (df , DataFrame ):
369
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
323
370
assert df .size == 13
324
371
325
372
@@ -332,7 +379,8 @@ def test_get_water_use_national(requests_mock):
332
379
response_file_path = 'data/water_use_national.txt'
333
380
mock_request (requests_mock , request_url , response_file_path )
334
381
df , md = get_water_use ()
335
- assert type (df ) is DataFrame
382
+ if not isinstance (df , DataFrame ):
383
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
336
384
assert df .size == 225
337
385
assert_metadata (requests_mock , request_url , md , None , None , format )
338
386
@@ -369,7 +417,8 @@ def test_get_water_use_national_county_value_types(requests_mock, county_input_t
369
417
else :
370
418
counties = county
371
419
df , md = get_water_use (counties = counties )
372
- assert type (df ) is DataFrame
420
+ if not isinstance (df , DataFrame ):
421
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
373
422
assert df .size == 225
374
423
375
424
@@ -387,7 +436,8 @@ def test_get_water_use_national_county_value_types(requests_mock, category_input
387
436
else :
388
437
categories = category
389
438
df , md = get_water_use (categories = categories )
390
- assert type (df ) is DataFrame
439
+ if not isinstance (df , DataFrame ):
440
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
391
441
assert df .size == 225
392
442
393
443
@@ -400,7 +450,8 @@ def test_get_water_use_allegheny(requests_mock):
400
450
response_file_path = 'data/water_use_allegheny.txt'
401
451
mock_request (requests_mock , request_url , response_file_path )
402
452
df , md = get_water_use (state = "PA" , counties = "003" )
403
- assert type (df ) is DataFrame
453
+ if not isinstance (df , DataFrame ):
454
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
404
455
assert df .size == 1981
405
456
assert_metadata (requests_mock , request_url , md , None , None , format )
406
457
@@ -421,13 +472,16 @@ def test_get_ratings(requests_mock):
421
472
response_file_path = 'data/waterservices_ratings.txt'
422
473
mock_request (requests_mock , request_url , response_file_path )
423
474
df , md = get_ratings (site_no = site )
424
- assert type (df ) is DataFrame
475
+ if not isinstance (df , DataFrame ):
476
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
477
+
425
478
assert df .size == 33
426
479
assert_metadata (requests_mock , request_url , md , site , None , format )
427
480
428
481
429
482
def test_what_sites (requests_mock ):
430
483
"""Tests what_sites method correctly generates the request url and returns the result in a DataFrame"""
484
+ size = 2472
431
485
format = "rdb"
432
486
parameter_cd = '00010%2C00060'
433
487
parameter_cd_list = ["00010" ,"00060" ]
@@ -437,8 +491,22 @@ def test_what_sites(requests_mock):
437
491
mock_request (requests_mock , request_url , response_file_path )
438
492
439
493
df , md = what_sites (bBox = [- 83.0 ,36.5 ,- 81.0 ,38.5 ], parameterCd = parameter_cd_list , hasDataTypeCd = "dv" )
440
- assert type (df ) is DataFrame
441
- assert df .size == 2472
494
+ if not isinstance (df , DataFrame ):
495
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
496
+
497
+ if gpd is not None :
498
+ if not isinstance (df , gpd .GeoDataFrame ):
499
+ raise AssertionError (f"{ type (df )} is not a GeoDataFrame" )
500
+
501
+ geom_type = df .geom_type .unique ()
502
+ if len (geom_type ) > 1 or geom_type [0 ] != "Point" :
503
+ raise AssertionError (
504
+ f"Geometry type { geom_type } not valid, expecting Point"
505
+ )
506
+
507
+ size += len (df )
508
+
509
+ assert df .size == size
442
510
assert_metadata (requests_mock , request_url , md , None , parameter_cd_list , format )
443
511
444
512
@@ -450,7 +518,8 @@ def test_get_stats(requests_mock):
450
518
mock_request (requests_mock , request_url , response_file_path )
451
519
452
520
df , md = get_stats (sites = ["01491000" , "01645000" ])
453
- assert type (df ) is DataFrame
521
+ if not isinstance (df , DataFrame ):
522
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
454
523
assert df .size == 51936
455
524
assert_metadata (requests_mock , request_url , md , None , None , format )
456
525
@@ -468,7 +537,8 @@ def test_get_stats_site_value_types(requests_mock, site_input_type_list):
468
537
else :
469
538
sites = site
470
539
df , md = get_stats (sites = sites )
471
- assert type (df ) is DataFrame
540
+ if not isinstance (df , DataFrame ):
541
+ raise AssertionError (f"{ type (df )} is not DataFrame base class type" )
472
542
assert df .size == 51936
473
543
474
544
@@ -486,7 +556,10 @@ def assert_metadata(requests_mock, request_url, md, site, parameter_cd, format):
486
556
with open ('data/waterservices_site.txt' ) as text :
487
557
requests_mock .get (site_request_url , text = text .read ())
488
558
site_info , _ = md .site_info
489
- assert type (site_info ) is DataFrame
559
+ if not isinstance (site_info , DataFrame ):
560
+ raise AssertionError (
561
+ f"{ type (site_info )} is not DataFrame base class type"
562
+ )
490
563
if parameter_cd is None :
491
564
assert md .variable_info is None
492
565
else :
0 commit comments