From 230333bc63e150ee4c631a322ceae37576538e30 Mon Sep 17 00:00:00 2001 From: thodson-usgs Date: Mon, 13 Apr 2026 17:27:54 -0500 Subject: [PATCH] Remove waterwatch module The WaterWatch web service was shut down and get_flood_stage() no longer works. Remove waterwatch.py and its import from __init__.py. Closes #137. Co-Authored-By: Claude Sonnet 4.6 --- dataretrieval/__init__.py | 1 - dataretrieval/waterwatch.py | 80 ------------------------------------- 2 files changed, 81 deletions(-) delete mode 100644 dataretrieval/waterwatch.py diff --git a/dataretrieval/__init__.py b/dataretrieval/__init__.py index ffc81bb2..ca302ce0 100644 --- a/dataretrieval/__init__.py +++ b/dataretrieval/__init__.py @@ -11,5 +11,4 @@ from dataretrieval.streamstats import * from dataretrieval.utils import * from dataretrieval.waterdata import * -from dataretrieval.waterwatch import * from dataretrieval.wqp import * diff --git a/dataretrieval/waterwatch.py b/dataretrieval/waterwatch.py deleted file mode 100644 index 13fa22e4..00000000 --- a/dataretrieval/waterwatch.py +++ /dev/null @@ -1,80 +0,0 @@ -from __future__ import annotations - -import pandas as pd -import requests - -ResponseFormat = "json" # json, xml - -# WaterWatch won't receive any new features but it will continue to operate. -waterwatch_url = "https://waterwatch.usgs.gov/webservices/" - - -def _read_json(data: dict) -> pd.DataFrame: - return pd.DataFrame(data).T - - -def get_flood_stage( - sites: list[str] | None = None, fmt: str = "DF" -) -> pd.DataFrame | dict: - """ - Retrieves flood stages for a list of station numbers. - - Parameters - ---------- - sites: List of strings - Site numbers - fmt: ``pandas.DataFrame`` or dict - Returned format: Default is "DF" for ``pandas.DataFrame``, else - a dictionary is returned. - - Returns - ------- - station_stages: ``pandas.Dataframe`` or dict - contains station numbers and their flood stages. - If no flood stage for a station, ``None`` is returned. - - Examples - -------- - .. doctest:: - - >> stations = ["07144100", "07144101"] - >> res = get_flood_stage(stations, fmt="dict") # dictionary output - >> print(res) - {'07144100': {'action_stage': '20', - 'flood_stage': '22', - 'moderate_flood_stage': '25', - 'major_flood_stage': '26'}, - '07144101': None} - >> print(get_flood_stage(stations)) - >> print(res) - action_stage flood_stage moderate_flood_stage major_flood_stage - 07144100 20 22 25 26 - 07144101 None None None None - 50057000 16 20 24 30 - - """ - res = requests.get(waterwatch_url + "floodstage", params={"format": ResponseFormat}) - - if res.ok: - json_res = res.json() - stages = { - site["site_no"]: {k: v for k, v in site.items() if k != "site_no"} - for site in json_res["sites"] - } - else: - raise requests.RequestException(f"[{res.status_code}] - {res.reason}") - - if not sites: - stations_stages = stages - else: - stations_stages = {} - for site in sites: - try: - stations_stages[site] = stages[site] - except KeyError: - stations_stages[site] = None - - if fmt == "dict": - return stations_stages - else: - return _read_json(stations_stages)