Download app.py from DeCoster/pycalpal-python-calendar-pal: direct link, hf CLI and curl.
- Browser
- Download file 2.62 kB
-
https://huggingface.co/spaces/DeCoster/pycalpal-python-calendar-pal/resolve/main/app.py
- Command line
-
hf download hf://spaces/DeCoster/pycalpal-python-calendar-pal/app.py
-
curl -L -o app.py https://huggingface.co/spaces/DeCoster/pycalpal-python-calendar-pal/resolve/main/app.py
2.62 kB
| python | |
| from flask import Flask, render_template, request, jsonify, send_file | |
| from ics import Calendar, Event | |
| from datetime import datetime | |
| import io | |
| app = Flask(__name__) | |
| def index(): | |
| return render_template('index.html') | |
| def generate_ics(): | |
| try: | |
| data = request.get_json() | |
| events_data = data.get('events', []) | |
| cal = Calendar() | |
| for event_data in events_data: | |
| event = Event() | |
| event.name = event_data.get('title', 'Untitled Event') | |
| event.location = event_data.get('location', '') | |
| event.description = event_data.get('description', '') | |
| # Parse dates based on all-day flag | |
| is_all_day = event_data.get('allDay', False) | |
| if is_all_day: | |
| start_str = event_data.get('start') | |
| end_str = event_data.get('end') | |
| # Parse date strings (format depends on browser locale) | |
| start_date = datetime.strptime(start_str.split('T')[0], '%Y-%m-%d').date() | |
| end_date = datetime.strptime(end_str.split('T')[0], '%Y-%m-%d').date() | |
| event.begin = start_date | |
| event.end = end_date | |
| event.all_day = True | |
| else: | |
| # Parse datetime strings | |
| start_str = event_data.get('start') | |
| end_str = event_data.get('end') | |
| # Handle different datetime formats from different browsers | |
| for fmt in ('%Y-%m-%dT%H:%M', '%m/%d/%Y, %I:%M:%S %p', '%Y-%m-%d %H:%M:%S'): | |
| try: | |
| start_dt = datetime.strptime(start_str, fmt) | |
| end_dt = datetime.strptime(end_str, fmt) | |
| event.begin = start_dt | |
| event.end = end_dt | |
| break | |
| except ValueError: | |
| continue | |
| cal.events.add(event) | |
| # Create in-memory file | |
| ics_file = io.BytesIO() | |
| ics_file.write(str(cal).encode('utf-8')) | |
| ics_file.seek(0) | |
| return send_file( | |
| ics_file, | |
| as_attachment=True, | |
| download_name='calendar_events.ics', | |
| mimetype='text/calendar' | |
| ) | |
| except Exception as e: | |
| print(f"Error generating ICS: {str(e)}") | |
| return jsonify({'error': str(e)}), 500 | |
| if __name__ == '__main__': | |
| app.run(debug=True) | |
| </html> |