bluenevus commited on
Commit
926cfd7
·
1 Parent(s): 1edd3b2

Update app.py via AI Editor

Browse files
Files changed (1) hide show
  1. app.py +54 -8
app.py CHANGED
@@ -50,11 +50,11 @@ API_KEY = os.getenv('ACCUWEATHER_API_KEY')
50
  BASE_URL = "http://dataservice.accuweather.com"
51
 
52
  INDEX_IDS = {
53
- "Health": 31,
54
- "Environmental": 34,
55
- "Pollen": 11,
56
- "Mosquito": 50,
57
- "Pests": 53
58
  }
59
 
60
  def get_location_key(lat, lon):
@@ -268,6 +268,42 @@ def create_environmental_api_card(environmental_data):
268
  ])
269
  ], className="mb-4")
270
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
271
  app = dash.Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])
272
  server = app.server
273
 
@@ -287,6 +323,7 @@ app.layout = dbc.Container([
287
  type="default",
288
  children=[
289
  html.Div(id="current-weather-output"),
 
290
  html.Div(id="environmental-api-output")
291
  ],
292
  style={"width": "100%"}
@@ -342,6 +379,7 @@ def set_session_cookie(response):
342
  @app.callback(
343
  [
344
  Output("current-weather-output", "children"),
 
345
  Output("environmental-api-output", "children"),
346
  Output("forecast-output", "children"),
347
  ],
@@ -355,10 +393,10 @@ def update_weather(location, session_data):
355
  if not location or 'error' in location:
356
  error_message = location.get('error', 'Waiting for location data...') if location else 'Waiting for location data...'
357
  logger.warning(f"Session {session_id} waiting for location: {error_message}")
358
- return [dbc.Spinner(color="primary"), "", ""]
359
 
360
  lat, lon = location["latitude"], location["longitude"]
361
- results = {"current": "", "environmental": "", "forecast": ""}
362
  def fetch_weather_data():
363
  try:
364
  location_key = get_data_from_session(session_id, "location_key")
@@ -372,16 +410,23 @@ def update_weather(location, session_data):
372
  forecast_5day = get_forecast_5day(location_key)
373
  environmental_data = get_indices_1day(location_key, INDEX_IDS["Environmental"])
374
 
 
 
 
 
 
375
  if current is None or forecast_5day is None:
376
  raise ValueError("Failed to fetch weather data")
377
 
378
  results["current"] = create_current_weather_card(current)
 
379
  results["environmental"] = create_environmental_api_card(environmental_data)
380
  results["forecast"] = create_forecast_5day_card(forecast_5day)
381
  save_session_data(session_id, "weather_results", results)
382
  except Exception as e:
383
  logger.error(f"Session {session_id} error: {str(e)}")
384
  results["current"] = ""
 
385
  results["environmental"] = ""
386
  results["forecast"] = dbc.Card([
387
  dbc.CardBody([
@@ -396,11 +441,12 @@ def update_weather(location, session_data):
396
  if weather_results:
397
  return [
398
  weather_results.get("current", ""),
 
399
  weather_results.get("environmental", ""),
400
  weather_results.get("forecast", ""),
401
  ]
402
  else:
403
- return [dbc.Spinner(color="primary"), "", ""]
404
 
405
  if __name__ == '__main__':
406
  print("Starting the Dash application...")
 
50
  BASE_URL = "http://dataservice.accuweather.com"
51
 
52
  INDEX_IDS = {
53
+ "Health": 10,
54
+ "Environmental": 5,
55
+ "Pollen": 30,
56
+ "Mosquito": 59,
57
+ "Pest": 61
58
  }
59
 
60
  def get_location_key(lat, lon):
 
268
  ])
269
  ], className="mb-4")
270
 
271
+ def create_environmental_indices_card(indices_dict):
272
+ items = []
273
+ index_display_names = {
274
+ "Health": "Health API",
275
+ "Environmental": "Environmental API",
276
+ "Pollen": "Pollen",
277
+ "Pest": "Pest",
278
+ "Mosquito": "Mosquito"
279
+ }
280
+ for key in ["Health", "Environmental", "Pollen", "Pest", "Mosquito"]:
281
+ data = indices_dict.get(key)
282
+ display_name = index_display_names[key]
283
+ if data and isinstance(data, list) and len(data) > 0:
284
+ d = data[0]
285
+ items.append(
286
+ html.Div([
287
+ html.H6(display_name, style={"marginBottom": "0.25rem", "fontWeight": "bold"}),
288
+ html.P(f"Category: {d.get('Category', 'N/A')}", style={"marginBottom": "0.25rem"}),
289
+ html.P(f"Value: {d.get('Value', 'N/A')}", style={"marginBottom": "0.25rem"}),
290
+ html.P(f"Text: {d.get('Text', 'N/A')}", style={"marginBottom": "0.75rem"})
291
+ ])
292
+ )
293
+ else:
294
+ items.append(
295
+ html.Div([
296
+ html.H6(display_name, style={"marginBottom": "0.25rem", "fontWeight": "bold"}),
297
+ html.P("No data available.", style={"marginBottom": "0.75rem"})
298
+ ])
299
+ )
300
+ return dbc.Card([
301
+ dbc.CardBody([
302
+ html.H4("Environmental Indices", className="card-title"),
303
+ *items
304
+ ])
305
+ ], className="mb-4")
306
+
307
  app = dash.Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP])
308
  server = app.server
309
 
 
323
  type="default",
324
  children=[
325
  html.Div(id="current-weather-output"),
326
+ html.Div(id="environmental-indices-output"),
327
  html.Div(id="environmental-api-output")
328
  ],
329
  style={"width": "100%"}
 
379
  @app.callback(
380
  [
381
  Output("current-weather-output", "children"),
382
+ Output("environmental-indices-output", "children"),
383
  Output("environmental-api-output", "children"),
384
  Output("forecast-output", "children"),
385
  ],
 
393
  if not location or 'error' in location:
394
  error_message = location.get('error', 'Waiting for location data...') if location else 'Waiting for location data...'
395
  logger.warning(f"Session {session_id} waiting for location: {error_message}")
396
+ return [dbc.Spinner(color="primary"), "", "", ""]
397
 
398
  lat, lon = location["latitude"], location["longitude"]
399
+ results = {"current": "", "indices": "", "environmental": "", "forecast": ""}
400
  def fetch_weather_data():
401
  try:
402
  location_key = get_data_from_session(session_id, "location_key")
 
410
  forecast_5day = get_forecast_5day(location_key)
411
  environmental_data = get_indices_1day(location_key, INDEX_IDS["Environmental"])
412
 
413
+ # Environmental Indices
414
+ indices_dict = {}
415
+ for name, idx in INDEX_IDS.items():
416
+ indices_dict[name] = get_indices_1day(location_key, idx)
417
+
418
  if current is None or forecast_5day is None:
419
  raise ValueError("Failed to fetch weather data")
420
 
421
  results["current"] = create_current_weather_card(current)
422
+ results["indices"] = create_environmental_indices_card(indices_dict)
423
  results["environmental"] = create_environmental_api_card(environmental_data)
424
  results["forecast"] = create_forecast_5day_card(forecast_5day)
425
  save_session_data(session_id, "weather_results", results)
426
  except Exception as e:
427
  logger.error(f"Session {session_id} error: {str(e)}")
428
  results["current"] = ""
429
+ results["indices"] = ""
430
  results["environmental"] = ""
431
  results["forecast"] = dbc.Card([
432
  dbc.CardBody([
 
441
  if weather_results:
442
  return [
443
  weather_results.get("current", ""),
444
+ weather_results.get("indices", ""),
445
  weather_results.get("environmental", ""),
446
  weather_results.get("forecast", ""),
447
  ]
448
  else:
449
+ return [dbc.Spinner(color="primary"), "", "", ""]
450
 
451
  if __name__ == '__main__':
452
  print("Starting the Dash application...")