feat: optional typed client generation from openapi spec
This commit is contained in:
@@ -0,0 +1,28 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import subprocess
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
def client_gen_command(spec_path: Path, out_dir: Path) -> list[str]:
|
||||||
|
return [
|
||||||
|
"uvx",
|
||||||
|
"openapi-python-client",
|
||||||
|
"generate",
|
||||||
|
"--path",
|
||||||
|
str(spec_path),
|
||||||
|
"--output-path",
|
||||||
|
str(out_dir),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def generate_client(spec_path: Path, out_dir: Path) -> bool:
|
||||||
|
"""Run the deterministic codegen; returns True on success."""
|
||||||
|
try:
|
||||||
|
subprocess.run(client_gen_command(spec_path, out_dir), check=True)
|
||||||
|
return True
|
||||||
|
except (subprocess.CalledProcessError, FileNotFoundError):
|
||||||
|
return False
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
|
from auto_reverse.doc.client import client_gen_command
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
def test_command_references_spec_and_out(tmp_path: Path):
|
||||||
|
spec = tmp_path / "openapi.yaml"
|
||||||
|
out = tmp_path / "client"
|
||||||
|
cmd = client_gen_command(spec, out)
|
||||||
|
assert str(spec) in cmd
|
||||||
|
assert "openapi-python-client" in " ".join(cmd)
|
||||||
Reference in New Issue
Block a user