59 lines
1.7 KiB
Python
59 lines
1.7 KiB
Python
|
|
"""Regenerate .pyi stubs before running stub tests."""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import subprocess
|
||
|
|
import sys
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
|
||
|
|
SCHEMAS_DIR = Path(__file__).parent
|
||
|
|
TEST_SCHEMAS = [
|
||
|
|
"test_simple.capnp",
|
||
|
|
"test_nested.capnp",
|
||
|
|
"test_generics.capnp",
|
||
|
|
"test_interface.capnp",
|
||
|
|
"addressbook.capnp",
|
||
|
|
"dummy.capnp",
|
||
|
|
]
|
||
|
|
|
||
|
|
|
||
|
|
def _find_capnpc_py() -> str:
|
||
|
|
venv_bin = Path(sys.prefix) / "bin" / "capnpc-py"
|
||
|
|
if venv_bin.exists():
|
||
|
|
return str(venv_bin)
|
||
|
|
return "capnpc-py"
|
||
|
|
|
||
|
|
|
||
|
|
@pytest.fixture(scope="session", autouse=True)
|
||
|
|
def _regenerate_stubs() -> None: # pyright: ignore[reportUnusedFunction]
|
||
|
|
"""Delete old .pyi files and regenerate from .capnp schemas."""
|
||
|
|
capnpc = _find_capnpc_py()
|
||
|
|
|
||
|
|
# Clean + generate main schemas
|
||
|
|
for schema in TEST_SCHEMAS:
|
||
|
|
pyi = SCHEMAS_DIR / schema.replace(".capnp", "_capnp.pyi")
|
||
|
|
pyi.unlink(missing_ok=True)
|
||
|
|
result = subprocess.run(
|
||
|
|
["capnp", "compile", "-I.", f"-o{capnpc}", schema],
|
||
|
|
capture_output=True, text=True, cwd=str(SCHEMAS_DIR),
|
||
|
|
)
|
||
|
|
assert result.returncode == 0, (
|
||
|
|
f"capnp compile failed for {schema}:\n{result.stderr}"
|
||
|
|
)
|
||
|
|
|
||
|
|
# Multi-file schemas (consumer imports base)
|
||
|
|
multi_dir = SCHEMAS_DIR / "multi"
|
||
|
|
for pat in ("*_capnp.pyi",):
|
||
|
|
for f in multi_dir.glob(pat):
|
||
|
|
f.unlink(missing_ok=True)
|
||
|
|
for schema in ("base.capnp", "consumer.capnp"):
|
||
|
|
result = subprocess.run(
|
||
|
|
["capnp", "compile", f"-o{capnpc}", schema],
|
||
|
|
capture_output=True, text=True, cwd=str(multi_dir),
|
||
|
|
)
|
||
|
|
assert result.returncode == 0, (
|
||
|
|
f"capnp compile failed for multi/{schema}:\n{result.stderr}"
|
||
|
|
)
|