diff --git a/src/clear_bookings.py b/src/clear_bookings.py index 95a4b02..5d2fab7 100644 --- a/src/clear_bookings.py +++ b/src/clear_bookings.py @@ -1,4 +1,5 @@ import email.utils +import json import os import re import smtplib @@ -30,9 +31,6 @@ class DavEvent: organizer: str calendar: Calendar obj: CalendarObjectResource - is_cancelled: bool - is_recurring: bool - is_prioritized: bool missing_required_fields: list def __init__(self, event: CalendarObjectResource): @@ -164,7 +162,7 @@ class DavEvent: :return: """ self.obj.icalendar_component["status"] = "CANCELLED" - self.obj.save(no_create=True) + self.obj.save(no_create=True, increase_seqno=False) def serialize(self) -> dict[str, str | datetime | timedelta]: """ @@ -188,6 +186,28 @@ class DavEvent: "missing_required_fields": self.missing_required_fields, } + def dumps(self, indent=4, datetime_format="%Y-%m-%d %X") -> str: + """ + Dump a json string with the event data. + :return: string with json data + """ + return json.dumps({ + "uid": self.uid, + "name": self.name, + "start": self.start.strftime(datetime_format), + "end": self.end.strftime(datetime_format), + "duration": self.duration.total_seconds(), + "created": self.created.strftime(datetime_format), + "status": self.status, + "organizer": self.organizer, + "calendar_id": self.calendar.id, + "calendar_name": self.calendar.name, + "is_cancelled": self.is_cancelled, + "is_recurring": self.is_recurring, + "is_prioritized": self.is_prioritized, + "missing_required_fields": self.missing_required_fields, + }, indent=indent) + @staticmethod def _handle_date(date_value: datetime | date) -> datetime: """ @@ -195,10 +215,8 @@ class DavEvent: """ if isinstance(date_value, datetime): date_value = date_value.astimezone(tz) - elif isinstance(date_value, date): - date_value = tz.localize(datetime.combine(date_value, datetime.min.time())) else: - raise ValueError(f"date_value must be a datetime or date object, {type(date_value)} given.") + date_value = tz.localize(datetime.combine(date_value, datetime.min.time())) return date_value @@ -296,6 +314,8 @@ def clear(target_calendars: list, is_test: bool=False) -> dict: # Find overlapping events overlapping_events = find_overlapping_events(events) + overlapping_events_json = json.dumps([json.loads(o.get("event").dumps()) for _, o in overlapping_events.items()], indent=2) + print(f"Found overlapping events:\n{overlapping_events_json}") # Delete overlapping events and send emails to organizers for overlap in overlapping_events.values():