openapi-cli-gen 0.0.3__tar.gz → 0.0.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/PKG-INFO +1 -1
  2. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/pyproject.toml +1 -1
  3. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/src/openapi_cli_gen/__init__.py +1 -1
  4. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/src/openapi_cli_gen/cli.py +5 -3
  5. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/src/openapi_cli_gen/codegen/generator.py +9 -1
  6. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/.gitignore +0 -0
  7. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/LICENSE +0 -0
  8. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/README.md +0 -0
  9. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/docs/bugs-from-airflow-testing.md +0 -0
  10. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/docs/specs/2026-04-08-openapi-cli-gen-design.md +0 -0
  11. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/docs/superpowers/plans/2026-04-09-openapi-cli-gen-v01.md +0 -0
  12. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/experiments/EXPERIMENTS.md +0 -0
  13. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/experiments/prototypes/01_pydantic_settings_tree.py +0 -0
  14. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/experiments/prototypes/01b_manual_dispatch.py +0 -0
  15. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/experiments/prototypes/01c_typer_tree.py +0 -0
  16. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/experiments/prototypes/01d_typer_from_pydantic.py +0 -0
  17. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/experiments/prototypes/02_nested_flattening.py +0 -0
  18. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/experiments/prototypes/03_arrays.py +0 -0
  19. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/experiments/prototypes/06_spec_parsing.py +0 -0
  20. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/experiments/prototypes/07_model_generation.py +0 -0
  21. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/experiments/prototypes/08_end_to_end.py +0 -0
  22. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/experiments/prototypes/09_unions.py +0 -0
  23. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/experiments/prototypes/10_nullable.py +0 -0
  24. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/experiments/prototypes/11_env_vars.py +0 -0
  25. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/experiments/prototypes/12_output_formatting.py +0 -0
  26. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/experiments/prototypes/13_dynamic_nested_models.py +0 -0
  27. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/experiments/prototypes/14_large_spec_performance.py +0 -0
  28. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/experiments/server/app.py +0 -0
  29. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/experiments/server/spec.yaml +0 -0
  30. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/research/architecture-references.md +0 -0
  31. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/research/competitive-landscape.md +0 -0
  32. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/research/pydantic-settings-cli-details.md +0 -0
  33. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/research/stainless-design-patterns.md +0 -0
  34. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/research/technical-stack.md +0 -0
  35. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/research/user-research.md +0 -0
  36. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/src/openapi_cli_gen/__main__.py +0 -0
  37. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/src/openapi_cli_gen/codegen/__init__.py +0 -0
  38. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/src/openapi_cli_gen/codegen/templates/__init__.py.jinja2 +0 -0
  39. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/src/openapi_cli_gen/codegen/templates/cli.py.jinja2 +0 -0
  40. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/src/openapi_cli_gen/codegen/templates/pyproject.toml.jinja2 +0 -0
  41. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/src/openapi_cli_gen/engine/__init__.py +0 -0
  42. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/src/openapi_cli_gen/engine/auth.py +0 -0
  43. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/src/openapi_cli_gen/engine/builder.py +0 -0
  44. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/src/openapi_cli_gen/engine/dispatch.py +0 -0
  45. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/src/openapi_cli_gen/engine/models.py +0 -0
  46. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/src/openapi_cli_gen/engine/registry.py +0 -0
  47. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/src/openapi_cli_gen/output/__init__.py +0 -0
  48. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/src/openapi_cli_gen/output/formatter.py +0 -0
  49. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/src/openapi_cli_gen/spec/__init__.py +0 -0
  50. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/src/openapi_cli_gen/spec/loader.py +0 -0
  51. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/src/openapi_cli_gen/spec/parser.py +0 -0
  52. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/tests/__init__.py +0 -0
  53. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/tests/conftest.py +0 -0
  54. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/tests/test_auth.py +0 -0
  55. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/tests/test_cli.py +0 -0
  56. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/tests/test_codegen.py +0 -0
  57. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/tests/test_dispatch.py +0 -0
  58. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/tests/test_formatter.py +0 -0
  59. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/tests/test_integration.py +0 -0
  60. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/tests/test_loader.py +0 -0
  61. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/tests/test_models.py +0 -0
  62. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/tests/test_parser.py +0 -0
  63. {openapi_cli_gen-0.0.3 → openapi_cli_gen-0.0.5}/tests/test_registry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openapi-cli-gen
3
- Version: 0.0.3
3
+ Version: 0.0.5
4
4
  Summary: Generate typed Python CLIs from OpenAPI specs with Pydantic model flattening into CLI flags
5
5
  Project-URL: Homepage, https://github.com/shivaam/openapi-cli-gen
6
6
  Project-URL: Repository, https://github.com/shivaam/openapi-cli-gen
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "openapi-cli-gen"
7
- version = "0.0.3"
7
+ version = "0.0.5"
8
8
  description = "Generate typed Python CLIs from OpenAPI specs with Pydantic model flattening into CLI flags"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -1,6 +1,6 @@
1
1
  """Generate typed Python CLIs from OpenAPI specs with Pydantic model flattening."""
2
2
 
3
- __version__ = "0.0.3"
3
+ __version__ = "0.0.5"
4
4
 
5
5
  from openapi_cli_gen.engine.builder import build_cli, build_command_group
6
6
 
@@ -25,17 +25,19 @@ def generate(
25
25
  typer.echo(f"Generated CLI package at: {result}")
26
26
 
27
27
 
28
- @app.command()
28
+ @app.command(
29
+ context_settings={"allow_extra_args": True, "allow_interspersed_args": False},
30
+ )
29
31
  def run(
32
+ ctx: typer.Context,
30
33
  spec: str = typer.Option(..., help="Path to OpenAPI spec file or URL"),
31
34
  base_url: str = typer.Option(None, help="Override API base URL"),
32
- args: list[str] = typer.Argument(None, help="Command args: <group> <command> [--flags]"),
33
35
  ):
34
36
  """Run a CLI directly from an OpenAPI spec (no code generation)."""
35
37
  from openapi_cli_gen import build_cli
36
38
 
37
39
  cli = build_cli(spec=spec, name="cli", base_url=base_url)
38
- cli(args or [])
40
+ cli(ctx.args or [])
39
41
 
40
42
 
41
43
  @app.command()
@@ -37,6 +37,14 @@ def generate_package(
37
37
  template = env.get_template(template_name)
38
38
  output_path.write_text(template.render(**context))
39
39
 
40
- shutil.copy2(spec, pkg_dir / "spec.yaml")
40
+ # Copy or download the spec file
41
+ spec_dest = pkg_dir / "spec.yaml"
42
+ if spec.startswith(("http://", "https://")):
43
+ import httpx
44
+ resp = httpx.get(spec, follow_redirects=True, timeout=30)
45
+ resp.raise_for_status()
46
+ spec_dest.write_text(resp.text)
47
+ else:
48
+ shutil.copy2(spec, spec_dest)
41
49
 
42
50
  return output
File without changes