Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
6436be4
Fix logger for persister and unifier
jacob-a-brown Apr 2, 2025
3e71a59
Remove USGS records where value is "-999999"
jacob-a-brown Apr 2, 2025
5a66814
Update change log
jacob-a-brown Apr 2, 2025
40f3b9b
Work on updating and maintaining tests
jacob-a-brown Apr 2, 2025
2ad8ecf
Work on fixing chunk sizes
jacob-a-brown Apr 2, 2025
86d63fa
Formatting changes
jacob-a-brown Apr 2, 2025
11c8a1a
Remove duplicative variable for clarity
jacob-a-brown Apr 3, 2025
4f57d46
Intermediate step for this debug
jacob-a-brown Apr 3, 2025
2e19085
Ensure that no more sites than site_limit are returned
jacob-a-brown Apr 3, 2025
1580343
Make tests more efficient and clearer
jacob-a-brown Apr 3, 2025
d4c0155
site_limit exceedance calculation simplification
jacob-a-brown Apr 3, 2025
656596b
Formatting changes
jacob-a-brown Apr 3, 2025
cf350b4
Clearer site limit communication
jacob-a-brown Apr 4, 2025
7b12e8e
Archive old/outdated tests but keep for records
jacob-a-brown Apr 4, 2025
8045586
Archive - but keep - old/outdated tests for reference
jacob-a-brown Apr 4, 2025
4f894a0
Setup BaseTestClass for reusability for all sources and tests
jacob-a-brown Apr 4, 2025
49b5e9c
test NMBGMR
jacob-a-brown Apr 4, 2025
a94c102
Fix NMED DWB health check
jacob-a-brown Apr 4, 2025
0451649
Fix my fix
jacob-a-brown Apr 4, 2025
1781261
Initial setup for source tests
jacob-a-brown Apr 4, 2025
302ecba
Merge branch 'dev/jab' of https://github.com/DataIntegrationGroup/Dat…
jacob-a-brown Apr 4, 2025
ef9de1a
Fix site_limit trimming
jacob-a-brown Apr 4, 2025
4ad367e
Trim for site_limit at end of for loop for when site_limit < chunk_size
jacob-a-brown Apr 4, 2025
29b5863
Formatting changes
jacob-a-brown Apr 4, 2025
1c9f864
Work on mypy linting from CICD
jacob-a-brown Apr 4, 2025
2f4432c
Work on mypy changes
jacob-a-brown Apr 4, 2025
2155fbd
type hint BaseTestClass class attributes
jacob-a-brown Apr 7, 2025
f90a1c4
mypy typing
jacob-a-brown Apr 7, 2025
91af8ca
Formatting changes
jacob-a-brown Apr 7, 2025
53e29a1
Work on mypy type checking
jacob-a-brown Apr 9, 2025
d8546f1
Merge branch 'dev/jab' of https://github.com/DataIntegrationGroup/Dat…
jacob-a-brown Apr 9, 2025
82eaf53
Work on mypy type checking
jacob-a-brown Apr 9, 2025
761e4ed
Formatting changes
jacob-a-brown Apr 9, 2025
d90479b
mypy.ini configuration file
jacob-a-brown Apr 10, 2025
ccc5cad
Comment out debugging print statements
jacob-a-brown Apr 10, 2025
6492874
remove debugging print statements
jacob-a-brown Apr 10, 2025
f359dc2
mypy type checking
jacob-a-brown Apr 10, 2025
1ff9d6e
mypy type hinting
jacob-a-brown Apr 10, 2025
dad5e50
Finished mypy type checking for tests in GitHub Actions
jacob-a-brown Apr 11, 2025
fbd9b75
mypy fix
jacob-a-brown Apr 11, 2025
b6b368b
rename BaseTestClass to BaseSourceTestClass for clarity
jacob-a-brown Apr 11, 2025
76f77dc
Update pytest skip messages for clarity
jacob-a-brown Apr 11, 2025
d4cd969
reararnge testing folder
jacob-a-brown Apr 11, 2025
6cef8c4
Work on CLI tests
jacob-a-brown Apr 11, 2025
4adafb1
Comment out test dev in progress
jacob-a-brown Apr 11, 2025
d2b6d6c
Formatting changes
jacob-a-brown Apr 11, 2025
b4f4f2d
fix import error
jacob-a-brown Apr 14, 2025
cae4227
put cleanup function in base dir for reuse
jacob-a-brown Apr 14, 2025
1b42e2d
rename nmbgmr to nmbgmr_amp for clarity/consistency
jacob-a-brown Apr 14, 2025
685f242
CLI tests for all sources and ways to set config
jacob-a-brown Apr 14, 2025
22c3be0
keep bbox str to be consistent with other geographic filters
jacob-a-brown Apr 14, 2025
c4e0d29
add wkt spatial option
jacob-a-brown Apr 14, 2025
a1bc4d0
code cleanup
jacob-a-brown Apr 14, 2025
08525c2
mypy fix
jacob-a-brown Apr 14, 2025
ea23c47
Formatting changes
jacob-a-brown Apr 14, 2025
3620df4
bump version to 0.8.2
jacob-a-brown Apr 14, 2025
0cf98b4
PR 43 review changes
jacob-a-brown Apr 14, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
- This naming schema also enables the development of datetime filters as the descriptor will apply to the latest datetime within the provided time frame filter, whereas most recent indicates np filters.
- removed sites that are not in New Mexico

