ungana

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

commit d2de036fdc02db5a7d33c38dfc4883841d682b35
parent 3ea98dff08c795d961c7744f6ad88241a72f862d
Author: Carlosokumu <carlosokumu254@gmail.com>
Date:   Tue, 19 Aug 2025 14:58:12 +0300

add parsing of attachments  by introducing the AttachmentManager

Diffstat:
Mcalendarapp/cmd/args_parser.py | 43+++++++++++++++++++++++++++++++++----------
1 file changed, 33 insertions(+), 10 deletions(-)

diff --git a/calendarapp/cmd/args_parser.py b/calendarapp/cmd/args_parser.py @@ -3,6 +3,7 @@ from pathlib import Path from datetime import datetime import re import logging +from calendarapp.attachment.attachment_manager import AttachmentManager from calendarapp.ical.ical_manager import ICalManager from calendarapp.logging.logging_manager import LoggingManager @@ -13,6 +14,7 @@ class ArgsParser: description="Create a customized iCalendar (.ics) event" ) self.ical_manager = ICalManager() + self.attachment_manager = AttachmentManager() self._add_field_arguments() def _read_file_or_exit(self, file_path: str) -> str: @@ -63,13 +65,17 @@ class ArgsParser: parser.add_argument("-l", "--location", required=required_flags, help="Event location") parser.add_argument("-o", "--organizer", required=required_flags, - help="Event organizer") + help="Event organizer") parser.add_argument("--tzid", required=required_flags, help="Time zone ID (e.g., 'Europe/Berlin')") parser.add_argument("--duration", type=self._validate_duration, help="Event duration (e.g., '2h' or '30m')") parser.add_argument("--end", type=self._validate_datetime, help="Event end time (ISO format or DD-MM-YYYY HH:MM)") + parser.add_argument("-p", "--poster", + help="Event headline image") + parser.add_argument("-ld", "--long", + help="Exhaustive description of the event") create_event_parser = subparsers.add_parser('create', help='Create a new calendar event') @@ -82,15 +88,14 @@ class ArgsParser: help="Path to ical file to edit") edit_event_parser.add_argument("-a", "--all", action="store_true", help="If your ical file has more than one event, interactively choose one to edit") - add_event_field_args(edit_event_parser, required_flags=False) + add_event_field_args(edit_event_parser, required_flags=False) def _add_logging_arguments(self, parser): parser.add_argument("-v", "--verbose", action="store_true", help="Enable verbose debug output") parser.add_argument("-q", "--quiet", action="store_true", - help="Suppress all non-error output") - + help="Suppress all non-error output") def parse_args(self): """Parses CLI args and resolves file-based inputs.""" @@ -145,11 +150,10 @@ class ArgsParser: else: self._edit_most_recent_event(cal,args,ical_file_path) - - def _edit_most_recent_event(self, cal, args, ical_file_path): """Edit the first event in the calendar (default).""" updates = {} + attachments = [] if args.start is not None: updates["DTSTART"] = args.start @@ -164,6 +168,24 @@ class ArgsParser: if args.organizer is not None: updates["ORGANIZER"] = args.organizer + if args.poster is not None: + try: + prop, value, params = self.attachment_manager.create_attachment( + args.poster, ctx="poster" + ) + attachments.append((prop, value, params)) + except Exception as e: + self.parser.error(f"Unexpected error: {e}") + + if args.long is not None: + try: + prop, value, params = self.attachment_manager.create_attachment( + args.long, ctx="long" + ) + attachments.append((prop, value, params)) + except Exception as e: + self.parser.error(f"Unexpected error: {e}") + event = self.ical_manager.get_first_event(cal) editable_fields = [f for f in event.keys() if f != "UID"] @@ -173,11 +195,12 @@ class ArgsParser: if new_value: updates[field] = new_value - if updates: - self.ical_manager.update_event(cal, updates, ical_file_path) - self.logging.info("Calendar updated successfully") + if updates or attachments: + self.ical_manager.update_event(cal, updates, attachments, ical_file_path) + logging.info("Calendar updated successfully") else: - self.logging.info("No changes made to calendar file") + logging.info("No changes made to calendar file") + def _edit_multiple_events(self, cal, ical_file_path):