@@ -51,7 +51,7 @@ def main(hub_dir, ptc_config_file, target_out_dir, regenerate):
5151 try :
5252 target_data_df = hub_config .get_target_data_df ()
5353 except FileNotFoundError as error :
54- logger .error (f"target data file not found. { hub_config . get_target_data_file_name () = } , { error = } " )
54+ logger .error (f"target data file not found. { error = } " )
5555 sys .exit (1 )
5656
5757 json_files = _generate_target_json_files (hub_config , target_data_df , target_out_dir , regenerate )
@@ -131,7 +131,7 @@ def ptc_target_data(model_task: ModelTask, target_data_df: pl.DataFrame, task_id
131131 if max_as_of is None :
132132 return None
133133 else :
134- target_data_df = target_data_df .filter (pl .col ('as_of' ) == max_as_of . isoformat () )
134+ target_data_df = target_data_df .filter (pl .col ('as_of' ) == max_as_of )
135135 else :
136136 # the file is one that is assumed to be updated weekly and so we can
137137 # assume that the effective as_of date for this file is the same as
@@ -158,30 +158,30 @@ def ptc_target_data(model_task: ModelTask, target_data_df: pl.DataFrame, task_id
158158 if len (target_data_df ) == 0 :
159159 return None
160160
161+ # date column type depends on data source: date objects from `connect_target_data()`, strings from custom CSV files.
162+ # convert date objects to ISO strings for JSON serialization; pass through strings as-is.
161163 return {
162- 'date' : target_data_df [target_date_col_name ].to_list (),
164+ 'date' : [ d . isoformat () if isinstance ( d , date ) else d for d in target_data_df [target_date_col_name ].to_list ()] ,
163165 'y' : target_data_df [observation_col_name ].to_list ()
164166 }
165167
166168
167- def _max_as_of_le_reference_date (target_data_df : pl .DataFrame , viz_target_id : str , reference_date : str ) -> date :
169+ def _max_as_of_le_reference_date (target_data_df : pl .DataFrame , viz_target_id : str , reference_date : str ) -> date | None :
168170 """
169171 ptc_target_data() helper
170172
171- :param target_data_df: a pl.DataFrame that loaded from HubConfigPtc.target_data_file_name. assumes follows our new
173+ :param target_data_df: a pl.DataFrame from connect_target_data(). assumes follows the
172174 time-series target data standard - has `as_of` column, etc.
173175 :param viz_target_id: the target of interest. via ModelTask.viz_target_id
174176 :param reference_date: string naming the reference_date of interest
175177 :return: max as_of that's <= `reference_date` for `viz_target_id`. return None if not found
176178 """
177179 reference_date = date .fromisoformat (reference_date )
178- unique_as_ofs = [date .fromisoformat (as_of ) for as_of in pl .Series (target_data_df
179- .filter (pl .col ('target' ) == viz_target_id )
180- .unique ('as_of' )
181- .select ('as_of' )
182- .sort ('as_of' ))] # sort for debugging
183- le_as_ofs = [as_of for as_of in unique_as_ofs if as_of <= reference_date ]
184- return max (le_as_ofs ) if le_as_ofs else None
180+ return (target_data_df
181+ .filter (pl .col ('target' ) == viz_target_id )
182+ .filter (pl .col ('as_of' ) <= reference_date )
183+ .select (pl .col ('as_of' ).max ())
184+ .item ())
185185
186186
187187#
0 commit comments