### Fixed
- removed records from USGS where the value is "-999999"


## 0.7.0

Expand Down
2 changes: 1 addition & 1 deletion backend/bounding_polygons.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ def get_county_polygon(name, as_wkt=True):
_warning(f"Invalid state. {state}")


def get_state_polygon(state, buffer):
def get_state_polygon(state: str, buffer: int | None = None):
statefp = _statelookup(state)
if statefp:
obj = _get_cached_object(
Expand Down
14 changes: 1 addition & 13 deletions backend/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
# ===============================================================================
import os
import sys
import time
from datetime import datetime, timedelta

import shapely.wkt
Expand All @@ -29,15 +28,6 @@
NMBGMRAnalyteSource,
)
from .connectors.bor.source import BORSiteSource, BORAnalyteSource
from .connectors.ckan import (
HONDO_RESOURCE_ID,
FORT_SUMNER_RESOURCE_ID,
ROSWELL_RESOURCE_ID,
)
from .connectors.ckan.source import (
OSERoswellSiteSource,
OSERoswellWaterLevelSource,
)
from .connectors.nmenv.source import DWBSiteSource, DWBAnalyteSource
from .connectors.nmose.source import NMOSEPODSiteSource
from .constants import (
Expand Down Expand Up @@ -67,7 +57,6 @@
ISCSevenRiversAnalyteSource,
)
from .connectors.st2.source import (
ST2SiteSource,
PVACDSiteSource,
PVACDWaterLevelSource,
EBIDSiteSource,
Expand Down Expand Up @@ -120,7 +109,7 @@ class Config(Loggable):
end_date: str = ""

# spatial
bbox: dict # dict or str
bbox: str = ""
county: str = ""
wkt: str = ""

Expand Down Expand Up @@ -166,7 +155,6 @@ def __init__(self, model=None, payload=None):
# need to initialize logger
super().__init__()

self.bbox = {}
if model:
if model.wkt:
self.wkt = model.wkt
Expand Down
25 changes: 11 additions & 14 deletions backend/connectors/nmbgmr/source.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,6 @@ def get_records(self):
if config.has_bounds():
params["wkt"] = config.bounding_wkt()

if config.site_limit:
params["limit"] = config.site_limit

if not config.sites_only:

if config.parameter.lower() != "waterlevels":
Expand All @@ -90,18 +87,18 @@ def get_records(self):
)
if not config.sites_only:
for site in sites:
print(f"Obtaining well data for {site['properties']['point_id']}")
well_data = self._execute_json_request(
_make_url("wells"),
params={"pointid": site["properties"]["point_id"]},
tag="",
)
site["properties"]["formation"] = well_data["formation"]
site["properties"]["well_depth"] = well_data["well_depth_ftbgs"]
site["properties"]["well_depth_units"] = FEET
# site["properties"]["formation"] = None
# site["properties"]["well_depth"] = None
# print(f"Obtaining well data for {site['properties']['point_id']}")
# well_data = self._execute_json_request(
# _make_url("wells"),
# params={"pointid": site["properties"]["point_id"]},
# tag="",
# )
# site["properties"]["formation"] = well_data["formation"]
# site["properties"]["well_depth"] = well_data["well_depth_ftbgs"]
# site["properties"]["well_depth_units"] = FEET
site["properties"]["formation"] = None
site["properties"]["well_depth"] = None
site["properties"]["well_depth_units"] = FEET

