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