Skip to content

Commit 1374a6c

Browse files
committed
feat: add acoustic legacy fields to transducer observations
1 parent 8510bbb commit 1374a6c

4 files changed

Lines changed: 333 additions & 0 deletions

File tree

admin/views/transducer_observation.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,20 @@ class TransducerObservationAdmin(OcotilloModelView):
8888
"nma_waterlevelscontinuous_pressure_updated",
8989
"nma_waterlevelscontinuous_pressure_water_head",
9090
"nma_waterlevelscontinuous_pressure_water_head_adjusted",
91+
"nma_waterlevelscontinuous_acoustic_created",
92+
"nma_waterlevelscontinuous_acoustic_data_source",
93+
"nma_waterlevelscontinuous_acoustic_global_id",
94+
"nma_waterlevelscontinuous_acoustic_measurement_method",
95+
"nma_waterlevelscontinuous_acoustic_measuring_agency",
96+
"nma_waterlevelscontinuous_acoustic_notes",
97+
"nma_waterlevelscontinuous_acoustic_point_id",
98+
"nma_waterlevelscontinuous_acoustic_pre_process_data_field",
99+
"nma_waterlevelscontinuous_acoustic_public_release",
100+
"nma_waterlevelscontinuous_acoustic_sensor_hgt_above_mp",
101+
"nma_waterlevelscontinuous_acoustic_serial_no",
102+
"nma_waterlevelscontinuous_acoustic_server_receipt_date",
103+
"nma_waterlevelscontinuous_acoustic_speaker_to_mic_length",
104+
"nma_waterlevelscontinuous_acoustic_temperature_air",
91105
"created_at",
92106
"created_by_id",
93107
"created_by_name",
@@ -116,6 +130,20 @@ class TransducerObservationAdmin(OcotilloModelView):
116130
"nma_waterlevelscontinuous_pressure_updated",
117131
"nma_waterlevelscontinuous_pressure_water_head",
118132
"nma_waterlevelscontinuous_pressure_water_head_adjusted",
133+
"nma_waterlevelscontinuous_acoustic_created",
134+
"nma_waterlevelscontinuous_acoustic_data_source",
135+
"nma_waterlevelscontinuous_acoustic_global_id",
136+
"nma_waterlevelscontinuous_acoustic_measurement_method",
137+
"nma_waterlevelscontinuous_acoustic_measuring_agency",
138+
"nma_waterlevelscontinuous_acoustic_notes",
139+
"nma_waterlevelscontinuous_acoustic_point_id",
140+
"nma_waterlevelscontinuous_acoustic_pre_process_data_field",
141+
"nma_waterlevelscontinuous_acoustic_public_release",
142+
"nma_waterlevelscontinuous_acoustic_sensor_hgt_above_mp",
143+
"nma_waterlevelscontinuous_acoustic_serial_no",
144+
"nma_waterlevelscontinuous_acoustic_server_receipt_date",
145+
"nma_waterlevelscontinuous_acoustic_speaker_to_mic_length",
146+
"nma_waterlevelscontinuous_acoustic_temperature_air",
119147
]
120148

121149
exclude_fields_from_edit = [
@@ -137,6 +165,20 @@ class TransducerObservationAdmin(OcotilloModelView):
137165
"nma_waterlevelscontinuous_pressure_updated",
138166
"nma_waterlevelscontinuous_pressure_water_head",
139167
"nma_waterlevelscontinuous_pressure_water_head_adjusted",
168+
"nma_waterlevelscontinuous_acoustic_created",
169+
"nma_waterlevelscontinuous_acoustic_data_source",
170+
"nma_waterlevelscontinuous_acoustic_global_id",
171+
"nma_waterlevelscontinuous_acoustic_measurement_method",
172+
"nma_waterlevelscontinuous_acoustic_measuring_agency",
173+
"nma_waterlevelscontinuous_acoustic_notes",
174+
"nma_waterlevelscontinuous_acoustic_point_id",
175+
"nma_waterlevelscontinuous_acoustic_pre_process_data_field",
176+
"nma_waterlevelscontinuous_acoustic_public_release",
177+
"nma_waterlevelscontinuous_acoustic_sensor_hgt_above_mp",
178+
"nma_waterlevelscontinuous_acoustic_serial_no",
179+
"nma_waterlevelscontinuous_acoustic_server_receipt_date",
180+
"nma_waterlevelscontinuous_acoustic_speaker_to_mic_length",
181+
"nma_waterlevelscontinuous_acoustic_temperature_air",
140182
]
141183

