library/calendar_sync.py aktualisiert
This commit is contained in:
@ -1,6 +1,5 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import sys
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
from caldav import DAVClient
|
from caldav import DAVClient
|
||||||
import vobject
|
import vobject
|
||||||
@ -11,11 +10,11 @@ def fetch_ics_events(url, user=None, password=None):
|
|||||||
try:
|
try:
|
||||||
response = requests.get(url, auth=(user, password) if user else None)
|
response = requests.get(url, auth=(user, password) if user else None)
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
# Alle VEVENTs aus ICS-Datei extrahieren
|
|
||||||
events = []
|
events = []
|
||||||
for component in vobject.readComponents(response.text):
|
for calendar in vobject.readComponents(response.text):
|
||||||
if hasattr(component, "vevent"):
|
for component in calendar.components():
|
||||||
events.append(component.vevent)
|
if component.name == 'VEVENT':
|
||||||
|
events.append(component)
|
||||||
return events
|
return events
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise Exception(f"ICS-Fehler: {str(e)}")
|
raise Exception(f"ICS-Fehler: {str(e)}")
|
||||||
@ -52,21 +51,20 @@ def sync_ics_to_caldav(module):
|
|||||||
module.params['verify_ssl']
|
module.params['verify_ssl']
|
||||||
)
|
)
|
||||||
|
|
||||||
# Bestehende Events analysieren
|
|
||||||
existing_events = {}
|
existing_events = {}
|
||||||
for event in target_cal.events():
|
for event in target_cal.events():
|
||||||
try:
|
try:
|
||||||
for vobj in vobject.readComponents(event.data):
|
for calendar in vobject.readComponents(event.data):
|
||||||
if hasattr(vobj, "vevent"):
|
for component in calendar.components():
|
||||||
uid = str(vobj.vevent.uid)
|
if component.name == 'VEVENT':
|
||||||
existing_events[uid] = event
|
uid = str(component.uid)
|
||||||
|
existing_events[uid] = event
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise Exception(f"Fehler beim Parsen eines bestehenden Events: {str(e)}")
|
raise Exception(f"Fehler beim Parsen eines bestehenden Events: {str(e)}")
|
||||||
|
|
||||||
changed = False
|
changed = False
|
||||||
results = {'added': [], 'updated': [], 'removed': []}
|
results = {'added': [], 'updated': [], 'removed': []}
|
||||||
|
|
||||||
# Neue Events hinzufügen oder aktualisieren
|
|
||||||
for vevent in ics_events:
|
for vevent in ics_events:
|
||||||
uid = str(vevent.uid)
|
uid = str(vevent.uid)
|
||||||
ical_data = vevent.serialize()
|
ical_data = vevent.serialize()
|
||||||
@ -81,7 +79,6 @@ def sync_ics_to_caldav(module):
|
|||||||
results['updated'].append(uid)
|
results['updated'].append(uid)
|
||||||
changed = True
|
changed = True
|
||||||
|
|
||||||
# Entfernen von Events, wenn aktiviert
|
|
||||||
if module.params['purge']:
|
if module.params['purge']:
|
||||||
current_uids = {str(e.uid) for e in ics_events}
|
current_uids = {str(e.uid) for e in ics_events}
|
||||||
for uid in set(existing_events.keys()) - current_uids:
|
for uid in set(existing_events.keys()) - current_uids:
|
||||||
@ -111,5 +108,4 @@ def run_module():
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
module.fail_json(msg=str(e))
|
module.fail_json(msg=str(e))
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__
|
||||||
run_module()
|
|
||||||
|
|||||||
Reference in New Issue
Block a user