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', time_format='%H:%M'): 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_datetime_str = f"{row['Start']} 15:00" end_datetime_str = f"{row['Start']} 16:00" start_datetime = datetime.strptime(start_datetime_str, f'{date_format} {time_format}') end_datetime = datetime.strptime(end_datetime_str, f'{date_format} {time_format}') #start_date = datetime.strptime(row['Start'], date_format).date() #end_date = datetime.strptime(row['Start'], date_format).date() + timedelta(days=1) event.add('summary', row['Temat']) event.add('dtstart', start_datetime) event.add('dtend', end_datetime) event.add('description', row['Subject']) 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 = 'ms_2.csv' # Dane do logowania CalDAV caldav_url = 'https://cal.dexterlab.pl/remote.php/dav/' username = 'dexter' password = 'Proton!19' calendar_name = 'Social Media #2025' # Wywołanie funkcji csv_to_caldav(csv_file_path, caldav_url, username, password, calendar_name)