2121from app .data .processing .hobolink import HOBOLINK_ROWS_PER_HOUR
2222from app .data .processing .hobolink import get_live_hobolink_data
2323from app .data .processing .usgs import USGS_DEFAULT_DAYS_AGO
24- from app .data .processing .usgs import USGS_ROWS_PER_HOUR
24+ from app .data .processing .usgs import USGS_ROWS_PER_HOUR_MUDDY_RIVER
25+ from app .data .processing .usgs import USGS_ROWS_PER_HOUR_WALTHAM
2526from app .data .processing .usgs import get_live_usgs_data
2627from app .mail import ExportEmail
2728from app .mail import mail
@@ -38,7 +39,9 @@ def _write_to_db(df: pd.DataFrame, table_name: str, rows: Optional[int] = None)
3839class ModelModule (Protocol ):
3940 MODEL_YEAR : str
4041
41- def process_data (self , df_hobolink : pd .DataFrame , df_usgs : pd .DataFrame ) -> pd .DataFrame : ...
42+ def process_data (
43+ self , df_hobolink : pd .DataFrame , df_usgs_w : pd .DataFrame , df_usgs_b : pd .DataFrame
44+ ) -> pd .DataFrame : ...
4245
4346 def all_models (self , df : pd .DataFrame , * args , ** kwargs ) -> pd .DataFrame : ...
4447
@@ -47,6 +50,7 @@ class ModelVersion(str, Enum):
4750 v1 = "v1"
4851 v2 = "v2"
4952 v3 = "v3"
53+ v4 = "v4"
5054
5155 def get_module (self ) -> ModelModule :
5256 if self == self .__class__ .v1 :
@@ -61,11 +65,15 @@ def get_module(self) -> ModelModule:
6165 from app .data .processing .predictive_models import v3
6266
6367 return v3
68+ elif self == self .__class__ .v4 :
69+ from app .data .processing .predictive_models import v4
70+
71+ return v4
6472 else :
6573 raise ValueError (f"Unclear what happened; { self } not supported" )
6674
6775
68- DEFAULT_MODEL_VERSION = ModelVersion .v1
76+ DEFAULT_MODEL_VERSION = ModelVersion .v4
6977
7078
7179@mail_on_fail
@@ -75,15 +83,19 @@ def _combine_job(
7583 model_version : ModelVersion = DEFAULT_MODEL_VERSION ,
7684) -> pd .DataFrame :
7785 mod = model_version .get_module ()
78- df_usgs = get_live_usgs_data (days_ago = days_ago )
86+ df_usgs_w = get_live_usgs_data (days_ago = days_ago , site_no = "01104500" )
87+ df_usgs_b = get_live_usgs_data (days_ago = days_ago , site_no = "01104683" )
7988 df_hobolink = get_live_hobolink_data (export_name = export_name )
80- df_combined = mod .process_data (df_hobolink = df_hobolink , df_usgs = df_usgs )
89+ df_combined = mod .process_data (
90+ df_hobolink = df_hobolink , df_usgs_w = df_usgs_w , df_usgs_b = df_usgs_b
91+ )
8192 return df_combined
8293
8394
8495combine_v1_job = partial (_combine_job , model_version = ModelVersion .v1 )
8596combine_v2_job = partial (_combine_job , model_version = ModelVersion .v2 )
8697combine_v3_job = partial (_combine_job , model_version = ModelVersion .v3 )
98+ combine_v4_job = partial (_combine_job , model_version = ModelVersion .v4 )
8799
88100
89101@mail_on_fail
@@ -93,29 +105,37 @@ def _predict_job(
93105 model_version : ModelVersion = DEFAULT_MODEL_VERSION ,
94106) -> pd .DataFrame :
95107 mod = model_version .get_module ()
96- df_usgs = get_live_usgs_data (days_ago = days_ago )
108+ df_usgs_w = get_live_usgs_data (days_ago = days_ago , site_no = "01104500" )
109+ df_usgs_b = get_live_usgs_data (days_ago = days_ago , site_no = "01104683" )
97110 df_hobolink = get_live_hobolink_data (export_name = export_name )
98- df_combined = mod .process_data (df_hobolink = df_hobolink , df_usgs = df_usgs )
111+ df_combined = mod .process_data (
112+ df_hobolink = df_hobolink , df_usgs_w = df_usgs_w , df_usgs_b = df_usgs_b
113+ )
99114 df_predictions = mod .all_models (df_combined )
100115 return df_predictions
101116
102117
103118predict_v1_job = partial (_predict_job , model_version = ModelVersion .v1 )
104119predict_v2_job = partial (_predict_job , model_version = ModelVersion .v2 )
105120predict_v3_job = partial (_predict_job , model_version = ModelVersion .v3 )
121+ predict_v4_job = partial (_predict_job , model_version = ModelVersion .v4 )
106122
107123
108124@mail_on_fail
109125def update_db () -> None :
110126 mod = DEFAULT_MODEL_VERSION .get_module ()
111- df_usgs = get_live_usgs_data ()
127+ df_usgs_w = get_live_usgs_data (site_no = "01104500" )
128+ df_usgs_b = get_live_usgs_data (site_no = "01104683" )
112129 df_hobolink = get_live_hobolink_data ()
113- df_combined = mod .process_data (df_hobolink = df_hobolink , df_usgs = df_usgs )
130+ df_combined = mod .process_data (
131+ df_hobolink = df_hobolink , df_usgs_w = df_usgs_w , df_usgs_b = df_usgs_b
132+ )
114133 df_predictions = mod .all_models (df_combined )
115134
116135 hours = current_app .config ["STORAGE_HOURS" ]
117136 try :
118- _write_to_db (df_usgs , "usgs" , rows = hours * USGS_ROWS_PER_HOUR )
137+ _write_to_db (df_usgs_w , "usgs_w" , rows = hours * USGS_ROWS_PER_HOUR_WALTHAM )
138+ _write_to_db (df_usgs_b , "usgs_b" , rows = hours * USGS_ROWS_PER_HOUR_MUDDY_RIVER )
119139 _write_to_db (df_hobolink , "hobolink" , rows = hours * HOBOLINK_ROWS_PER_HOUR )
120140 _write_to_db (df_combined , "processed_data" )
121141 _write_to_db (df_predictions , Prediction .__tablename__ )
@@ -129,17 +149,21 @@ def update_db() -> None:
129149@mail_on_fail
130150def send_database_exports () -> None :
131151 mod = DEFAULT_MODEL_VERSION .get_module ()
132- df_usgs = get_live_usgs_data (days_ago = 90 )
152+ df_usgs_w = get_live_usgs_data (days_ago = 90 , site_no = "01104500" )
153+ df_usgs_b = get_live_usgs_data (days_ago = 90 , site_no = "01104683" )
133154 df_hobolink = get_live_hobolink_data (export_name = "code_for_boston_export_90d" )
134- df_combined = mod .process_data (df_hobolink = df_hobolink , df_usgs = df_usgs )
155+ df_combined = mod .process_data (
156+ df_hobolink = df_hobolink , df_usgs_w = df_usgs_w , df_usgs_b = df_usgs_b
157+ )
135158 df_predictions = mod .all_models (df_combined )
136159 df_override_history = execute_sql ("select * from override_history;" )
137160
138161 todays_date = get_current_time ().strftime ("%Y_%m_%d" )
139162
140163 msg = ExportEmail ()
141164
142- msg .attach_dataframe (df_usgs , f"{ todays_date } -usgs.csv" )
165+ msg .attach_dataframe (df_usgs_w , f"{ todays_date } -usgs_w.csv" )
166+ msg .attach_dataframe (df_usgs_b , f"{ todays_date } -usgs_b.csv" )
143167 msg .attach_dataframe (df_hobolink , f"{ todays_date } -hobolink.csv" )
144168 msg .attach_dataframe (df_combined , f"{ todays_date } -combined.csv" )
145169 msg .attach_dataframe (df_predictions , f"{ todays_date } -prediction.csv" )
0 commit comments