From 238abac68ce9b513c40540b7402695d7ac7fd640 Mon Sep 17 00:00:00 2001 From: thodson-usgs Date: Sat, 30 May 2026 14:19:15 -0400 Subject: [PATCH] fix(waterdata)!: return (df, BaseMetadata) from get_codes Every other public waterdata getter returns a (DataFrame, BaseMetadata) tuple, but get_codes returned a bare DataFrame, so the module's universal idiom `df, md = waterdata.get_codes(...)` raised an unpack error. It already builds `response` (and calls _raise_for_non_200), so the metadata was in hand and discarded. BREAKING: callers doing `df = get_codes(...)` must switch to `df, _ = get_codes(...)`. Co-Authored-By: Claude Opus 4.8 (1M context) --- dataretrieval/waterdata/api.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/dataretrieval/waterdata/api.py b/dataretrieval/waterdata/api.py index 1e6d0aa0..2facb2d0 100644 --- a/dataretrieval/waterdata/api.py +++ b/dataretrieval/waterdata/api.py @@ -2100,7 +2100,7 @@ def get_reference_table( ) -def get_codes(code_service: CODE_SERVICES) -> pd.DataFrame: +def get_codes(code_service: CODE_SERVICES) -> tuple[pd.DataFrame, BaseMetadata]: """Return codes from a Samples code service. Parameters @@ -2109,6 +2109,13 @@ def get_codes(code_service: CODE_SERVICES) -> pd.DataFrame: One of the following options: "states", "counties", "countries" "sitetype", "samplemedia", "characteristicgroup", "characteristics", or "observedproperty" + + Returns + ------- + df : ``pandas.DataFrame`` + The requested code table. + md : :obj:`dataretrieval.utils.BaseMetadata` + Metadata for the query (URL, query time, response headers). """ valid_code_services = get_args(CODE_SERVICES) if code_service not in valid_code_services: @@ -2128,7 +2135,7 @@ def get_codes(code_service: CODE_SERVICES) -> pd.DataFrame: df = pd.DataFrame(data_list) - return df + return df, BaseMetadata(response) def _get_samples_csv(