from flask import Flask import os import urllib.request from icalendar.cal import Calendar, Component app = Flask(__name__) FILTERED_COURSES = os.environ.get('COURSES', '').split(',') FILTERED_TYPES = os.environ.get('TYPES', '').split(',') YEAR = int(os.environ.get('YEAR', '4')) GROUP = int(os.environ.get('GROUP', '1')) GENERAL_GROUP = int(os.environ.get('GENERAL_GROUP', '0')) GROUPS = [GROUP, GENERAL_GROUP] @app.route("/") def hello(): url = os.environ.get('URL', None) if url is None: return "" cal_str = urllib.request.urlopen(url).read() cal = Component.from_ical(cal_str) other = Calendar() # Copy all properties of calendar for k, v in cal.items(): other.add(k, v) # Copy the VTIMEZONE component other.add_component(cal.walk('VTIMEZONE')[0]) # Filter and copy VEVENTs for ev in cal.walk('VEVENT'): if should_add(ev): other.add_component(ev) return other.to_ical().replace(b'\r\n', b'\n').strip() def should_add(event): course_code = event['SUMMARY'].split('-')[1].split('/')[0] course_type = event['SUMMARY'].split('/')[1].split('_')[1] year = event['SUMMARY'][0] group = event['SUMMARY'][-1] return \ course_code not in FILTERED_COURSES \ and course_type not in FILTERED_TYPES \ and year == YEAR \ and group in GROUPS if __name__ == "__main__": port = int(os.environ.get('PORT', 5000)) app.run('0.0.0.0', port)