From 193af01ace0c43aeddbda3f5189622f57b28a6a5 Mon Sep 17 00:00:00 2001 From: masonn85 <13841009+masonn85@users.noreply.github.com> Date: Sun, 10 May 2026 23:54:27 +0200 Subject: [PATCH 1/2] feat: add non-interactive mode with sensible defaults - Add `-n/--non-interactive` flag to disable prompts - In non-interactive mode: `--license` required; `--author` optional (uses git config); `--year` defaults to current year - Backwards compatible; interactive mode unchanged --- src/lic_cli/cli.py | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/lic_cli/cli.py b/src/lic_cli/cli.py index 4e03c92..bae3ca8 100644 --- a/src/lic_cli/cli.py +++ b/src/lic_cli/cli.py @@ -60,12 +60,19 @@ def get_license_key_interactive(licenses): return keys[[licenses[k]["name"] for k in keys].index(selected)] -def get_author_input(provided_author=None): - """Get author from arguments or interactive prompt.""" +def get_author_input(provided_author=None, non_interactive=False): + """Get author from arguments, git config, or interactive prompt.""" if provided_author: console.print(f"[green]✓ Author: {provided_author}[/green]") return provided_author + if non_interactive: + git_name = get_git_name() + if git_name: + console.print(f"[green]✓ Author: {git_name} (from git config)[/green]") + return git_name + raise ValueError("Author required in non-interactive mode (use --author or set git user.name)") + git_name = get_git_name() author = questionary.text( "Author:", @@ -82,12 +89,17 @@ def get_author_input(provided_author=None): return author -def get_year_input(provided_year=None): +def get_year_input(provided_year=None, non_interactive=False): """Get year from arguments or interactive prompt.""" if provided_year: console.print(f"[green]✓ Year: {provided_year}[/green]") return provided_year + if non_interactive: + current_year = str(datetime.now().year) + console.print(f"[green]✓ Year: {current_year} (current year)[/green]") + return current_year + year = questionary.text( "Year:", default=str(datetime.now().year), @@ -129,6 +141,11 @@ def main(): help="Year for the license", metavar="YEAR" ) + parser.add_argument( + "-n", "--non-interactive", + action="store_true", + help="Disable interactive prompts; --license required; --author optional (uses git config if available); --year defaults to current year" + ) args = parser.parse_args() try: @@ -137,6 +154,8 @@ def main(): key = args.license console.print(f"[green]✓ {key}[/green]") else: + if args.non_interactive: + raise ValueError("License required in non-interactive mode (use --license)") console.print("[bold]Loading licenses...[/bold]") with console.status("[bold cyan]Fetching from GitHub...", spinner="dots"): licenses = fetch_licenses() @@ -148,8 +167,8 @@ def main(): console.print(f"[green]✓ {licenses[key]['name']}[/green]") # Get author and year - author = get_author_input(args.author) - year = get_year_input(args.year) + author = get_author_input(args.author, args.non_interactive) + year = get_year_input(args.year, args.non_interactive) # Generate and save license with console.status("[bold cyan]Generating license..."): From c7522c04847378ca5afc532903d73b21840b2652 Mon Sep 17 00:00:00 2001 From: masonn85 <13841009+masonn85@users.noreply.github.com> Date: Mon, 11 May 2026 00:13:48 +0200 Subject: [PATCH 2/2] feat: add LICENSE existence check and --force flag - Prevent accidental overwriting of existing LICENSE - Interactive mode shows confirmation prompt - Non-interactive mode fails without --force - --force overrides check and overwrites silently --- src/lic_cli/cli.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/lic_cli/cli.py b/src/lic_cli/cli.py index bae3ca8..bf2c457 100644 --- a/src/lic_cli/cli.py +++ b/src/lic_cli/cli.py @@ -146,9 +146,29 @@ def main(): action="store_true", help="Disable interactive prompts; --license required; --author optional (uses git config if available); --year defaults to current year" ) + parser.add_argument( + "--force", + action="store_true", + help="Overwrite LICENSE file if it exists" + ) args = parser.parse_args() try: + # Check for existing LICENSE file + license_path = Path("LICENSE") + if license_path.exists() and not args.force: + if args.non_interactive: + raise FileExistsError("LICENSE already exists. Use --force to overwrite.") + else: + overwrite = questionary.confirm( + "LICENSE file already exists. Overwrite?", + default=False + ).ask() + print("\033[A\033[K", end="") + if not overwrite: + console.print("[yellow]Cancelled[/yellow]") + return + # Get license key if args.license: key = args.license