59 lines
2.0 KiB
Python
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)
|
|
|