142184
readonly_fields = [
@@ -154,6 +196,20 @@ class TransducerObservationAdmin(OcotilloModelView):
154196
"nma_waterlevelscontinuous_pressure_updated",
155197
"nma_waterlevelscontinuous_pressure_water_head",
156198
"nma_waterlevelscontinuous_pressure_water_head_adjusted",
199+
"nma_waterlevelscontinuous_acoustic_created",
200+
"nma_waterlevelscontinuous_acoustic_data_source",
201+
"nma_waterlevelscontinuous_acoustic_global_id",
202+
"nma_waterlevelscontinuous_acoustic_measurement_method",
203+
"nma_waterlevelscontinuous_acoustic_measuring_agency",
204+
"nma_waterlevelscontinuous_acoustic_notes",
205+
"nma_waterlevelscontinuous_acoustic_point_id",
206+
"nma_waterlevelscontinuous_acoustic_pre_process_data_field",
207+
"nma_waterlevelscontinuous_acoustic_public_release",
208+
"nma_waterlevelscontinuous_acoustic_sensor_hgt_above_mp",
209+
"nma_waterlevelscontinuous_acoustic_serial_no",
210+
"nma_waterlevelscontinuous_acoustic_server_receipt_date",
211+
"nma_waterlevelscontinuous_acoustic_speaker_to_mic_length",
212+
"nma_waterlevelscontinuous_acoustic_temperature_air",
157213
]
158214

