commit 4df5c014dc35d574ba06cd0b3307445bcb0e4c88
parent e86d18c274dc4097ef28f9c3bb774af7b9a67dba
Author: Carlosokumu <carlosokumu254@gmail.com>
Date: Fri, 29 Aug 2025 13:39:39 +0300
go interactive if no argument is specified
Diffstat:
1 file changed, 46 insertions(+), 36 deletions(-)
diff --git a/ungana/cmd/args_parser.py b/ungana/cmd/args_parser.py
@@ -58,6 +58,7 @@ class ArgsParser:
create_event_parser = subparsers.add_parser('create', help='Create a new calendar event')
self.add_create_args(create_event_parser)
self._add_logging_arguments(create_event_parser)
+ create_event_parser.set_defaults(func=lambda args: self.handle_create(args, create_event_parser))
edit_event_parser = subparsers.add_parser('edit', help='Edit a calendar ical file')
self.add_edit_args(edit_event_parser)
@@ -65,6 +66,7 @@ class ArgsParser:
edit_event_parser.add_argument("ics_file", help="Path to calendar .ics file")
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")
+ edit_event_parser.set_defaults(func=lambda args: self.handle_edit(args, edit_event_parser))
def add_common_args(self, parser, required=False):
@@ -196,51 +198,58 @@ class ArgsParser:
sys.exit(1)
-
-
def handle_create(self, args):
- if args.interactive:
- if args.ics_filename:
- ics_filename = args.ics_filename
- else:
- ics_filename = f"event_{datetime.now().strftime('%Y%m%d_%H%M%S')}.ics"
+ # Event creation arguments.
+ event_args = {
+ "summary": args.summary,
+ "summary_file": args.summary_file,
+ "description": args.description,
+ "description_file": args.description_file,
+ "start": args.start,
+ "end": args.end,
+ "duration": args.duration,
+ "location": args.location,
+ "organizer": args.organizer,
+ "tzid": args.tzid,
+ }
+ if args.interactive or not any(event_args.values()):
+ ics_filename = args.ics_filename or f"event_{datetime.now().strftime('%Y%m%d_%H%M%S')}.ics"
cal = self.ical_manager.load_ical_file(ics_filename)
- if cal:
- event_data = self.prompt_compulsory_event_fields()
- event = self.ical_manager.create_event(event_data)
- self.ical_manager.save_ical_file(event, ics_filename)
-
+ if cal:
+ event_data = self.prompt_compulsory_event_fields()
+ event = self.ical_manager.create_event(event_data)
+ self.ical_manager.save_ical_file(event, ics_filename)
return
+
+ event_data = self._validate_and_get_event_args(args)
+
+ if args.ics_filename:
+ filename = args.ics_filename
+ cal = self.ical_manager.load_ical_file(filename)
+ exists = self.ical_manager.check_existing_event(cal, event_data)
+ if exists:
+ details = (
+ f"Summary='{event_data['summary']}', "
+ f"Start={event_data['start']}, "
+ f"Tzid={event_data['tzid']}, "
+ f"Location='{event_data['location']}'"
+ )
+ self.parser.error(
+ f"Duplicate event detected: An event with these details already exists: {details}. "
+ f"Try using the 'edit' command instead."
+ )
else:
- event_data = self._validate_and_get_event_args(args)
-
- if args.ics_filename:
- filename = args.ics_filename
- cal = self.ical_manager.load_ical_file(filename)
- exists = self.ical_manager.check_existing_event(cal, event_data)
- if exists:
- details = (
- f"Summary='{event_data['summary']}', "
- f"Start={event_data['start']}, "
- f"Tzid={event_data['tzid']}, "
- f"Location='{event_data['location']}'"
- )
- self.parser.error(
- f"Duplicate event detected: An event with these details already exists: {details}. "
- f"Try using the 'edit' command instead."
- )
- else:
- filename = f"event_{datetime.now().strftime('%Y%m%d_%H%M%S')}.ics"
+ filename = f"event_{datetime.now().strftime('%Y%m%d_%H%M%S')}.ics"
+
+ event = self.ical_manager.create_event(event_data)
+ self.ical_manager.save_ical_file(event, filename)
- event = self.ical_manager.create_event(event_data)
- self.ical_manager.save_ical_file(event, filename)
-
def handle_edit(self, args):
if not args.ics_file:
- self.parser.error("missing required ical file path to edit")
+ self.parser.error("missing required ical file path to edit")
ical_file_path = args.ics_file
try:
@@ -250,7 +259,7 @@ class ArgsParser:
if args.all:
return self._edit_multiple_events(cal, ical_file_path)
-
+
updates, attachments = self._get_user_updates_from_args(args)
if any([updates, attachments]):
# Non-interactive mode
@@ -260,6 +269,7 @@ class ArgsParser:
# Interactive mode
self._edit_most_recent_event(cal, args, ical_file_path)
+
def _edit_most_recent_event(self, cal, args, ical_file_path):
event = self.ical_manager.get_first_event(cal)