awdb.client.AWDBClient
awdb.client.AWDBClient(timeout=60, config=None)Async client for accessing data via the NRCS AWDB REST API.
The AWDB (Air-Water Database) API provides access to real-time and historical monitoring data from networks such as SCAN and SNOTEL.
Attributes
| Name | Description |
|---|---|
| timeout | Get the timeout in seconds (for backward compatibility). |
Methods
| Name | Description |
|---|---|
| check_station_data_availability | Check data availability for a station by querying coarser time granularity. |
| connect | Test connection to AWDB service. |
| find_nearby_stations | Find stations near a given location. |
| get_forecasts | Get forecast data for one or more stations. |
| get_reference_data | Get reference data from AWDB. |
| get_station_data | Get time series data for a specific station and element with enhanced options. |
| get_stations | Get list of available stations with comprehensive filtering options. |
check_station_data_availability
awdb.client.AWDBClient.check_station_data_availability(
station_triplet,
elements,
start_date,
end_date,
duration='MONTHLY',
ordinal=1,
)Check data availability for a station by querying coarser time granularity.
This method helps determine if a station has any data for a given element by using monthly aggregation, which is more likely to return results than daily data for sparse or intermittent measurements.
Args: station_triplet: Station identifier (e.g., ‘1234:UT:SNTL’) elements: Element code (e.g., ‘SMS’, ‘STO’, ‘PREC’) start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format duration: Data duration to check (‘MONTHLY’, ‘YEARLY’, etc.) ordinal: Sensor ordinal (1, 2, 3, etc. for multiple sensors)
Returns: Dictionary with availability information: - ‘has_data’: Boolean indicating if any data exists - ‘data_points’: Number of data points found - ‘date_range’: Date range checked - ‘sample_values’: List of up to 5 sample values with dates
Raises: AWDBQueryError: If station/element not found or invalid parameters AWDBConnectionError: If there are network or server issues
connect
awdb.client.AWDBClient.connect()Test connection to AWDB service.
Returns: True if connection successful
Raises: AWDBConnectionError: If connection fails
find_nearby_stations
awdb.client.AWDBClient.find_nearby_stations(
latitude,
longitude,
max_distance_km=50.0,
network_codes=None,
limit=10,
)Find stations near a given location.
Note: This method fetches all stations and filters client-side for distance. For large-scale applications, consider using the get_stations method with geographic filtering if available in future API versions.
Args: latitude: Target latitude (-90 to 90) longitude: Target longitude (-180 to 180) max_distance_km: Maximum search distance in kilometers network_codes: Optional network codes to filter by before distance limit: Maximum number of nearest stations to return
Returns: List of (StationInfo, distance_km) tuples, sorted by ascending distance
Raises: ValueError: If latitude/longitude are outside valid ranges AWDBQueryError: If station retrieval fails
get_forecasts
awdb.client.AWDBClient.get_forecasts(
station_triplets,
element_codes=None,
start_publication_date=None,
end_publication_date=None,
exceedence_probabilities=None,
forecast_periods=None,
)Get forecast data for one or more stations.
Args: station_triplets: List of station triplets (e.g., [‘302:OR:SNTL’]) element_codes: List of element codes (e.g., [‘RESC’, ‘SRVO’]) start_publication_date: Start date for publication period (YYYY-MM-DD) end_publication_date: End date for publication period (YYYY-MM-DD) exceedence_probabilities: List of exceedence probabilities (e.g., [10, 30, 50]) forecast_periods: List of forecast periods (e.g., [‘03-01’, ‘07-31’])
Returns: List of ForecastData objects
get_reference_data
awdb.client.AWDBClient.get_reference_data(reference_lists=None)Get reference data from AWDB.
Retrieves lookup tables and reference information used by the AWDB system, including elements, networks, units, states, and other metadata.
Args: reference_lists: List of reference data types to retrieve. Available options: ‘dcos’, ‘durations’, ‘elements’, ‘forecastPeriods’, ‘functions’, ‘instruments’, ‘networks’, ‘physicalElements’, ‘states’, ‘units’. If None, returns all reference data.
Returns: ReferenceData object containing requested reference information
Raises: AWDBQueryError: If invalid reference list specified AWDBConnectionError: If there are network or server issues
get_station_data
awdb.client.AWDBClient.get_station_data(
station_triplet,
elements,
start_date,
end_date,
duration='DAILY',
ordinal=1,
period_ref='END',
central_tendency_type='NONE',
return_flags=True,
return_original_values=False,
return_suspect_data=False,
insert_or_update_begin_date=None,
)Get time series data for a specific station and element with enhanced options.
This method provides access to all AWDB data retrieval parameters, including quality flags, central tendency calculations, and incremental data updates.
Args: station_triplet: Station identifier (e.g., ‘1234:UT:SNTL’) elements: Element code (e.g., ‘SMS’, ‘STO’, ‘PREC’) start_date: Start date in YYYY-MM-DD format end_date: End date in YYYY-MM-DD format duration: Data duration (‘DAILY’, ‘HOURLY’, ‘MONTHLY’, etc.) ordinal: Sensor ordinal (1, 2, 3, etc. for multiple sensors) period_ref: Timestamp reference (‘START’ or ‘END’ of period) central_tendency_type: Include averages/medians (‘NONE’, ‘ALL’, ‘MEDIAN’, ‘AVERAGE’) return_flags: Include quality control and assurance flags return_original_values: Include original values before processing return_suspect_data: Include data marked as suspect (normally filtered) insert_or_update_begin_date: For incremental updates (YYYY-MM-DD format)
Returns: List of TimeSeriesDataPoint objects with comprehensive data and quality information
Raises: AWDBQueryError: If station/element not found or invalid parameters AWDBConnectionError: If there are network or server issues
get_stations
awdb.client.AWDBClient.get_stations(
network_codes=None,
state_codes=None,
station_triplets=None,
station_names=None,
dco_codes=None,
county_names=None,
elements=None,
durations=None,
hucs=None,
return_forecast_point_metadata=False,
return_reservoir_metadata=False,
return_station_elements=False,
active_only=True,
limit=None,
)Get list of available stations with comprehensive filtering options.
This method leverages full AWDB API filtering capabilities, including wildcard support for station triplets, names, counties, and HUCs. All filtering is performed server-side for optimal performance.
Args: network_codes: Filter by network codes (e.g., [‘SCAN’, ‘SNTL’]). Supports wildcards like [‘:OR:’]. state_codes: Filter by state codes (e.g., [‘OR’, ‘WA’]) station_triplets: Filter by triplets with wildcards (e.g., [’*:OR:SNTL’, ‘302::’]) station_names: Filter by names with wildcards (e.g., [‘Lake’, ’Alab*’]) dco_codes: Filter by DCO codes county_names: Filter by county names with wildcards (e.g., [‘County’, ’Wall’]) elements: Filter by elements (format: elementCode:heightDepth:ordinal, supports wildcards) durations: Filter by durations (HOURLY, DAILY, SEMIMONTHLY, MONTHLY, CALENDAR_YEAR, WATER_YEAR, SEASONAL) hucs: Filter by HUC codes with wildcards (e.g., [‘170601’, ’050101’]) return_forecast_point_metadata: Include forecast point metadata for applicable stations return_reservoir_metadata: Include reservoir metadata for applicable stations return_station_elements: Include detailed station elements active_only: Return only active stations (default: True)
Returns: List of StationInfo objects with enhanced metadata based on request parameters
Raises: AWDBQueryError: If the request parameters are invalid AWDBConnectionError: If there are network or server issues
Examples: # Get all SNOTEL stations in Oregon or Washington stations = client.get_stations(station_triplets=[‘:OR:SNTL’, ’:WA:SNTL’])
# Get stations with soil moisture sensors in California
stations = client.get_stations(elements=['SMS:*'], state_codes=['CA'])
# Get stations in specific HUC areas
stations = client.get_stations(hucs=['170601*'])