from flask import Flask, request, render_template, jsonify, redirect import json from datetime import datetime, timedelta import os from flask_cors import CORS app = Flask(__name__) CORS(app) # ✅ Use Hugging Face's writable temp directory DATA_DIR = '/tmp/data' DATA_FILE = os.path.join(DATA_DIR, 'events.json') # ✅ Ensure the /tmp/data directory exists os.makedirs(DATA_DIR, exist_ok=True) # ✅ Create the events.json file if it doesn't exist if not os.path.exists(DATA_FILE): with open(DATA_FILE, 'w') as f: json.dump([], f) def load_events(): if not os.path.exists(DATA_FILE): return [] with open(DATA_FILE, 'r') as f: return json.load(f) def save_events(events): with open(DATA_FILE, 'w') as f: json.dump(events, f, indent=2) def get_upcoming_reminders(events): now = datetime.now() end = now + timedelta(hours=4) upcoming = [] for e in events: start = datetime.fromisoformat(e['start_time']) if now <= start < end: upcoming.append(e) return upcoming @app.route('/') def index(): all_events = load_events() reminders = get_upcoming_reminders(all_events) search_query = request.args.get('search', '').lower() if search_query: events = [e for e in all_events if search_query in e['title'].lower()] else: events = all_events return render_template('index.html', events=events, reminders=reminders, search=search_query) @app.route('/events', methods=['GET', 'POST']) @app.route('/events/', methods=['GET', 'POST']) def events(): if request.method == 'GET': events = load_events() return jsonify(events) elif request.method == 'POST': events = load_events() data = request.get_json() new_event = { 'id': str(len(events) + 1), 'title': data['title'], 'description': data.get('description', ''), 'start_time': data['start_time'], 'end_time': data['end_time'], } events.append(new_event) save_events(events) return jsonify(new_event), 201 @app.route('/events/', methods=['PUT']) def update_event(event_id): events = load_events() data = request.get_json() for event in events: if event['id'] == event_id: event.update(data) save_events(events) return jsonify(event) return jsonify({'error': 'Event not found'}), 404 @app.route('/events/', methods=['DELETE']) def delete_event(event_id): events = load_events() events = [e for e in events if e['id'] != event_id] save_events(events) return '', 204 @app.template_filter('format12') def format12(value): dt = datetime.fromisoformat(value) return dt.strftime('%I:%M %p, %b %d') if __name__ == "__main__": app.run(host="0.0.0.0", port=7860)