@@ -154,7 +154,7 @@ def _install_ts(value):
154154 insert (TransducerObservation ),
155155 filtered_observations ,
156156 )
157- session . add ( block )
157+ block = self . _get_or_create_block ( session , block )
158158 logger .info (
159159 f"Added { len (observations )} water levels { release_status } block"
160160 )
@@ -250,6 +250,33 @@ def _build_itertuples_field_map(df: pd.DataFrame) -> dict[str, str]:
250250 mapping [col ] = field
251251 return mapping
252252
253+ def _get_or_create_block (
254+ self , session : Session , block : TransducerObservationBlock
255+ ) -> TransducerObservationBlock :
256+ existing = (
257+ session .query (TransducerObservationBlock )
258+ .filter (
259+ TransducerObservationBlock .thing_id == block .thing_id ,
260+ TransducerObservationBlock .parameter_id == block .parameter_id ,
261+ TransducerObservationBlock .review_status == block .review_status ,
262+ TransducerObservationBlock .start_datetime == block .start_datetime ,
263+ TransducerObservationBlock .end_datetime == block .end_datetime ,
264+ )
265+ .one_or_none ()
266+ )
267+ if existing :
268+ existing .comment = block .comment or existing .comment
269+ existing .release_status = block .release_status or existing .release_status
270+ existing .reviewer_id = block .reviewer_id or existing .reviewer_id
271+ existing .created_by_name = block .created_by_name or existing .created_by_name
272+ existing .created_by_id = block .created_by_id or existing .created_by_id
273+ existing .updated_by_name = block .updated_by_name or existing .updated_by_name
274+ existing .updated_by_id = block .updated_by_id or existing .updated_by_id
275+ return existing
276+
277+ session .add (block )
278+ return block
279+
253280
254281class WaterLevelsContinuousPressureTransferer (WaterLevelsContinuousTransferer ):
255282 source_table = "WaterLevelsContinuous_Pressure"
@@ -328,7 +355,12 @@ def _legacy_payload(self, row: pd.Series) -> dict:
328355
329356
330357def _find_deployment (ts , deployments ):
331- date = ts .date ()
358+ if isinstance (ts , Timestamp ):
359+ date = ts .date ()
360+ elif hasattr (ts , "date" ):
361+ date = ts .date ()
362+ else :
363+ date = pd .Timestamp (ts ).date ()
332364 for d in deployments :
333365 if d .installation_date > date :
334366 break # because sorted by start
0 commit comments