From 80ebb92a016e052eb88f84761e20eb85a6121447 Mon Sep 17 00:00:00 2001 From: midas Date: Wed, 30 Apr 2025 09:10:53 +0000 Subject: [PATCH] library/calendar_sync.py aktualisiert --- library/calendar_sync.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/library/calendar_sync.py b/library/calendar_sync.py index 24e7dae..67016f8 100644 --- a/library/calendar_sync.py +++ b/library/calendar_sync.py @@ -5,31 +5,37 @@ from caldav import DAVClient import vobject def connect_calendar(url, user=None, password=None): + # Verbindung zum Kalender herstellen client = DAVClient(url, username=user, password=password) if user else DAVClient(url) principal = client.principal() calendars = principal.calendars() + if not calendars: raise Exception(f"Kein Kalender unter {url} gefunden") + return calendars[0] def get_event_uid_map(calendar): + # Mapping der Ereignis-UIDs zu den Events erstellen uid_map = {} for event in calendar.events(): try: cal = vobject.readOne(event.data) uid = cal.vevent.uid.value uid_map[uid] = event - except Exception: - continue + except Exception as e: + continue # Fehler bei einem Event überspringen return uid_map def sync_calendars(source_cal, target_cal): + # Kalender synchronisieren src_events = get_event_uid_map(source_cal) tgt_events = get_event_uid_map(target_cal) changed = False added, updated, removed = [], [], [] + # Neue und aktualisierte Ereignisse hinzufügen for uid, src_event in src_events.items(): src_data = src_event.data if uid not in tgt_events: @@ -42,6 +48,7 @@ def sync_calendars(source_cal, target_cal): updated.append(uid) changed = True + # Entfernte Ereignisse löschen for uid in set(tgt_events.keys()) - set(src_events.keys()): tgt_events[uid].delete() removed.append(uid) @@ -50,6 +57,7 @@ def sync_calendars(source_cal, target_cal): return changed, added, updated, removed def run_module(): + # Definieren der Moduleingaben module_args = dict( source_url=dict(type='str', required=True), source_user=dict(type='str', required=False, default=None), @@ -64,8 +72,11 @@ def run_module(): module = AnsibleModule(argument_spec=module_args, supports_check_mode=False) try: + # Verbindung zu den Kalendern herstellen source_cal = connect_calendar(module.params['source_url'], module.params['source_user'], module.params['source_password']) target_cal = connect_calendar(module.params['target_url'], module.params['target_user'], module.params['target_password']) + + # Kalender synchronisieren changed, added, updated, removed = sync_calendars(source_cal, target_cal) result.update({