triflix commited on
Commit
ba575fd
·
verified ·
1 Parent(s): 26fca56

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +95 -95
app.py CHANGED
@@ -1,95 +1,95 @@
1
- from flask import Flask, request, render_template, jsonify, redirect
2
- import json
3
- from datetime import datetime, timedelta
4
- import os
5
- from flask_cors import CORS
6
-
7
- app = Flask(__name__)
8
- CORS(app) # Enable CORS for all routes (for front-end testing on a different port/domain)
9
- DATA_FILE = 'events.json'
10
-
11
- def load_events():
12
- if not os.path.exists(DATA_FILE):
13
- return []
14
- with open(DATA_FILE, 'r') as f:
15
- return json.load(f)
16
-
17
- def save_events(events):
18
- with open(DATA_FILE, 'w') as f:
19
- json.dump(events, f, indent=2)
20
-
21
- def get_upcoming_reminders(events):
22
- now = datetime.now()
23
- end = now + timedelta(hours=4)
24
- upcoming = []
25
-
26
- for e in events:
27
- start = datetime.fromisoformat(e['start_time'])
28
- if now <= start < end:
29
- upcoming.append(e)
30
-
31
- return upcoming
32
-
33
- @app.route('/')
34
- def index():
35
- all_events = load_events()
36
- reminders = get_upcoming_reminders(all_events)
37
-
38
- search_query = request.args.get('search', '').lower()
39
- if search_query:
40
- events = [e for e in all_events if search_query in e['title'].lower()]
41
- else:
42
- events = all_events
43
-
44
- return render_template('index.html', events=events, reminders=reminders, search=search_query)
45
-
46
- # Get all events
47
- @app.route('/events', methods=['GET', 'POST'])
48
- @app.route('/events/', methods=['GET', 'POST']) # For routes with trailing slash
49
- def events():
50
- if request.method == 'GET':
51
- events = load_events()
52
- return jsonify(events)
53
- elif request.method == 'POST':
54
- events = load_events()
55
- data = request.get_json()
56
- new_event = {
57
- 'id': str(len(events) + 1),
58
- 'title': data['title'],
59
- 'description': data.get('description', ''),
60
- 'start_time': data['start_time'],
61
- 'end_time': data['end_time'],
62
- }
63
- events.append(new_event)
64
- save_events(events)
65
- return jsonify(new_event), 201
66
-
67
- # Update an existing event
68
- @app.route('/events/<event_id>', methods=['PUT'])
69
- def update_event(event_id):
70
- events = load_events()
71
- data = request.get_json()
72
- for event in events:
73
- if event['id'] == event_id:
74
- event.update(data)
75
- save_events(events)
76
- return jsonify(event)
77
- return jsonify({'error': 'Event not found'}), 404
78
-
79
- # Delete an event
80
- @app.route('/events/<event_id>', methods=['DELETE'])
81
- def delete_event(event_id):
82
- events = load_events()
83
- events = [e for e in events if e['id'] != event_id]
84
- save_events(events)
85
- return '', 204
86
-
87
- # Custom template filter for formatting time (12-hour clock)
88
- @app.template_filter('format12')
89
- def format12(value):
90
- dt = datetime.fromisoformat(value)
91
- return dt.strftime('%I:%M %p, %b %d')
92
-
93
- if __name__ == "__main__":
94
- # Make sure it listens on 0.0.0.0 (the container's network interface)
95
- app.run(host="0.0.0.0", port=5000)
 
1
+ from flask import Flask, request, render_template, jsonify, redirect
2
+ import json
3
+ from datetime import datetime, timedelta
4
+ import os
5
+ from flask_cors import CORS
6
+
7
+ app = Flask(__name__)
8
+ CORS(app) # Enable CORS for all routes (for front-end testing on a different port/domain)
9
+ DATA_FILE = 'events.json'
10
+
11
+ def load_events():
12
+ if not os.path.exists(DATA_FILE):
13
+ return []
14
+ with open(DATA_FILE, 'r') as f:
15
+ return json.load(f)
16
+
17
+ def save_events(events):
18
+ with open(DATA_FILE, 'w') as f:
19
+ json.dump(events, f, indent=2)
20
+
21
+ def get_upcoming_reminders(events):
22
+ now = datetime.now()
23
+ end = now + timedelta(hours=4)
24
+ upcoming = []
25
+
26
+ for e in events:
27
+ start = datetime.fromisoformat(e['start_time'])
28
+ if now <= start < end:
29
+ upcoming.append(e)
30
+
31
+ return upcoming
32
+
33
+ @app.route('/')
34
+ def index():
35
+ all_events = load_events()
36
+ reminders = get_upcoming_reminders(all_events)
37
+
38
+ search_query = request.args.get('search', '').lower()
39
+ if search_query:
40
+ events = [e for e in all_events if search_query in e['title'].lower()]
41
+ else:
42
+ events = all_events
43
+
44
+ return render_template('index.html', events=events, reminders=reminders, search=search_query)
45
+
46
+ # Get all events
47
+ @app.route('/events', methods=['GET', 'POST'])
48
+ @app.route('/events/', methods=['GET', 'POST']) # For routes with trailing slash
49
+ def events():
50
+ if request.method == 'GET':
51
+ events = load_events()
52
+ return jsonify(events)
53
+ elif request.method == 'POST':
54
+ events = load_events()
55
+ data = request.get_json()
56
+ new_event = {
57
+ 'id': str(len(events) + 1),
58
+ 'title': data['title'],
59
+ 'description': data.get('description', ''),
60
+ 'start_time': data['start_time'],
61
+ 'end_time': data['end_time'],
62
+ }
63
+ events.append(new_event)
64
+ save_events(events)
65
+ return jsonify(new_event), 201
66
+
67
+ # Update an existing event
68
+ @app.route('/events/<event_id>', methods=['PUT'])
69
+ def update_event(event_id):
70
+ events = load_events()
71
+ data = request.get_json()
72
+ for event in events:
73
+ if event['id'] == event_id:
74
+ event.update(data)
75
+ save_events(events)
76
+ return jsonify(event)
77
+ return jsonify({'error': 'Event not found'}), 404
78
+
79
+ # Delete an event
80
+ @app.route('/events/<event_id>', methods=['DELETE'])
81
+ def delete_event(event_id):
82
+ events = load_events()
83
+ events = [e for e in events if e['id'] != event_id]
84
+ save_events(events)
85
+ return '', 204
86
+
87
+ # Custom template filter for formatting time (12-hour clock)
88
+ @app.template_filter('format12')
89
+ def format12(value):
90
+ dt = datetime.fromisoformat(value)
91
+ return dt.strftime('%I:%M %p, %b %d')
92
+
93
+ if __name__ == "__main__":
94
+ # Make sure it listens on 0.0.0.0 (the container's network interface)
95
+ app.run(host="0.0.0.0", port=7860)