2121import pandas as pd
2222from sqlalchemy .orm import Session
2323
24- from db import SoilRockResults
24+ from db import SoilRockResults , Thing
25+ from db .engine import session_ctx
2526from transfers .logger import logger
2627from transfers .transferer import Transferer
2728from transfers .util import replace_nans
@@ -35,6 +36,14 @@ class SoilRockResultsTransferer(Transferer):
3536 def __init__ (self , * args , batch_size : int = 1000 , ** kwargs ):
3637 super ().__init__ (* args , ** kwargs )
3738 self .batch_size = batch_size
39+ self ._thing_id_cache : dict [str , int ] = {}
40+ self ._build_thing_id_cache ()
41+
42+ def _build_thing_id_cache (self ) -> None :
43+ with session_ctx () as session :
44+ things = session .query (Thing .name , Thing .id ).all ()
45+ self ._thing_id_cache = {name : thing_id for name , thing_id in things }
46+ logger .info (f"Built Thing ID cache with { len (self ._thing_id_cache )} entries" )
3847
3948 def _get_dfs (self ) -> tuple [pd .DataFrame , pd .DataFrame ]:
4049 df = self ._read_csv (self .source_table )
@@ -67,6 +76,7 @@ def _row_dict(self, row: dict[str, Any]) -> dict[str, Any]:
6776 "d13C" : self ._float_val (row .get ("d13C" )),
6877 "d18O" : self ._float_val (row .get ("d18O" )),
6978 "Sampled by" : row .get ("Sampled by" ),
79+ "thing_id" : self ._thing_id_cache .get (row .get ("Point_ID" )),
7080 }
7181
7282 def _float_val (self , value : Any ) -> Optional [float ]:
0 commit comments