ungana

Unnamed repository; edit this file 'description' to name the repository.
Info | Log | Files | Refs | README

commit 6384141815d503a612eef5377741997555d145b1
parent 71c1a64e713264e78f6e46d2eeb2e39388879bc2
Author: Carlosokumu <carlosokumu254@gmail.com>
Date:   Thu, 14 Aug 2025 21:04:40 +0300

add logic to load  existing ical files

Diffstat:
Mcalendarapp/ical/ical_manager.py | 40++++++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+), 0 deletions(-)

diff --git a/calendarapp/ical/ical_manager.py b/calendarapp/ical/ical_manager.py @@ -1,3 +1,4 @@ +import os from icalendar import Calendar, Event, vDuration from datetime import datetime from typing import Dict, Any @@ -31,6 +32,21 @@ class ICalManager: event['dtstart'].params['TZID'] = event_data['tzid'] return event + + def update_event(self, cal: Calendar, updates: Dict[str, Any], uid: str) -> Calendar: + event_found = False + for component in cal.walk(): + if component.name == "VEVENT" and str(component.get("UID")) == uid: + event_found = True + for key, value in updates.items(): + component[key] = value + break + + if not event_found: + raise ValueError(f"No event with UID {uid} found.") + + return cal + def _parse_duration(self, duration_str: str) -> tuple[int, int]: """Parse duration string in format 'XhYm' into hours and minutes.""" @@ -48,6 +64,30 @@ class ICalManager: def _generate_uid(self, dtstart: datetime) -> str: """Generate a unique ID based on event start time.""" return f"{dtstart.strftime('%Y%m%dT%H%M%S')}@calendarapp" + + def load_ical_file(self, filename: str) -> Calendar: + """Load an iCalendar file from disk with error handling.""" + if not os.path.exists(filename): + raise FileNotFoundError(f"iCalendar file '{filename}' does not exist.") + + try: + with open(filename, 'rb') as f: + data = f.read() + self.calendar = Calendar.from_ical(data) + return self.calendar + except Exception as e: + raise ValueError(f"Failed to parse iCalendar file '{filename}': {e}") + + + def get_all_events(self,cal): + """ + Return a list of all VEVENT components in the calendar. + """ + events = [] + for component in cal.walk(): + if component.name == "VEVENT": + events.append(component) + return events def save_to_file(self, event: Event, filename: str) -> None: """Save calendar with event to .ics file."""