import uuid import datetime import os import argparse import calendar import pytz import icalendar TZ = pytz.timezone('Europe/Paris') WEEKDAY = { 0: "Lundi", 1: "Mardi", 2: "Mercredi", 3: "Jeudi", 4: "Vendredi", 5: "Samedi", 6: "Dimanche" } SCHEDULE = { "day1": { "summary": "jour 8h", "start": (8,0), "end": (16,15) }, "day2": { "summary": "jour 9h", "start": (9,0), "end": (18,0) }, "morning": { "summary": "matin", "start": (6,30), "end": (14,15) }, "afternoon": { "summary": "Apres-midi", "start": (13,45), "end": (21,15),} } def get_weekday(year, month, day): wd = calendar.weekday(i[0],i[1],i[2]) return WEEKDAY[wd] def generate_ical(date, schedule_info): uid = uuid.uuid4() cal = icalendar.Calendar() cal.add('prodid', '-//Schedule generator//') cal.add('version', '2.0') event = icalendar.Event() event.add('uid', uid) event.add('summary', schedule_info["summary"]) event.add('dtstart', datetime.datetime(date[0],date[1],date[2],\ schedule_info['start'][0], schedule_info['start'][1],tzinfo=TZ)) event.add('dtend', datetime.datetime(date[0],date[1],date[2],\ schedule_info['end'][0], schedule_info['end'][1],tzinfo=TZ)) event.add('dtstamp', datetime.datetime.now(tz=TZ)) cal.add_component(event) return (uid, cal) parser = argparse.ArgumentParser() parser.add_argument("month", type=int, help="choose month to create or edit as integer") args = parser.parse_args() schedule = [] switch_case = { "j": SCHEDULE["day1"], "k": SCHEDULE["day2"], "m": SCHEDULE["morning"], "a": SCHEDULE["afternoon"] } for i in calendar.Calendar().itermonthdays3(2019, args.month): if i[1] == args.month: while True: txt = "%s %s\n(J)our 8h, (K)Jour 9h, (M)atin, (A)pres-midi, (R)epos:" % (get_weekday(*i), i[2]) choose = input(txt) if choose in switch_case.keys(): schedule.append((i, switch_case[choose])) break elif choose == 'r': break for evt in schedule: (uid, cal) = generate_ical(*evt) f = open('%s.ics' % uid, 'wb') f.write(cal.to_ical()) f.close()