Example #1
0
    def TDecode(url):
        """Creates a list of event objects based on a ical url"""
        if url is None:
            return None  # Nob hasnt given us their timetable yet
        rawCal = urllib.request.urlopen(
            url)  # Try and download the timetable's ical
        cal = Calendar.from_ical(rawCal.read())  # Parse the ical
        events = []  # create a list of events

        for component in cal.walk():  # for "thing" in the cal
            if component.name == "VEVENT":  # if its an event
                description = component.get('description').split(
                    "\n")  # get all its information
                location = component.get(
                    'location'
                )  # unused location data because description has it more reliably
                startdt = component.get('dtstart').dt  # start date/time
                enddt = component.get('dtend').dt  # end date/time

                module = "Undefined"
                room = "Undefined"
                type = "Undefined"

                for item in description:
                    item = str(item)
                    if "MODULE TITLE:" in item:  # get the modules name
                        module = item.replace("MODULE TITLE: ", "")
                    if "ROOM(S):" in item:  # get the room name
                        room = item.replace("ROOM(S): ", "")
                    if "EVENT TYPE:" in item:  # is it a lecture? workshop? seminar?
                        type = item.replace("EVENT TYPE: ", "")
                date = "{:02d}/{:02d}".format(startdt.day, startdt.month)
                timeFormatted = "{Date}-{hour:02d}:{minute:02d}".format(
                    Date=date, hour=startdt.hour + 1, minute=startdt.minute)
                endFormatted = "{hour:02d}:{minute:02d}".format(
                    hour=enddt.hour + 1, minute=enddt.minute)
                event = Event()  # create an event object
                event.module = module
                event.Ftime = timeFormatted
                event.date = startdt
                event.end = endFormatted
                event.type = type
                event.room = room
                if len(
                        events
                ) != 0:  # put the event, in order, in the list of events
                    for i in range(len(events)):
                        if event.date < events[i].date:
                            events.insert(i, event)
                            break
                        if i == len(events) - 1:
                            events.append(event)
                else:
                    events.append(event)
        return events