Exemple #1
0
def mkevent(data, cal, dt, isDebug=False):
    if not data[0]:
        assert not (data[1] or data[2] or data[3] or data[4])
        return
    weeks, week_day, all_week, classes = get_schedule(data, isDebug)
    event_class = Event()
    event_class.add('SUMMARY', data[0])
    if data[3] is not None:
        event_class.add('LOCATION', data[3])
    if data[4] is not None:
        event_class.add('DESCRIPTION', "教师:" + data[4] + "\n教学班号:" + data[1])
    else:
        event_class.add('DESCRIPTION', "教学班号:" + data[1])
    for start_class, end_class in classes:
        for start_week, end_week in weeks:
            event = event_class.copy()
            if all_week is False:
                count = int(end_week) - int(start_week) + 1
                event.add("RRULE", {"freq": "weekly", "count": count})
                class_start_date = dt + \
                    datetime.timedelta(weeks=int(start_week) - 1,
                                       days=week_dic[week_day] - 1)
                class_start_time = datetime.timedelta(
                    hours=time_dict[int(start_class)][0][0],
                    minutes=time_dict[int(start_class)][0][1])
                class_end_time = datetime.timedelta(
                    hours=time_dict[int(end_class)][1][0],
                    minutes=time_dict[int(end_class)][1][1])
                dtstart = class_start_date + class_start_time
                dtend = class_start_date + class_end_time
                namespace = uuid.UUID(
                    bytes=int(dtstart.timestamp()).to_bytes(length=8,
                                                            byteorder='big') +
                    int(dtend.timestamp()).to_bytes(length=8, byteorder='big'))
            else:
                dtstart = (
                    dt + datetime.timedelta(weeks=int(start_week) - 1)).date()
                dtend = (dt + datetime.timedelta(weeks=int(end_week))).date()
                namespace = uuid.UUID(
                    bytes=int(dtstart.toordinal()).to_bytes(length=8,
                                                            byteorder='big') +
                    int(dtend.toordinal()).to_bytes(length=8, byteorder='big'))

            add_datetime(event, 'DTEND', dtend)
            add_datetime(event, 'DTSTART', dtstart)
            event.add('UID', uuid.uuid3(namespace, data[0] + "-" + data[1]))

            event.add('DTSTAMP', datetime.datetime.now())
            cal.add_component(event)