11# to run from the console:
2- # python3 -m venv .venv
2+ # python3 -m venv .venv
33# source .venv/bin/activate
44# pip install -r requirements.txt
5- # export FRED_API_KEY='YOUR_ACTUAL_API_KEY '
5+ # export FRED_API_KEY= 'key '
66# python3 dashboard.py
77
88import os
1212from dotenv import load_dotenv
1313import plotly .graph_objects as go
1414
15+ print ("Script starting..." ) # New log
16+
1517# Load FRED API key
1618load_dotenv ()
17- fred = Fred (api_key = os .getenv ("FRED_API_KEY" ))
19+ # fred = Fred(api_key=os.getenv("FRED_API_KEY"))
20+ apikey = os .getenv ("FRED_API_KEY" )
21+ if apikey :
22+ print ("FRED_API_KEY environment variable found." ) # New log
23+ if len (apikey ) > 4 :
24+ print (f"FRED_API_KEY preview: ...{ apikey [- 4 :]} " ) # New log (shows last 4 chars, be careful if sensitive)
25+ else :
26+ print ("FRED_API_KEY seems very short." ) # New log
27+ else :
28+ print ("FRED_API_KEY environment variable NOT FOUND." ) # New log
29+ fred = Fred (api_key = apikey )
1830
1931# Ensure output directory exists
20- os .makedirs ("../../static/dashboard" , exist_ok = True )
32+ # os.makedirs("../../static/dashboard", exist_ok=True)
33+ output_dir_relative = "../../static/dashboard"
34+ output_dir_absolute = os .path .abspath (output_dir_relative )
35+ print (f"Ensuring output directory exists: { output_dir_absolute } " ) # New log
36+ os .makedirs (output_dir_absolute , exist_ok = True )
2137
2238# Create helper function to fetch recessions
2339def get_recession_periods (rec_series ):
@@ -114,8 +130,11 @@ def make_plot(df, y_column, title, filename, y_label, x_min=None, x_max=None, y_
114130 showlegend = False
115131 )
116132
133+ # In your make_plot function, before fig.write_html:
134+ html_file_path = os .path .join (output_dir_absolute , f"{ filename } .html" )
135+ print (f"Attempting to write HTML to: { html_file_path } " ) # New log
117136 fig .write_html (
118- f"../../static/dashboard/ { filename } .html" ,
137+ html_file_path , # Use the absolute path
119138 include_plotlyjs = 'cdn' ,
120139 full_html = False ,
121140 config = {
@@ -135,11 +154,35 @@ def make_plot(df, y_column, title, filename, y_label, x_min=None, x_max=None, y_
135154 }
136155 )
137156
157+ print (f"Successfully wrote HTML: { html_file_path } " ) # New log
158+
159+
138160
139161# Fetch raw data from FRED
162+ print ("Fetching UNEMPLOY data..." )
140163u = fred .get_series ("UNEMPLOY" )
164+ if u is not None and not u .empty :
165+ print (f"UNEMPLOY data fetched successfully. Shape: { u .shape } , Last date: { u .index .max ()} " )
166+ else :
167+ print ("Failed to fetch UNEMPLOY data or data is empty." )
168+
169+ print ("Fetching JTSJOL data..." )
141170v = fred .get_series ("JTSJOL" )
171+ if v is not None and not v .empty :
172+ print (f"JTSJOL data fetched successfully. Shape: { v .shape } , Last date: { v .index .max ()} " )
173+ else :
174+ print ("Failed to fetch JTSJOL data or data is empty." )
175+
176+ print ("Fetching CLF16OV data..." )
142177lf = fred .get_series ("CLF16OV" )
178+ if lf is not None and not lf .empty :
179+ print (f"CLF16OV data fetched successfully. Shape: { lf .shape } , Last date: { lf .index .max ()} " )
180+ else :
181+ print ("Failed to fetch CLF16OV data or data is empty." )
182+
183+ # u = fred.get_series("UNEMPLOY")
184+ # v = fred.get_series("JTSJOL")
185+ # lf = fred.get_series("CLF16OV")
143186
144187# Ensure datetime index for all series
145188u .index = pd .to_datetime (u .index )
@@ -215,11 +258,16 @@ def make_plot(df, y_column, title, filename, y_label, x_min=None, x_max=None, y_
215258
216259# Save data
217260
218- csv_path = "../../static/dashboard/unemployment_rate.csv"
261+ csv_filename = "unemployment_rate.csv"
262+ csv_path_absolute = os .path .join (output_dir_absolute , csv_filename ) # Use absolute path
263+ print (f"Attempting to write CSV to: { csv_path_absolute } " ) # New log
264+ # csv_path = "../../static/dashboard/unemployment_rate.csv"
219265df_out = df .copy ()
220266df_out .columns = ["Unemployment rate (%)" ]
221267df_out .index .name = "Date"
222- df_out .to_csv (csv_path )
268+ # df_out.to_csv(csv_path)
269+ df_out .to_csv (csv_path_absolute )
270+ print (f"Successfully wrote CSV: { csv_path_absolute } " ) # New log
223271
224272# Plot vacancy rate
225273
@@ -238,11 +286,16 @@ def make_plot(df, y_column, title, filename, y_label, x_min=None, x_max=None, y_
238286
239287# Save data
240288
241- csv_path = "../../static/dashboard/vacancy_rate.csv"
289+ csv_filename = "vacancy_rate.csv"
290+ csv_path_absolute = os .path .join (output_dir_absolute , csv_filename ) # Use absolute path
291+ print (f"Attempting to write CSV to: { csv_path_absolute } " ) # New log
292+ # csv_path = "../../static/dashboard/vacancy_rate.csv"
242293df_out = df .copy ()
243294df_out .columns = ["Vacancy rate (%)" ]
244295df_out .index .name = "Date"
245- df_out .to_csv (csv_path )
296+ # df_out.to_csv(csv_path)
297+ df_out .to_csv (csv_path_absolute )
298+ print (f"Successfully wrote CSV: { csv_path_absolute } " ) # New log
246299
247300# Plot labor market tightness
248301
@@ -261,11 +314,16 @@ def make_plot(df, y_column, title, filename, y_label, x_min=None, x_max=None, y_
261314
262315# Save data
263316
264- csv_path = "../../static/dashboard/labor_market_tightness.csv"
317+ csv_filename = "labor_market_tightness.csv"
318+ csv_path_absolute = os .path .join (output_dir_absolute , csv_filename ) # Use absolute path
319+ print (f"Attempting to write CSV to: { csv_path_absolute } " ) # New log
320+ # csv_path = "../../static/dashboard/labor_market_tightness.csv"
265321df_out = df .copy ()
266322df_out .columns = ["Labor market tightness" ]
267323df_out .index .name = "Date"
268- df_out .to_csv (csv_path )
324+ # df_out.to_csv(csv_path)
325+ df_out .to_csv (csv_path_absolute )
326+ print (f"Successfully wrote CSV: { csv_path_absolute } " ) # New log
269327
270328# Plot Beveridge curve
271329
@@ -392,11 +450,16 @@ def make_plot(df, y_column, title, filename, y_label, x_min=None, x_max=None, y_
392450
393451# Save data
394452
395- csv_path = "../../static/dashboard/feru.csv"
453+ csv_filename = "feru.csv"
454+ csv_path_absolute = os .path .join (output_dir_absolute , csv_filename ) # Use absolute path
455+ print (f"Attempting to write CSV to: { csv_path_absolute } " ) # New log
456+ # csv_path = "../../static/dashboard/feru.csv"
396457df_out = df .copy ()
397458df_out .columns = ["FERU (%)" ]
398459df_out .index .name = "Date"
399- df_out .to_csv (csv_path )
460+ # df_out.to_csv(csv_path)
461+ df_out .to_csv (csv_path_absolute )
462+ print (f"Successfully wrote CSV: { csv_path_absolute } " ) # New log
400463
401464# Plot unemployment gap
402465
@@ -415,11 +478,16 @@ def make_plot(df, y_column, title, filename, y_label, x_min=None, x_max=None, y_
415478
416479# Save data
417480
418- csv_path = "../../static/dashboard/unemployment_gap.csv"
481+ csv_filename = "unemployment_gap.csv"
482+ csv_path_absolute = os .path .join (output_dir_absolute , csv_filename ) # Use absolute path
483+ print (f"Attempting to write CSV to: { csv_path_absolute } " ) # New log
484+ # csv_path = "../../static/dashboard/unemployment_gap.csv"
419485df_out = df .copy ()
420486df_out .columns = ["Unemployment gap (pp)" ]
421487df_out .index .name = "Date"
422- df_out .to_csv (csv_path )
488+ # df_out.to_csv(csv_path)
489+ df_out .to_csv (csv_path_absolute )
490+ print (f"Successfully wrote CSV: { csv_path_absolute } " ) # New log
423491
424492# Plot recession indicator
425493
@@ -438,11 +506,16 @@ def make_plot(df, y_column, title, filename, y_label, x_min=None, x_max=None, y_
438506
439507# Save data
440508
441- csv_path = "../../static/dashboard/recession_indicator.csv"
509+ csv_filename = "recession_indicator.csv"
510+ csv_path_absolute = os .path .join (output_dir_absolute , csv_filename ) # Use absolute path
511+ print (f"Attempting to write CSV to: { csv_path_absolute } " ) # New log
512+ # csv_path = "../../static/dashboard/recession_indicator.csv"
442513df_out = df .copy ()
443514df_out .columns = ["Recession indicator (pp)" ]
444515df_out .index .name = "Date"
445- df_out .to_csv (csv_path )
516+ # df_out.to_csv(csv_path)
517+ df_out .to_csv (csv_path_absolute )
518+ print (f"Successfully wrote CSV: { csv_path_absolute } " ) # New log
446519
447520# Plot recession probability
448521
@@ -461,8 +534,15 @@ def make_plot(df, y_column, title, filename, y_label, x_min=None, x_max=None, y_
461534
462535# Save data
463536
464- csv_path = "../../static/dashboard/recession_probability.csv"
537+ csv_filename = "recession_probability.csv"
538+ csv_path_absolute = os .path .join (output_dir_absolute , csv_filename ) # Use absolute path
539+ print (f"Attempting to write CSV to: { csv_path_absolute } " ) # New log
540+ # csv_path = "../../static/dashboard/recession_probability.csv"
465541df_out = df .copy ()
466542df_out .columns = ["Recession probability (%)" ]
467543df_out .index .name = "Date"
468- df_out .to_csv (csv_path )
544+ # df_out.to_csv(csv_path)
545+ df_out .to_csv (csv_path_absolute )
546+ print (f"Successfully wrote CSV: { csv_path_absolute } " ) # New log
547+
548+ print ("Script finished." ) # New log
0 commit comments