diff --git a/server.py b/server.py index c7ca76d..f25f2b0 100644 --- a/server.py +++ b/server.py @@ -1,77 +1,77 @@ -from functools import cache import json from flask import ( Flask, make_response, - redirect, - request, jsonify, render_template, send_from_directory, send_file, ) import os -import json import requests -from datetime import datetime import dotenv import csv from io import StringIO dotenv.load_dotenv() + def load_schedule_data(): """Load schedule data from Google Sheets or fallback to JSON file""" # Try to load from Google Sheets first - google_sheet_url = os.getenv('GOOGLE_SHEET_URL') - + google_sheet_url = os.getenv("GOOGLE_SHEET_URL") + if google_sheet_url: try: # Convert Google Sheets URL to CSV export URL - if '/edit' in google_sheet_url: - csv_url = google_sheet_url.replace('/edit#gid=', '/export?format=csv&gid=') - csv_url = csv_url.replace('/edit', '/export?format=csv') + if "/edit" in google_sheet_url: + csv_url = google_sheet_url.replace( + "/edit#gid=", "/export?format=csv&gid=" + ) + csv_url = csv_url.replace("/edit", "/export?format=csv") else: csv_url = google_sheet_url - + print(f"Fetching schedule from Google Sheets: {csv_url}") - + response = requests.get(csv_url, timeout=10) response.raise_for_status() - + # Parse CSV data csv_data = StringIO(response.text) reader = csv.DictReader(csv_data) - + schedule = [] for row in reader: # Map CSV columns to our expected format + leaders_str = row.get("Leaders", "").strip() # Expected columns: Date, Primary Leader, Secondary Leader, Topic schedule_item = { - "date": row.get('Date', '').strip(), - "primary_leader": row.get('Primary Leader', '').strip(), - "secondary_leader": row.get('Secondary Leader', '').strip(), - "topic": row.get('Topic', '').strip() + "date": row.get("Date", "").strip(), + "leaders": [leader for leader in leaders_str.split(", ") if leader] + if leaders_str + else [], + "topic": row.get("Topic", "").strip(), } - + # Only add rows that have at least a date and topic - if schedule_item['date'] and schedule_item['topic']: + if schedule_item["date"] and schedule_item["topic"]: schedule.append(schedule_item) - + print(f"Successfully loaded {len(schedule)} items from Google Sheets") return schedule - + except requests.RequestException as e: print(f"Error fetching from Google Sheets: {e}") except Exception as e: print(f"Error parsing Google Sheets data: {e}") - + # Fallback to JSON file try: - with open('schedule_data.json', 'r') as f: + with open("schedule_data.json", "r") as f: data = json.load(f) print("Loaded schedule from local JSON file") - return data.get('schedule', []) + return data.get("schedule", []) except FileNotFoundError: print("Warning: schedule_data.json not found. Using empty schedule.") return [] @@ -79,6 +79,7 @@ def load_schedule_data(): print("Warning: Invalid JSON in schedule_data.json. Using empty schedule.") return [] + # Load schedule data from JSON file SCHEDULE_DATA = load_schedule_data() @@ -90,6 +91,7 @@ def find(name, path): if name in files: return os.path.join(root, name) + # Assets routes @app.route("/assets/") def send_assets(path): @@ -181,6 +183,7 @@ def api_schedule(): SCHEDULE_DATA = current_schedule return jsonify({"schedule": current_schedule}) + # endregion diff --git a/templates/schedule.html b/templates/schedule.html index cc4ca9c..f732607 100644 --- a/templates/schedule.html +++ b/templates/schedule.html @@ -43,10 +43,10 @@ {% for item in schedule %} - + {{ item.date }} - {% if item.primary_leader %}{{ item.primary_leader }}{% endif %}{% if item.primary_leader and item.secondary_leader %} & {% endif %}{% if item.secondary_leader %}{{ item.secondary_leader }}{% endif %} - {{ item.topic }} + {% if item.leaders %}{% if item.leaders|length > 1 %}{{ item.leaders[:-1]|join(', ') }} & {{ item.leaders[-1] }}{% else %}{{ item.leaders[0] }}{% endif %}{% endif %} + {{ item.topic }} {% endfor %} @@ -102,6 +102,8 @@ }); }); + + {# #}