ungana

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

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:
Mungana/cmd/args_parser.py | 82++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
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)