Files
2026-05-18 06:40:19 +00:00

59 lines
2.0 KiB
Python

import csv
from datetime import datetime, timedelta
from caldav import DAVClient, Calendar
from caldav.elements import dav, cdav
from icalendar import Event, Alarm
def csv_to_caldav(csv_file_path, caldav_url, username, password, calendar_name, date_format='%d.%m.%Y'):
client = DAVClient(url=caldav_url, username=username, password=password)
principal = client.principal()
calendars = principal.calendars()
# Znalezienie kalendarza o podanej nazwie
calendar = None
for cal in calendars:
if cal.name == calendar_name:
calendar = cal
break
if not calendar:
raise ValueError(f"Kalendarz o nazwie '{calendar_name}' nie został znaleziony.")
with open(csv_file_path, mode='r', encoding='utf-8') as csv_file:
csv_reader = csv.DictReader(csv_file, delimiter=';')
for row in csv_reader:
event = Event()
start_date = datetime.strptime(row['Start'], date_format).date()
end_date = datetime.strptime(row['Koniec'], date_format).date() + timedelta(days=1)
event.add('summary', row['Temat'])
event.add('dtstart', start_date)
event.add('dtend', end_date)
event.add('description', row['Tagi'])
event.add('transp', 'TRANSPARENT')
# Dodanie przypomnienia
alarm = Alarm()
alarm.add('action', 'DISPLAY')
alarm.add('description', 'Przypomnienie: ' + row['Temat'])
alarm.add('trigger', timedelta(minutes=-30)) # Przypomnienie 30 minut przed
event.add_component(alarm)
# Przesłanie zdarzenia do kalendarza CalDAV
calendar.add_event(event.to_ical())
# Ścieżka do pliku CSV
csv_file_path = 'events.csv'
# Dane do logowania CalDAV
caldav_url = 'https://cal.dexterlab.pl/remote.php/dav/'
username = 'dexter'
password = 'Proton!19'
calendar_name = 'Holidays'
# Wywołanie funkcji
csv_to_caldav(csv_file_path, caldav_url, username, password, calendar_name)