84 lines
2.2 KiB
Python
84 lines
2.2 KiB
Python
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):
|
|
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)
|
|
|
|
|
|
|
|
|
|
for event in recurring_ical_events.of(Calendar.from_ical(self.data)).at(today):
|
|
item = _caldav_item()
|
|
item.name = event["SUMMARY"]
|
|
item.desc = event["DESCRIPTION"]
|
|
item.dtstart = event["DTSTART"].dt.strftime("%d.%m.%Y %H:%M")
|
|
item.dtend = event["DTEND"].dt.strftime("%d.%m.%Y %H:%M")
|
|
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():
|
|
name = ""
|
|
desc = ""
|
|
dtstart = None
|
|
dtend = None
|
|
dtstamp = None
|
|
|
|
|
|
|
|
|
|
|
|
o_caldav = cls_caldav(url="https://sync.infomaniak.com/calendars/AA01593/a4835de4-b3cd-46ca-8f48-3dacd3a2b46e?export")
|
|
|