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 # 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 = [] 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"] 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 "*done*" in item.desc: item.done = True item.dtstart = event["DTSTART"].dt.strftime("%d.%m.%Y %H:%M") 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) print(self.day) print(self.night) print(f"len={len(self.items)}") return self.data 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 def format_str_date(self): self.str_start_date = datetime.strptime(self.dtstart,"%d.%m.%Y %H:%M").strftime("%d.%m.%Y") 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.%Y") self.str_end_time = datetime.strptime(self.dtend, "%d.%m.%Y %H:%M").strftime("%H:%M")