colles.mp2i-vms.fr/colloscope/icalexport.py

77 lines
2.3 KiB
Python

from datetime import date, time, datetime, timedelta
from pytz import timezone
from uuid import uuid4
from os import path
from icalendar import Calendar, Event, vCalAddress, vText
from colloscope.models import *
from .create_calendar import get_calendar
LOCAL_TZ = "Europe/Paris"
def emailize(nom, first_name=None):
if first_name is not None:
return "{}.{}@example.com" \
.format(
first_name.replace(" ", "_").lower(),
nom.replace(" ", "_").lower()
)
else:
return "{}@example.com" \
.format(nom.replace(" ", "_").lower())
def to_calendar(student, term, include_EDT: bool = True):
p = path.abspath('./static/Base_Calendar.ics')
with open(p) as f:
cal = Calendar.from_ical(f.read())
colles = term.query_colles_of_student(student)
for colle in colles:
event = Event()
summary = f"Colle {colle.slot.subject} ({colle.slot.colleur})"
event.add("summary", summary)
start = colle.datetime()
fin = start + colle.slot.duration
event.add("dtstart", start, parameters={"tzid": LOCAL_TZ})
event.add("dtend", fin, parameters={"tzid": LOCAL_TZ})
event.add("dtstamp", datetime.now())
event.add("uid", str(uuid4()))
event.add("location", f"{colle.slot.room} ({colle.slot.term.cls.school})")
event.add("categories", "COLLE-" + str(colle.slot.subject))
description = f"Groupes: {','.join(str(group) for group in colle.groups.all())}"
event.add("description", description)
organizer = vCalAddress(f"mailto:{emailize(colle.slot.colleur.name)}")
organizer.params["cn"] = vText(str(colle.slot.colleur))
organizer.params["role"] = vText("Colleur")
event.add("organizer", organizer)
for e in colle.final_group():
attendee = vCalAddress("mailto:{emailize(e.name, first_name=e.first_name)}")
attendee.params["role"] = vText("Etudiant")
attendee.params["cn"] = vText(str(e))
event.add("attendee", attendee, encode=0)
cal.add_component(event)
"""
if include_EDT:
#TODO: get le groupe de l'étudiant et ses langue
edt = get_calendar()
for event in edt.walk("VEVENT"):
cal.add_component(event)
"""
return cal