Skip to content

Commit 8850b99

Browse files
thodson-usgsclaude
andcommitted
Clean up review findings from ci-fix
- Remove stray PR217.md tracking file - Extract duplicated HTML-response detection into _parse_json_or_raise helper - Remove dead defunct_services entry from get_record type check - Point get_record defunct NameError to replacement functions - Remove unreachable empty-dfs branch in _walk_pages Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 2348a19 commit 8850b99

3 files changed

Lines changed: 32 additions & 61 deletions

File tree

PR217.md

Lines changed: 0 additions & 26 deletions
This file was deleted.

dataretrieval/nwis.py

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,26 @@
4545
_CRS = "EPSG:4269"
4646

4747

48+
def _parse_json_or_raise(response: requests.Response) -> pd.DataFrame:
49+
"""Parse a JSON NWIS response, raising a helpful error on HTML responses."""
50+
try:
51+
return _read_json(response.json())
52+
except (ValueError, JSONDecodeError) as e:
53+
text_lower = response.text.lower()
54+
content_type = response.headers.get("Content-Type", "").lower()
55+
if (
56+
"<html>" in text_lower
57+
or "<!doctype" in text_lower
58+
or "text/html" in content_type
59+
):
60+
raise ValueError(
61+
f"Received HTML response instead of JSON from {response.url} "
62+
f"(Status: {response.status_code}). This often indicates "
63+
"that the service is currently unavailable."
64+
) from e
65+
raise
66+
67+
4868
def format_response(
4969
df: pd.DataFrame, service: str | None = None, **kwargs
5070
) -> pd.DataFrame:
@@ -482,20 +502,7 @@ def get_dv(
482502
kwargs["multi_index"] = multi_index
483503

484504
response = query_waterservices("dv", format="json", ssl_check=ssl_check, **kwargs)
485-
try:
486-
df = _read_json(response.json())
487-
except (ValueError, JSONDecodeError) as e:
488-
if (
489-
"<html>" in response.text.lower()
490-
or "<!doctype" in response.text.lower()
491-
or "text/html" in response.headers.get("Content-Type", "").lower()
492-
):
493-
raise ValueError(
494-
f"Received HTML response instead of JSON from {response.url} "
495-
f"(Status: {response.status_code}). This often indicates "
496-
"that the service is currently unavailable."
497-
) from e
498-
raise
505+
df = _parse_json_or_raise(response)
499506

500507
return format_response(df, **kwargs), NWIS_Metadata(response, **kwargs)
501508

@@ -681,20 +688,7 @@ def get_iv(
681688
service="iv", format="json", ssl_check=ssl_check, **kwargs
682689
)
683690

684-
try:
685-
df = _read_json(response.json())
686-
except (ValueError, JSONDecodeError) as e:
687-
if (
688-
"<html>" in response.text.lower()
689-
or "<!doctype" in response.text.lower()
690-
or "text/html" in response.headers.get("Content-Type", "").lower()
691-
):
692-
raise ValueError(
693-
f"Received HTML response instead of JSON from {response.url} "
694-
f"(Status: {response.status_code}). This often indicates "
695-
"that the service is currently unavailable."
696-
) from e
697-
raise
691+
df = _parse_json_or_raise(response)
698692
return format_response(df, **kwargs), NWIS_Metadata(response, **kwargs)
699693

700694

@@ -915,13 +909,19 @@ def get_record(
915909
"""
916910
_check_sites_value_types(sites)
917911

918-
defunct_services = ["measurements", "gwlevels", "pmcodes", "water_use"]
919-
if service in defunct_services:
912+
defunct_replacements = {
913+
"measurements": "`waterdata.get_field_measurements`",
914+
"gwlevels": "`waterdata.get_field_measurements`",
915+
"pmcodes": "`waterdata.get_reference_table`",
916+
"water_use": "no replacement available",
917+
}
918+
if service in defunct_replacements:
920919
raise NameError(
921-
f"The NWIS service '{service}' is no longer supported by get_record."
920+
f"The NWIS service '{service}' is no longer supported by "
921+
f"get_record. Use {defunct_replacements[service]} instead."
922922
)
923923

924-
if service not in WATERSERVICES_SERVICES + WATERDATA_SERVICES + defunct_services:
924+
if service not in WATERSERVICES_SERVICES + WATERDATA_SERVICES:
925925
raise TypeError(f"Unrecognized service: {service}")
926926

927927
if service == "iv":

dataretrieval/waterdata/utils.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -610,9 +610,6 @@ def _walk_pages(
610610
curr_url = None
611611

612612
# Concatenate all pages at once for efficiency
613-
if not dfs:
614-
return pd.DataFrame(), initial_response
615-
616613
return pd.concat(dfs, ignore_index=True), initial_response
617614
finally:
618615
if close_client:

0 commit comments

Comments
 (0)