159215
labels = {
@@ -177,6 +233,20 @@ class TransducerObservationAdmin(OcotilloModelView):
177233
"nma_waterlevelscontinuous_pressure_updated": "Updated",
178234
"nma_waterlevelscontinuous_pressure_water_head": "Water Head",
179235
"nma_waterlevelscontinuous_pressure_water_head_adjusted": "Water Head Adjusted",
236+
"nma_waterlevelscontinuous_acoustic_created": "Acoustic Created",
237+
"nma_waterlevelscontinuous_acoustic_data_source": "Acoustic Data Source",
238+
"nma_waterlevelscontinuous_acoustic_global_id": "Acoustic Global ID",
239+
"nma_waterlevelscontinuous_acoustic_measurement_method": "Acoustic Measurement Method",
240+
"nma_waterlevelscontinuous_acoustic_measuring_agency": "Acoustic Measuring Agency",
241+
"nma_waterlevelscontinuous_acoustic_notes": "Acoustic Notes",
242+
"nma_waterlevelscontinuous_acoustic_point_id": "Acoustic Point ID",
243+
"nma_waterlevelscontinuous_acoustic_pre_process_data_field": "Acoustic Pre-Process Data Field",
244+
"nma_waterlevelscontinuous_acoustic_public_release": "Acoustic Public Release",
245+
"nma_waterlevelscontinuous_acoustic_sensor_hgt_above_mp": "Acoustic Sensor Height Above MP",
246+
"nma_waterlevelscontinuous_acoustic_serial_no": "Acoustic Serial No",
247+
"nma_waterlevelscontinuous_acoustic_server_receipt_date": "Acoustic Server Receipt Date",
248+
"nma_waterlevelscontinuous_acoustic_speaker_to_mic_length": "Acoustic Speaker To Mic Length",
249+
"nma_waterlevelscontinuous_acoustic_temperature_air": "Acoustic Temperature Air",
180250
"created_at": "Created At",
181251
"created_by_name": "Created By",
182252
"updated_by_name": "Updated By",
Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
"""add acoustic legacy fields to transducer observations
2+
3+
Revision ID: 8ed4b9770721
4+
Revises: 1680a4a7cb77
5+
Create Date: 2026-01-07 22:12:20.045062
6+
7+
"""
8+
9+
from typing import Sequence, Union
10+
11+
from alembic import op
12+
import sqlalchemy as sa
13+
14+
15+
# revision identifiers, used by Alembic.
16+
revision: str = "8ed4b9770721"
17+
down_revision: Union[str, Sequence[str], None] = "1680a4a7cb77"
18+
branch_labels: Union[str, Sequence[str], None] = None
19+
depends_on: Union[str, Sequence[str], None] = None
20+
21+
22+
def upgrade() -> None:
23+
"""Upgrade schema."""
24+
op.add_column(
25+
"transducer_observation",
26+
sa.Column(
27+
"nma_waterlevelscontinuous_acoustic_created",
28+
sa.DateTime(timezone=True),
29+
nullable=True,
30+
),
31+
)
32+
op.add_column(
33+
"transducer_observation",
34+
sa.Column(
35+
"nma_waterlevelscontinuous_acoustic_data_source",
36+
sa.String(length=5),
37+
nullable=True,
38+
),
39+
)
40+
op.add_column(
41+
"transducer_observation",
42+
sa.Column(
43+
"nma_waterlevelscontinuous_acoustic_global_id",
44+
sa.String(length=40),
45+
nullable=True,
46+
),
47+
)
48+
op.add_column(
49+
"transducer_observation",
50+
sa.Column(
51+
"nma_waterlevelscontinuous_acoustic_measurement_method",
52+
sa.String(length=2),
53+
nullable=True,
54+
),
55+
)
56+
op.add_column(
57+
"transducer_observation",
58+
sa.Column(
59+
"nma_waterlevelscontinuous_acoustic_measuring_agency",
60+
sa.String(length=50),
61+
nullable=True,
62+
),
63+
)
64+
op.add_column(
65+
"transducer_observation",
66+
sa.Column(
67+
"nma_waterlevelscontinuous_acoustic_notes",
68+
sa.String(length=200),
69+
nullable=True,
70+
),
71+
)
72+
op.add_column(
73+
"transducer_observation",
74+
sa.Column(
75+
"nma_waterlevelscontinuous_acoustic_point_id",
76+
sa.String(length=50),
77+
nullable=True,
78+
),
79+
)
80+
op.add_column(
81+
"transducer_observation",
82+
sa.Column(
83+
"nma_waterlevelscontinuous_acoustic_pre_process_data_field",
84+
sa.Float(),
85+
nullable=True,
86+
),
87+
)
88+
op.add_column(
89+
"transducer_observation",
90+
sa.Column(
91+
"nma_waterlevelscontinuous_acoustic_public_release",
92+
sa.Boolean(),
93+
nullable=True,
94+
),
95+
)
96+
op.add_column(
97+
"transducer_observation",
98+
sa.Column(
99+
"nma_waterlevelscontinuous_acoustic_sensor_hgt_above_mp",
100+
sa.Float(),
101+
nullable=True,
102+
),
103+
)
104+
op.add_column(
105+
"transducer_observation",
106+
sa.Column(
107+
"nma_waterlevelscontinuous_acoustic_serial_no",
108+
sa.String(length=50),
109+
nullable=True,
110+
),
111+
)
112+
op.add_column(
113+
"transducer_observation",
114+
sa.Column(
115+
"nma_waterlevelscontinuous_acoustic_server_receipt_date",
116+
sa.DateTime(timezone=True),
117+
nullable=True,
118+
),
119+
)
120+
op.add_column(
121+
"transducer_observation",
122+
sa.Column(
123+
"nma_waterlevelscontinuous_acoustic_speaker_to_mic_length",
124+
sa.Float(),
125+
nullable=True,
126+
),
127+
)
128+
op.add_column(
129+
"transducer_observation",
130+
sa.Column(
131+
"nma_waterlevelscontinuous_acoustic_temperature_air",
132+
sa.Float(),
133+
nullable=True,
134+
),
135+
)
136+
137+
138+
def downgrade() -> None:
139+
"""Downgrade schema."""
140+
op.drop_column(
141+
"transducer_observation",
142+
"nma_waterlevelscontinuous_acoustic_temperature_air",
143+
)
144+
op.drop_column(
145+
"transducer_observation",
146+
"nma_waterlevelscontinuous_acoustic_speaker_to_mic_length",
147+
)
148+
op.drop_column(
149+
"transducer_observation",
150+
"nma_waterlevelscontinuous_acoustic_server_receipt_date",
151+
)
152+
op.drop_column(
153+
"transducer_observation",
154+
"nma_waterlevelscontinuous_acoustic_serial_no",
155+
)
156+
op.drop_column(
157+
"transducer_observation",
158+
"nma_waterlevelscontinuous_acoustic_sensor_hgt_above_mp",
159+
)
160+
op.drop_column(
161+
"transducer_observation",
162+
"nma_waterlevelscontinuous_acoustic_public_release",
163+
)
164+
op.drop_column(
165+
"transducer_observation",
166+
"nma_waterlevelscontinuous_acoustic_pre_process_data_field",
167+
)
168+
op.drop_column(
169+
"transducer_observation",
170+
"nma_waterlevelscontinuous_acoustic_point_id",
171+
)
172+
op.drop_column(
173+
"transducer_observation",
174+
"nma_waterlevelscontinuous_acoustic_notes",
175+
)
176+
op.drop_column(
177+
"transducer_observation",
178+
"nma_waterlevelscontinuous_acoustic_measuring_agency",
179+
)
180+
op.drop_column(
181+
"transducer_observation",
182+
"nma_waterlevelscontinuous_acoustic_measurement_method",
183+
)
184+
op.drop_column(
185+
"transducer_observation",
186+
"nma_waterlevelscontinuous_acoustic_global_id",
187+
)
188+
op.drop_column(
189+
"transducer_observation",
190+
"nma_waterlevelscontinuous_acoustic_data_source",
191+
)
192+
op.drop_column(
193+
"transducer_observation",
194+
"nma_waterlevelscontinuous_acoustic_created",
195+
)

db/transducer.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,48 @@ class TransducerObservation(Base, AutoBaseMixin, ReleaseMixin):
162162
nma_waterlevelscontinuous_pressure_water_head_adjusted: Mapped[float] = (
163163
mapped_column(Float, nullable=True)
164164
)
165+
nma_waterlevelscontinuous_acoustic_created: Mapped[datetime] = mapped_column(
166+
DateTime(timezone=True), nullable=True
167+
)
168+
nma_waterlevelscontinuous_acoustic_data_source: Mapped[str] = mapped_column(
169+
String(5), nullable=True
170+
)
171+
nma_waterlevelscontinuous_acoustic_global_id: Mapped[str] = mapped_column(
172+
String(40), nullable=True
173+
)
174+
nma_waterlevelscontinuous_acoustic_measurement_method: Mapped[str] = mapped_column(
175+
String(2), nullable=True
176+
)
177+
nma_waterlevelscontinuous_acoustic_measuring_agency: Mapped[str] = mapped_column(
178+
String(50), nullable=True
179+
)
180+
nma_waterlevelscontinuous_acoustic_notes: Mapped[str] = mapped_column(
181+
String(200), nullable=True
182+
)
183+
nma_waterlevelscontinuous_acoustic_point_id: Mapped[str] = mapped_column(
184+
String(50), nullable=True
185+
)
186+
nma_waterlevelscontinuous_acoustic_pre_process_data_field: Mapped[float] = (
187+
mapped_column(Float, nullable=True)
188+
)
189+
nma_waterlevelscontinuous_acoustic_public_release: Mapped[bool] = mapped_column(
190+
Boolean, nullable=True
191+
)
192+
nma_waterlevelscontinuous_acoustic_sensor_hgt_above_mp: Mapped[float] = (
193+
mapped_column(Float, nullable=True)
194+
)
195+
nma_waterlevelscontinuous_acoustic_serial_no: Mapped[str] = mapped_column(
196+
String(50), nullable=True
197+
)
198+
nma_waterlevelscontinuous_acoustic_server_receipt_date: Mapped[datetime] = (
199+
mapped_column(DateTime(timezone=True), nullable=True)
200+
)
201+
nma_waterlevelscontinuous_acoustic_speaker_to_mic_length: Mapped[float] = (
202+
mapped_column(Float, nullable=True)
203+
)
204+
nma_waterlevelscontinuous_acoustic_temperature_air: Mapped[float] = mapped_column(
205+
Float, nullable=True
206+
)
165207

166208
# qc_block_id: Mapped[Optional[int]] = mapped_column(
167209
# ForeignKey("transducer_observation_block.id", ondelete="SET NULL"), index=True

transfers/waterlevels_transducer_transfer.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,32 @@ def val(key: str):
233233
"nma_waterlevelscontinuous_pressure_water_head_adjusted": val(
234234
"WaterHeadAdjusted"
235235
),
236+
"nma_waterlevelscontinuous_acoustic_created": val("Created"),
237+
"nma_waterlevelscontinuous_acoustic_data_source": val("DataSource"),
238+
"nma_waterlevelscontinuous_acoustic_global_id": val("GlobalID"),
239+
"nma_waterlevelscontinuous_acoustic_measurement_method": val(
240+
"MeasurementMethod"
241+
),
242+
"nma_waterlevelscontinuous_acoustic_measuring_agency": val(
243+
"MeasuringAgency"
244+
),
245+
"nma_waterlevelscontinuous_acoustic_notes": val("Notes"),
246+
"nma_waterlevelscontinuous_acoustic_point_id": val("PointID"),
247+
"nma_waterlevelscontinuous_acoustic_pre_process_data_field": val(
248+
"PreProcessDataField"
249+
),
250+
"nma_waterlevelscontinuous_acoustic_public_release": val("PublicRelease"),
251+
"nma_waterlevelscontinuous_acoustic_sensor_hgt_above_mp": val(
252+
"SensorHgtAboveMP"
253+
),
254+
"nma_waterlevelscontinuous_acoustic_serial_no": val("SerialNo"),
255+
"nma_waterlevelscontinuous_acoustic_server_receipt_date": val(
256+
"ServerReceiptDate"
257+
),
258+
"nma_waterlevelscontinuous_acoustic_speaker_to_mic_length": val(
259+
"SpeakerToMicLength"
260+
),
261+
"nma_waterlevelscontinuous_acoustic_temperature_air": val("TemperatureAir"),
236262
}
237263

238264
@staticmethod

0 commit comments

Comments
 (0)