Skip to content
Snippets Groups Projects
convert_timetable.py 1.11 KiB
Newer Older
from pathlib import Path
import re
import json

import dateutil
import ics

course = ics.Calendar(Path('mytimetable_export.ics').read_text())

events = []

def parse_data(description):
    type_conversion = {
        'Exam/Test in Osiris': 'Exam',
        'Exam/Test not in Osiris': 'Minitest',
        'Lecture': 'Lecture',
        'Instruction': 'Exercises',
    }
    type = type_conversion[re.search(
        '^Type: (.*)$', description, flags=re.MULTILINE
    ).group(1)]
    out = re.search(
        '^Location\\(s\\):\n(?P<name>.*?)(?:: http:.*?)?$',
        description,
        flags=re.MULTILINE,
    ).groupdict()
    out['type'] = type
    return out


for original in course.events:
    parsed = parse_data(original.description)
    event = {
        'start': str(original.begin),
        'end': str(original.end),
        'title': f'{parsed["type"]} @ {parsed["name"]}',
    }
    events.append(event)

events = sorted(events, key=(lambda event: dateutil.parser.isoparse(event['start'])))
events[-1]['title'] = events[-1]['title'].replace('Exam', 'Retake exam')
Path('src/figures/events.json').write_text(json.dumps(events))