return sites

Expand Down
5 changes: 2 additions & 3 deletions backend/connectors/nmenv/source.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,7 @@
DT_MEASURED,
SOURCE_PARAMETER_NAME,
SOURCE_PARAMETER_UNITS,
EARLIEST,
LATEST,
TDS,
)
from backend.source import get_analyte_search_param, get_terminal_record

Expand All @@ -46,7 +45,7 @@ def __repr__(self):
return "DWBSiteSource"

def health(self):
return self.get_records(top=10, analyte="TDS")
return self.get_records(top=10, analyte=TDS)

def get_records(self, *args, **kw):

Expand Down
19 changes: 12 additions & 7 deletions backend/connectors/nmose/source.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import os
from typing import List, Dict, Any

from shapely import wkt
from backend.connectors import NM_STATE_BOUNDING_POLYGON
Expand All @@ -20,12 +20,12 @@ class NMOSEPODSiteSource(BaseSiteSource):
"""

transformer_klass = NMOSEPODSiteTransformer
chunk_size = 5000
chunk_size: int = 5000
bounding_polygon = NM_STATE_BOUNDING_POLYGON

def get_records(self, *args, **kw) -> dict:
def get_records(self, *args, **kw) -> List[Dict]:
config = self.config
params = {}
params: Dict[str, Any] = {}
# if config.has_bounds():
# bbox = config.bbox_bounding_points()
# params["bBox"] = ",".join([str(b) for b in bbox])
Expand All @@ -37,7 +37,9 @@ def get_records(self, *args, **kw) -> dict:
# if config.end_date:
# params["endDt"] = config.end_dt.date().isoformat()

url = "https://services2.arcgis.com/qXZbWTdPDbTjl7Dy/arcgis/rest/services/OSE_PODs/FeatureServer/0/query"
url: str = (
"https://services2.arcgis.com/qXZbWTdPDbTjl7Dy/arcgis/rest/services/OSE_PODs/FeatureServer/0/query"
)

params["where"] = (
"pod_status = 'ACT' AND pod_basin IN ('A','B','C','CC','CD','CL','CP','CR','CT','E','FS','G','GSF','H', 'HA','HC','HS','HU','J','L','LA','LRG','LV','M','MR','NH','P','PL','PN','RA','RG','S','SB','SJ','SS','T','TU','UP','VV')"
Expand All @@ -55,11 +57,14 @@ def get_records(self, *args, **kw) -> dict:
params["geometry"] = wkt_to_arcgis_json(wkt)
params["geometryType"] = "esriGeometryPolygon"

records = []
records: List = []
i = 1
while 1:
rs = self._execute_json_request(url, params, tag="features")
records.extend(rs)
if rs is None:
continue
else:
records.extend(rs)
params["resultOffset"] += self.chunk_size
if len(rs) < self.chunk_size:
break
Expand Down
6 changes: 5 additions & 1 deletion backend/connectors/usgs/source.py
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,11 @@ def _extract_site_records(self, records, site_record):
return [ri for ri in records if ri["site_code"] == site_record.id]

def _clean_records(self, records):
return [r for r in records if r["value"] is not None and r["value"].strip()]
return [
r
for r in records
if r["value"] is not None and r["value"].strip() and r["value"] != "-999999"
]

def _extract_source_parameter_results(self, records):
return [float(r["value"]) for r in records]
Expand Down
2 changes: 1 addition & 1 deletion backend/persister.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import pandas as pd
import geopandas as gpd

from backend.logging import Loggable
from backend.logger import Loggable

try:
from google.cloud import storage
Expand Down
Loading
Loading