2222)
2323from dataretrieval .utils import NoSitesError
2424
25+ try :
26+ import geopandas as gpd
27+ except ImportError :
28+ gpd = None
2529
2630def test_query_waterdata_validation ():
2731 """Tests the validation parameters of the query_waterservices method"""
@@ -80,7 +84,10 @@ def test_get_dv(requests_mock):
8084 response_file_path = 'data/waterservices_dv.txt'
8185 mock_request (requests_mock , request_url , response_file_path )
8286 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+
8491 assert df .size == 8
8592 assert_metadata (requests_mock , request_url , md , site , None , format )
8693
@@ -99,7 +106,9 @@ def test_get_dv_site_value_types(requests_mock, site_input_type_list):
99106 else :
100107 sites = site
101108 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+
103112 assert df .size == 8
104113
105114
@@ -112,7 +121,9 @@ def test_get_iv(requests_mock):
112121 response_file_path = 'data/waterservices_iv.txt'
113122 mock_request (requests_mock , request_url , response_file_path )
114123 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+
116127 assert df .size == 563380
117128 assert md .url == request_url
118129 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):
132143 else :
133144 sites = site
134145 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" )
136148 assert df .size == 563380
137149 assert md .url == request_url
138150
@@ -142,15 +154,26 @@ def test_get_info(requests_mock):
142154 Tests get_info method correctly generates the request url and returns the result in a DataFrame.
143155 Note that only sites and format are passed as query params
144156 """
157+ size = 24
145158 format = "rdb"
146159 site = '01491000%2C01645000'
147160 parameter_cd = "00618"
148161 request_url = 'https://waterservices.usgs.gov/nwis/site?sites={}¶meterCd={}&siteOutput=Expanded&format={}' .format (site , parameter_cd , format )
149162 response_file_path = 'data/waterservices_site.txt'
150163 mock_request (requests_mock , request_url , response_file_path )
151164 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
154177 assert md .url == request_url
155178 assert_metadata (requests_mock , request_url , md , site , [parameter_cd ], format )
156179
@@ -167,7 +190,19 @@ def test_get_qwdata(requests_mock):
167190 mock_request (requests_mock , request_url , response_file_path )
168191 with pytest .warns (DeprecationWarning ):
169192 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+
171206 assert df .size == 1821472
172207 assert_metadata (requests_mock , request_url , md , site , None , format )
173208
@@ -202,7 +237,9 @@ def test_get_gwlevels(requests_mock):
202237 response_file_path = 'data/waterservices_gwlevels.txt'
203238 mock_request (requests_mock , request_url , response_file_path )
204239 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+
206243 assert df .size == 16
207244 assert_metadata (requests_mock , request_url , md , site , None , format )
208245
@@ -221,7 +258,8 @@ def test_get_gwlevels_site_value_types(requests_mock, site_input_type_list):
221258 else :
222259 sites = site
223260 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" )
225263 assert df .size == 16
226264
227265
@@ -234,7 +272,9 @@ def test_get_discharge_peaks(requests_mock):
234272 response_file_path = 'data/waterservices_peaks.txt'
235273 mock_request (requests_mock , request_url , response_file_path )
236274 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+
238278 assert df .size == 240
239279 assert_metadata (requests_mock , request_url , md , site , None , format )
240280
@@ -255,7 +295,9 @@ def test_get_discharge_peaks_sites_value_types(requests_mock, site_input_type_li
255295 sites = site
256296
257297 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+
259301 assert df .size == 240
260302
261303
@@ -269,7 +311,9 @@ def test_get_discharge_measurements(requests_mock):
269311 response_file_path = 'data/waterdata_measurements.txt'
270312 mock_request (requests_mock , request_url , response_file_path )
271313 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+
273317 assert df .size == 2130
274318 assert_metadata (requests_mock , request_url , md , site , None , format )
275319
@@ -288,7 +332,8 @@ def test_get_discharge_measurements_sites_value_types(requests_mock, site_input_
288332 else :
289333 sites = site
290334 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" )
292337 assert df .size == 2130
293338
294339
@@ -300,7 +345,8 @@ def test_get_pmcodes(requests_mock):
300345 response_file_path = 'data/waterdata_pmcodes.txt'
301346 mock_request (requests_mock , request_url , response_file_path )
302347 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" )
304350 assert df .size == 13
305351 assert_metadata (requests_mock , request_url , md , None , None , format )
306352
@@ -319,7 +365,8 @@ def test_get_pmcodes_parameterCd_value_types(requests_mock, parameterCd_input_ty
319365 else :
320366 parameterCd = parameterCd
321367 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" )
323370 assert df .size == 13
324371
325372
@@ -332,7 +379,8 @@ def test_get_water_use_national(requests_mock):
332379 response_file_path = 'data/water_use_national.txt'
333380 mock_request (requests_mock , request_url , response_file_path )
334381 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" )
336384 assert df .size == 225
337385 assert_metadata (requests_mock , request_url , md , None , None , format )
338386
@@ -369,7 +417,8 @@ def test_get_water_use_national_county_value_types(requests_mock, county_input_t
369417 else :
370418 counties = county
371419 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" )
373422 assert df .size == 225
374423
375424
@@ -387,7 +436,8 @@ def test_get_water_use_national_county_value_types(requests_mock, category_input
387436 else :
388437 categories = category
389438 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" )
391441 assert df .size == 225
392442
393443
@@ -400,7 +450,8 @@ def test_get_water_use_allegheny(requests_mock):
400450 response_file_path = 'data/water_use_allegheny.txt'
401451 mock_request (requests_mock , request_url , response_file_path )
402452 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" )
404455 assert df .size == 1981
405456 assert_metadata (requests_mock , request_url , md , None , None , format )
406457
@@ -421,13 +472,16 @@ def test_get_ratings(requests_mock):
421472 response_file_path = 'data/waterservices_ratings.txt'
422473 mock_request (requests_mock , request_url , response_file_path )
423474 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+
425478 assert df .size == 33
426479 assert_metadata (requests_mock , request_url , md , site , None , format )
427480
428481
429482def test_what_sites (requests_mock ):
430483 """Tests what_sites method correctly generates the request url and returns the result in a DataFrame"""
484+ size = 2472
431485 format = "rdb"
432486 parameter_cd = '00010%2C00060'
433487 parameter_cd_list = ["00010" ,"00060" ]
@@ -437,8 +491,22 @@ def test_what_sites(requests_mock):
437491 mock_request (requests_mock , request_url , response_file_path )
438492
439493 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
442510 assert_metadata (requests_mock , request_url , md , None , parameter_cd_list , format )
443511
444512
@@ -450,7 +518,8 @@ def test_get_stats(requests_mock):
450518 mock_request (requests_mock , request_url , response_file_path )
451519
452520 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" )
454523 assert df .size == 51936
455524 assert_metadata (requests_mock , request_url , md , None , None , format )
456525
@@ -468,7 +537,8 @@ def test_get_stats_site_value_types(requests_mock, site_input_type_list):
468537 else :
469538 sites = site
470539 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" )
472542 assert df .size == 51936
473543
474544
@@ -486,7 +556,10 @@ def assert_metadata(requests_mock, request_url, md, site, parameter_cd, format):
486556 with open ('data/waterservices_site.txt' ) as text :
487557 requests_mock .get (site_request_url , text = text .read ())
488558 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+ )
490563 if parameter_cd is None :
491564 assert md .variable_info is None
492565 else :
0 commit comments