Skip to content

Commit 67e7daf

Browse files
committed
Merge branch 'source_information_and_conversion_factor' into dev/jab
2 parents ebd8a60 + d667a88 commit 67e7daf

13 files changed

Lines changed: 325 additions & 176 deletions

File tree

backend/connectors/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ The following methods need to be defined for Faux. See `BaseAnalyteSource` for d
3333

3434
- `get_records`
3535
- `_extract_site_records`
36-
- `_extract_parameter_units`
36+
- `_extract_source_parameter_units`
3737
- `_extract_most_recent`
3838
- `_extract_parameter_result`
3939
- `_extract_parameter_record`
@@ -48,7 +48,7 @@ The following methods need to be defined for Faux. See `BaseWaterLevelSource` fo
4848

4949
- `get_records`
5050
- `_extract_site_records`
51-
- `_extract_parameter_units`
51+
- `_extract_source_parameter_units`
5252
- `_extract_most_recent`
5353
- `_extract_parameter_result`
5454
- `_extract_parameter_record`

backend/connectors/bor/source.py

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,11 @@
2121
from backend.connectors.bor.transformer import BORSiteTransformer, BORAnalyteTransformer
2222
from backend.connectors.mappings import BOR_ANALYTE_MAPPING
2323
from backend.constants import (
24-
TDS,
25-
URANIUM,
26-
ARSENIC,
27-
SULFATE,
28-
FLUORIDE,
29-
CHLORIDE,
24+
PARAMETER_NAME,
3025
PARAMETER_VALUE,
3126
PARAMETER_UNITS,
27+
SOURCE_PARAMETER_NAME,
28+
SOURCE_PARAMETER_UNITS,
3229
DT_MEASURED,
3330
)
3431

@@ -68,32 +65,40 @@ def parse_dt(dt):
6865
class BORAnalyteSource(BaseAnalyteSource):
6966
transformer_klass = BORAnalyteTransformer
7067
_catalog_item_idx = None
68+
_source_parameter_name = None
7169

7270
def __repr__(self):
7371
return "BORAnalyteSource"
7472

7573
def _extract_parameter_record(self, record):
74+
record[PARAMETER_NAME] = self.config.parameter
7675
record[PARAMETER_VALUE] = record["attributes"]["result"]
77-
record[PARAMETER_UNITS] = record["attributes"]["resultAttributes"]["units"]
76+
record[PARAMETER_UNITS] = self.config.analyte_output_units
7877
record[DT_MEASURED] = parse_dt(record["attributes"]["dateTime"])
78+
record[SOURCE_PARAMETER_NAME] = self._source_parameter_name
79+
record[SOURCE_PARAMETER_UNITS] = record["attributes"]["resultAttributes"]["units"]
7980
return record
8081

81-
def _extract_parameter_results(self, rs):
82+
def _extract_source_parameter_results(self, rs):
8283
return [ri["attributes"]["result"] for ri in rs]
8384

84-
def _extract_parameter_units(self, records):
85+
def _extract_source_parameter_units(self, records):
8586
return [ri["attributes"]["resultAttributes"]["units"] for ri in records]
8687

8788
def _extract_parameter_dates(self, records):
8889
return [parse_dt(ri["attributes"]["dateTime"]) for ri in records]
90+
91+
def _extract_source_parameter_names(self, records):
92+
return [self._source_parameter_name for ri in records]
8993

9094
def _extract_most_recent(self, rs):
9195

9296
record = get_most_recent(rs, "attributes.dateTime")
9397
return {
9498
"value": record["attributes"]["result"],
9599
"datetime": parse_dt(record["attributes"]["dateTime"]),
96-
"units": record["attributes"]["resultAttributes"]["units"],
100+
"source_parameter_units": record["attributes"]["resultAttributes"]["units"],
101+
"source_parameter_name": self._source_parameter_name
97102
}
98103

99104
def _extract_site_records(self, records, site_record):
@@ -126,6 +131,9 @@ def get_records(self, site_record):
126131
if not self._catalog_item_idx:
127132
self._catalog_item_idx = i
128133

