from datetime import datetime, timedelta, time import datetime as Datetime from django.db import models import urllib.request import ssl from icalendar import Calendar, Event import recurring_ical_events import caldav # Create your models here. class cls_caldav(): url = "" data = None items = [] day = [] night = [] def __init__(self, url=""): self.url = url def clear_data(self): self.data = None self.items = [] self.day = [] self.night = [] #Trie les tableau par odre croissant sur la date de début de l'événement def sort_array(self): self.items.sort(key=lambda x: x.dtstamp, reverse=False) def get_caldav_data(self,periode=1): ctx = ssl.create_default_context() ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE self.clear_data() o_url = urllib.request.urlopen(self.url, context=ctx) self.data = o_url.read() o_url.close() now = f"{datetime.now().day}.{datetime.now().month}.{datetime.now().year}" tomorow = datetime.now() + timedelta(days=1) today = (datetime.now().year,datetime.now().month,datetime.now().day) events = None if periode == 1: events = recurring_ical_events.of(Calendar.from_ical(self.data)).at(today) elif periode == 2: events = recurring_ical_events.of(Calendar.from_ical(self.data)).between(today,tomorow) for event in events: item = _caldav_item() item.name = event["SUMMARY"] item.uiid = event["UID"] if "-" in item.name: arr = item.name.split("-") item.key = arr[0] item.name = arr[1] if "DESCRIPTION" in event.keys(): item.desc = event["DESCRIPTION"] if "#" in item.desc: item.done = True if '{href=' in item.desc: temp_str = item.desc.split('{href=')[1] temp_str = temp_str.split('}')[0] item.href = temp_str item.desc = item.desc.replace("{href=" + item.href + "}","") item.dtstart = event["DTSTART"].dt.strftime("%d.%m.%Y %H:%M") item.dtstamp = int(event["DTSTART"].dt.strftime("%Y%m%d%H%M")) print(item.dtstamp) item.dtend = event["DTEND"].dt.strftime("%d.%m.%Y %H:%M") item.format_str_date() self.items.append(item) start = datetime.strptime(item.dtstart,"%d.%m.%Y %H:%M") if type(start) is Datetime.date: start = datetime.combine(start, datetime.min.time()) print("convert Date to datetime") print(start) if start < datetime.combine(datetime.today(), time(19,0)): self.day.append(item) if start >= datetime.combine(datetime.today(), time(19,0)): self.night.append(item) self.sort_array() return self.data class cls_caldav_client(): caldav_url = "https://sync.infomaniak.com" caldav_user = 'SC01066' caldav_password = "mc144*1870CLERC" def __init__(self): self.client = caldav.DAVClient(url=self.caldav_url, username=self.caldav_user, password=self.caldav_password) self.data = self.client.principal() self.m38 = self.data.calendar(name="M38") self.m37 = self.data.calendar(name="M37") self.clear_all_events_by_Date(self.m38) self.add_event_in_calandar(self.m38) self.add_event_in_calandar(self.m37) def add_event_in_calandar(self, calandar): my_event = calandar.save_event( dtstart=datetime(2022, 6, 30, 12), dtend=datetime(2022, 6, 30, 13), summary="Do the needful", ) def clear_all_events_by_Date(self, calandar): events = calandar.date_search(start=datetime(2022, 6, 30), end=datetime(2022, 7, 1), expand=True) for e in events: e.delete() print(events) class _caldav_item(): key = "" name = "" desc = "" dtstart = None str_start_date = "" str_start_time = "" dtend = None str_end_date = "" str_end_time = "" dtstamp = None done = False href = "" uiid = "" def format_str_date(self): self.str_start_date = datetime.strptime(self.dtstart,"%d.%m.%Y %H:%M").strftime("%d.%m") self.str_start_time = datetime.strptime(self.dtstart, "%d.%m.%Y %H:%M").strftime("%H:%M") self.str_end_date = datetime.strptime(self.dtend,"%d.%m.%Y %H:%M").strftime("%d.%m") self.str_end_time = datetime.strptime(self.dtend, "%d.%m.%Y %H:%M").strftime("%H:%M")