ungana

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

commit 59917ab92556a4f3a14ff19bc94f9dd8d58b60d4
parent 5b35a92a863018525b62df22d69be347ff877c36
Author: Carlosokumu <carlosokumu254@gmail.com>
Date:   Thu, 14 Aug 2025 00:27:52 +0300

add an IcalManager

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

diff --git a/calendarapp/ical/ical_manager.py b/calendarapp/ical/ical_manager.py @@ -0,0 +1,56 @@ +from icalendar import Calendar, Event, vDuration +from datetime import datetime +from typing import Dict, Any + +class ICalManager: + + """Handles parsing, representing, and writing iCalendar files""" + def __init__(self): + self.calendar = Calendar() + self.calendar.add('prodid', '-//CalendarApp//mxm.dk//') + self.calendar.add('version', '2.0') + + def create_event(self, event_data: Dict[str, Any]) -> Event: + event = Event() + + event.add('dtstart', event_data['start']) + event.add('summary', event_data['summary']) + event.add('location', event_data['location']) + event.add('description', event_data['description']) + event.add('organizer', event_data['organizer']) + + if 'end' in event_data: + event.add('dtend', event_data['end']) + + if 'uid' in event_data: + event.add('uid', event_data['uid']) + else: + event.add('uid', self._generate_uid(event_data['start'])) + + if 'tzid' in event_data: + event['dtstart'].params['TZID'] = event_data['tzid'] + + return event + + def _parse_duration(self, duration_str: str) -> tuple[int, int]: + """Parse duration string in format 'XhYm' into hours and minutes.""" + hours = 0 + minutes = 0 + + if 'h' in duration_str: + hours = int(duration_str.split('h')[0]) + if 'm' in duration_str: + minutes_part = duration_str.split('h')[-1] if 'h' in duration_str else duration_str + minutes = int(minutes_part.split('m')[0]) + + return hours, minutes + + 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 save_to_file(self, event: Event, filename: str) -> None: + """Save calendar with event to .ics file.""" + self.calendar.add_component(event) + with open(filename, 'wb') as f: + f.write(self.calendar.to_ical())