134+
if self._source_parameter_name is None:
135+
self._source_parameter_name = data["attributes"]["parameterSourceCode"]
136+
129137
return self._execute_json_request(
130138
"https://data.usbr.gov/rise/api/result",
131139
params={"itemId": data["attributes"]["_id"]},

backend/connectors/ckan/source.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,11 @@
3636
DTW,
3737
DTW_UNITS,
3838
DT_MEASURED,
39-
PARAMETER,
39+
PARAMETER_NAME,
4040
PARAMETER_UNITS,
4141
PARAMETER_VALUE,
42+
SOURCE_PARAMETER_NAME,
43+
SOURCE_PARAMETER_UNITS
4244
)
4345
from backend.source import (
4446
BaseSource,
@@ -133,21 +135,30 @@ def _parse_response(self, site_record, resp):
133135
records = resp.json()["result"]["records"]
134136
return [record for record in records if record["Site_ID"] == site_record.id]
135137

136-
def _extract_parameter_results(self, records):
138+
def _extract_source_parameter_results(self, records):
137139
return [float(r["DTWGS"]) for r in records]
138140

139141
def _extract_most_recent(self, records):
140142
record = get_most_recent(records, tag="Date")
141-
return {"value": record["DTWGS"], "datetime": record["Date"], "units": FEET}
143+
return {
144+
"value": record["DTWGS"],
145+
"datetime": record["Date"],
146+
"source_parameter_units": FEET,
147+
"source_parameter_name": "DTWGS",}
142148

143149
def _extract_parameter_dates(self, records: list) -> list:
144150
return [r["Date"] for r in records]
151+
152+
def _extract_source_parameter_names(self, records):
153+
return ["" for r in records]
145154

146155
def _extract_parameter_record(self, record):
147-
record[PARAMETER] = DTW
156+
record[PARAMETER_NAME] = DTW
148157
record[PARAMETER_VALUE] = float(record["DTWGS"])
149-
record[PARAMETER_UNITS] = FEET
158+
record[PARAMETER_UNITS] = self.config.waterlevel_output_units
150159
record[DT_MEASURED] = record["Date"]
160+
record[SOURCE_PARAMETER_NAME] = "DTWGS"
161+
record[SOURCE_PARAMETER_UNITS] = FEET
151162
return record
152163

153164
def _clean_records(self, records: list) -> list:

backend/connectors/isc_seven_rivers/source.py

Lines changed: 46 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,14 @@
2020
from backend.connectors import ISC_SEVEN_RIVERS_BOUNDING_POLYGON
2121
from backend.connectors.mappings import ISC_SEVEN_RIVERS_ANALYTE_MAPPING
2222
from backend.constants import (
23-
TDS,
2423
FEET,
25-
URANIUM,
26-
SULFATE,
27-
FLUORIDE,
28-
CHLORIDE,
2924
DT_MEASURED,
30-
DTW_UNITS,
3125
DTW,
32-
PARAMETER,
26+
PARAMETER_NAME,
3327
PARAMETER_VALUE,
3428
PARAMETER_UNITS,
29+
SOURCE_PARAMETER_NAME,
30+
SOURCE_PARAMETER_UNITS
3531
)
3632
from backend.connectors.isc_seven_rivers.transformer import (
3733
ISCSevenRiversSiteTransformer,
@@ -93,11 +89,12 @@ def get_records(self):
9389
class ISCSevenRiversAnalyteSource(BaseAnalyteSource):
9490
transformer_klass = ISCSevenRiversAnalyteTransformer
9591
_analyte_ids = None
92+
_source_parameter_name = None
9693

9794
def __repr__(self):
9895
return "ISCSevenRiversAnalyteSource"
9996

100-
def _get_analyte_id(self, analyte):
97+
def _get_analyte_id_and_name(self, analyte):
10198
""" """
10299
if self._analyte_ids is None:
103100

@@ -107,13 +104,20 @@ def _get_analyte_id(self, analyte):
107104

108105
analyte = get_analyte_search_param(analyte, ISC_SEVEN_RIVERS_ANALYTE_MAPPING)
109106
if analyte:
110-
return self._analyte_ids.get(analyte)
107+
id_and_name = {
108+
"id": self._analyte_ids.get(analyte),
109+
"name": analyte,
110+
}
111+
return id_and_name
111112

112113
def _extract_parameter_record(self, record):
113-
record[PARAMETER] = self.config.parameter
114+
record[PARAMETER_NAME] = self.config.parameter
114115
record[PARAMETER_VALUE] = record["result"]
115-
record[PARAMETER_UNITS] = record["units"]
116+
record[PARAMETER_UNITS] = self.config.analyte_output_units
116117
record[DT_MEASURED] = get_datetime(record)
118+
record[SOURCE_PARAMETER_NAME] = self._source_parameter_name
119+
record[SOURCE_PARAMETER_UNITS] = record["units"]
120+
117121
return record
118122

119123
def _extract_most_recent(self, records):
@@ -122,25 +126,30 @@ def _extract_most_recent(self, records):
122126
return {
123127
"value": record["result"],
124128
"datetime": get_datetime(record),
125-
"units": record["units"],
129+
"source_parameter_units": record["units"],
130+
"source_parameter_name": self._source_parameter_name,
126131
}
127132

128133
def _clean_records(self, records):
129134
return [r for r in records if r["result"] is not None]
130135

131-
def _extract_parameter_results(self, records):
136+
def _extract_source_parameter_results(self, records):
132137
return [r["result"] for r in records]
133138

134-
def _extract_parameter_units(self, records):
139+
def _extract_source_parameter_units(self, records):
135140
return [r["units"] for r in records]
136141

137142
def _extract_parameter_dates(self, records: list) -> list:
138143
return [get_datetime(r) for r in records]
144+
145+
def _extract_source_parameter_names(self, records: list) -> list:
146+
return [self._source_parameter_name for r in records]
139147

140148
def get_records(self, site_record):
141149
config = self.config
142-
analyte_id = self._get_analyte_id(config.parameter)
143-
if analyte_id:
150+
analyte_id_and_name = self._get_analyte_id_and_name(config.parameter)
151+
if analyte_id_and_name:
152+
analyte_id = analyte_id_and_name["id"]
144153
params = {
145154
"monitoringPointId": site_record.id,
146155
"analyteId": analyte_id,
@@ -149,13 +158,18 @@ def get_records(self, site_record):
149158
}
150159
params.update(get_date_range(config))
151160

161+
if self._source_parameter_name is None:
162+
self._source_parameter_name = analyte_id_and_name["name"]
163+
152164
return self._execute_json_request(
153165
_make_url("getReadings.ashx"), params=params
154166
)
155167

156168

157169
class ISCSevenRiversWaterLevelSource(BaseWaterLevelSource):
158170
transformer_klass = ISCSevenRiversWaterLevelTransformer
171+
_source_parameter_name = "depthToWaterFeet"
172+
_source_parameter_units = FEET
159173

160174
def get_records(self, site_record):
161175
params = {
@@ -174,24 +188,36 @@ def _clean_records(self, records):
174188
return [r for r in records if r["depthToWaterFeet"] is not None]
175189

176190
def _extract_parameter_record(self, record):
177-
record[PARAMETER] = DTW
191+
record[PARAMETER_NAME] = DTW
178192
record[PARAMETER_VALUE] = record["depthToWaterFeet"]
179-
record[PARAMETER_UNITS] = FEET
193+
record[PARAMETER_UNITS] = self.config.waterlevel_output_units
180194
record[DT_MEASURED] = get_datetime(record)
195+
record[SOURCE_PARAMETER_NAME] = self._source_parameter_name
196+
record[SOURCE_PARAMETER_UNITS] = self._source_parameter_units
181197
return record
182198

183-
def _extract_parameter_results(self, records):
199+
def _extract_source_parameter_results(self, records):
184200
return [
185201
r["depthToWaterFeet"] for r in records if not r["invalid"] and not r["dry"]
186202
]
187203

188204
def _extract_parameter_dates(self, records: list) -> list:
189205
return [get_datetime(r) for r in records]
190206

207+
def _extract_source_parameter_names(self, records):
208+
return [self._source_parameter_name for r in records]
209+
210+
def _extract_source_parameter_units(self, records):
211+
return [self._source_parameter_units for r in records]
212+
191213
def _extract_most_recent(self, records):
192214
record = get_most_recent(records, "dateTime")
193215
t = get_datetime(record)
194-
return {"value": record["depthToWaterFeet"], "datetime": t, "units": FEET}
216+
return {
217+
"value": record["depthToWaterFeet"],
218+
"datetime": t,
219+
"source_parameter_units": self._source_parameter_units,
220+
"source_parameter_name": DTW,}
195221

196222

197223
# ============= EOF =============================================

0 commit comments

Comments
 (0)