Files
Reskreen/mycaldav/models.py
Ambulance Clerc b3c4e32611 dev temporaire
2022-06-30 18:51:04 +02:00

152 lines
4.6 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
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")