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)