ungana

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

commit 8a5d124de57db5cf3e1a28cfbefd74fa9dabbcdb
parent fa758135e20d6a84f6510338ae781696d337c3c2
Author: Carlosokumu <carlosokumu254@gmail.com>
Date:   Tue,  2 Sep 2025 21:14:27 +0300

add check for multiline  user input

Diffstat:
Mungana/cmd/args_parser.py | 25+++++++++++++++----------
1 file changed, 15 insertions(+), 10 deletions(-)

diff --git a/ungana/cmd/args_parser.py b/ungana/cmd/args_parser.py @@ -29,6 +29,11 @@ class ArgsParser: return Path(file_path).read_text(encoding="utf-8").strip() except Exception as e: raise SystemExit(f"Error: Could not read file '{file_path}': {e}") + + def _ensure_no_multiline_input(self,value: str) -> str: + if "\n" in value or "\r" in value: + raise argparse.ArgumentTypeError("Multiline input is not allowed for this argument.") + return value def _add_command_arguments(self): subparsers = self.parser.add_subparsers(dest='command', required=True) @@ -51,11 +56,11 @@ class ArgsParser: parser.add_argument("-i", "--interactive", action="store_true", help="Run interactive calendar creation") - parser.add_argument("-s", "--summary", required=required, help="Event summary") + parser.add_argument("-s", "--summary",type = self._ensure_no_multiline_input, required=required, help="Event summary") parser.add_argument("--start", type=validate_datetime, required=required,help="Event start time (ISO format or DD-MM-YYYY HH:MM)") - parser.add_argument("-d", "--description",required=required, help="Event description") - parser.add_argument("-l", "--location",required=required,help="Event location") - parser.add_argument("-o", "--organizer",required=required,help="Event organizer") + parser.add_argument("-d", "--description",type=self._ensure_no_multiline_input,required=required, help="Event description") + parser.add_argument("-l", "--location",type= self._ensure_no_multiline_input,required=required,help="Event location") + parser.add_argument("-o", "--organizer",type=self._ensure_no_multiline_input,required=required,help="Event organizer") parser.add_argument("--summary-file", dest="summary_file", help="File containing event summary") parser.add_argument("--description-file", dest="description_file", help="File containing event description") @@ -73,17 +78,17 @@ class ArgsParser: ) non_interactive = parser.add_argument_group("non-interactive arguments") - non_interactive.add_argument("-s", "--summary", help="Event summary") + non_interactive.add_argument("-s", "--summary",type=self._ensure_no_multiline_input, help="Event summary") non_interactive.add_argument("--start", type=validate_datetime, help="Event start time (ISO format or DD-MM-YYYY HH:MM)") - non_interactive.add_argument("-d", "--description", help="Event description") - non_interactive.add_argument("-l", "--location", help="Event location") - non_interactive.add_argument("-o", "--organizer", help="Event organizer") + non_interactive.add_argument("-d", "--description",type=self._ensure_no_multiline_input, help="Event description") + non_interactive.add_argument("-l", "--location",type=self._ensure_no_multiline_input, help="Event location") + non_interactive.add_argument("-o", "--organizer",type=self._ensure_no_multiline_input, help="Event organizer") non_interactive.add_argument("--summary-file", dest="summary_file", help="File containing event summary") non_interactive.add_argument("--description-file", dest="description_file", help="File containing event description") non_interactive.add_argument("--tzid", help="Time zone ID") parser.add_argument("ics_filename", nargs="?", help="Output .ics filename (default: event_<date>.ics)") - parser.add_argument("--domain", help="Domain used to generate event UID (default: ungana.local)",default="ungana.local") + parser.add_argument("--domain", type=self._ensure_no_multiline_input,help="Domain used to generate event UID (default: ungana.local)",default="ungana.local") event_end_time_group = non_interactive.add_mutually_exclusive_group(required=False) event_end_time_group.add_argument("--end", type=validate_datetime,help="Event end time (ISO format or DD-MM-YYYY HH:MM). ""Required if no --duration is specified.",) @@ -95,7 +100,7 @@ class ArgsParser: self.add_common_args(parser, required=False) parser.add_argument("-p", "--poster", help="Event headline image") parser.add_argument("--long", help="Exhaustive description of the event") - parser.add_argument("-c", "--contact", help="Contact details") + parser.add_argument("-c", "--contact",type=self._ensure_no_multiline_input, help="Contact details")