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:
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):