From 0e572040cf55d9d6babf2486a6869a72c3c2dd8e Mon Sep 17 00:00:00 2001 From: ulises-jeremias Date: Thu, 16 Jul 2026 03:13:23 -0300 Subject: [PATCH] feat(cli): fix cache subcommand routing and catalog fixture path Closes #37 Co-authored-by: Cursor --- fixtures/catalog/templates.json | 9 ++++++++- .../src/create_awesome_python_app/cli.py | 12 ++++++++++++ .../tests/test_cache_cmds.py | 19 ++++++++++++++++--- .../tests/test_cache_env.py | 9 +++++++-- .../tests/test_catalog.py | 12 +++++++++--- 5 files changed, 52 insertions(+), 9 deletions(-) diff --git a/fixtures/catalog/templates.json b/fixtures/catalog/templates.json index 1c0e1fd..316209c 100644 --- a/fixtures/catalog/templates.json +++ b/fixtures/catalog/templates.json @@ -1 +1,8 @@ -{"templates":[{"slug":"example-cli","category":"cli","url":"file://."}],"addons":[{"slug":"ruff-setup","category":"tooling"}]} +{ + "templates": [ + {"slug": "example-cli", "category": "cli", "url": "file://."} + ], + "addons": [ + {"slug": "ruff-setup", "category": "tooling"} + ] +} diff --git a/packages/create-awesome-python-app/src/create_awesome_python_app/cli.py b/packages/create-awesome-python-app/src/create_awesome_python_app/cli.py index e249782..97d0a18 100644 --- a/packages/create-awesome-python-app/src/create_awesome_python_app/cli.py +++ b/packages/create-awesome-python-app/src/create_awesome_python_app/cli.py @@ -34,7 +34,19 @@ def _in_ci() -> bool: def main() -> None: + """Console script entrypoint. + + Route `cache` before Typer parses the scaffold Argument so that + `create-awesome-python-app cache dir` works (Typer would otherwise + treat `cache` as project_directory). + """ + import sys + check_python_version(">=3.12", "create-awesome-python-app") + if len(sys.argv) > 1 and sys.argv[1] == "cache": + sys.argv = [sys.argv[0], *sys.argv[2:]] + cache_app(prog_name="create-awesome-python-app cache") + return app() diff --git a/packages/create-awesome-python-app/tests/test_cache_cmds.py b/packages/create-awesome-python-app/tests/test_cache_cmds.py index 48ed487..8c22903 100644 --- a/packages/create-awesome-python-app/tests/test_cache_cmds.py +++ b/packages/create-awesome-python-app/tests/test_cache_cmds.py @@ -1,6 +1,19 @@ from typer.testing import CliRunner -from create_awesome_python_app.cli import app + +from create_awesome_python_app.cli import cache_app + runner = CliRunner() + + def test_cache_subcommands() -> None: - for args in (["cache","list"],["cache","outdated"],["cache","doctor"],["cache","verify"],["cache","update"],["cache","clean","--catalog"]): - assert runner.invoke(app, args).exit_code == 0, args + for args in ( + ["dir"], + ["list"], + ["outdated"], + ["doctor"], + ["verify"], + ["update"], + ["clean", "--catalog"], + ): + result = runner.invoke(cache_app, args) + assert result.exit_code == 0, (args, result.stdout, result.stderr) diff --git a/packages/create-awesome-python-app/tests/test_cache_env.py b/packages/create-awesome-python-app/tests/test_cache_env.py index e097d4a..ddcf981 100644 --- a/packages/create-awesome-python-app/tests/test_cache_env.py +++ b/packages/create-awesome-python-app/tests/test_cache_env.py @@ -1,5 +1,10 @@ from typer.testing import CliRunner -from create_awesome_python_app.cli import app + +from create_awesome_python_app.cli import cache_app + runner = CliRunner() + + def test_cache_dir() -> None: - assert runner.invoke(app, ["cache", "dir"]).exit_code == 0 + result = runner.invoke(cache_app, ["dir"]) + assert result.exit_code == 0 diff --git a/packages/create-awesome-python-app/tests/test_catalog.py b/packages/create-awesome-python-app/tests/test_catalog.py index 3f4e635..96f064f 100644 --- a/packages/create-awesome-python-app/tests/test_catalog.py +++ b/packages/create-awesome-python-app/tests/test_catalog.py @@ -1,8 +1,14 @@ from typer.testing import CliRunner + from create_awesome_python_app.cli import app + runner = CliRunner() + + def test_list_templates() -> None: - r = runner.invoke(app, [\"--list-templates\"]) - assert r.exit_code == 0 + result = runner.invoke(app, ["--list-templates"]) + assert result.exit_code == 0 + + def test_list_addons() -> None: - assert runner.invoke(app, [\"--list-addons\"]).exit_code == 0 + assert runner.invoke(app, ["--list-addons"]).exit_code == 0