| 
7 | 7 | from __future__ import annotations  | 
8 | 8 | 
 
  | 
9 | 9 | import argparse  | 
 | 10 | +import json  | 
10 | 11 | import shutil  | 
11 | 12 | import sys  | 
 | 13 | +import urllib.request  | 
12 | 14 | from pathlib import Path  | 
13 | 15 | from typing import TYPE_CHECKING  | 
14 | 16 | 
 
  | 
@@ -206,16 +208,18 @@ def build(session: nox.Session) -> None:  | 
206 | 208 | @nox.parametrize("example", EXAMPLES, ids=EXAMPLES)  | 
207 | 209 | def test_doc_examples(session: nox.Session, example: str) -> None:  | 
208 | 210 |     _prepare_cmake_ninja(session)  | 
209 |  | -    session.install("-e.")  | 
 | 211 | +    session.install("-e.", "pip")  | 
210 | 212 |     session.chdir(f"docs/examples/{example}")  | 
211 | 213 |     reqs = nox.project.load_toml("pyproject.toml")["build-system"]["requires"]  | 
212 |  | -    session.install(*reqs, "pytest")  | 
 | 214 | +    freqs = (r for r in reqs if "scikit-build-core" not in r.replace("_", "-"))  | 
 | 215 | +    session.install(*freqs, "pytest")  | 
213 | 216 |     session.install(  | 
214 | 217 |         ".",  | 
215 | 218 |         "--no-build-isolation",  | 
216 | 219 |         "--config-settings=cmake.verbose=true",  | 
217 | 220 |         env={"PYTHONWARNINGS": "error"},  | 
218 | 221 |     )  | 
 | 222 | +    session.run("pip", "list")  | 
219 | 223 |     if Path("../test.py").is_file():  | 
220 | 224 |         session.run("python", "../test.py")  | 
221 | 225 |     else:  | 
@@ -312,15 +316,23 @@ def vendor_pyproject_metadata(session: nox.Session) -> None:  | 
312 | 316 |     parser.add_argument("version", help="A tag or ref to vendor")  | 
313 | 317 |     args = parser.parse_args(session.posargs)  | 
314 | 318 | 
 
  | 
315 |  | -    session.run(  | 
316 |  | -        "curl",  | 
317 |  | -        "-o",  | 
318 |  | -        "src/scikit_build_core/_vendor/pyproject_metadata/__init__.py",  | 
319 |  | -        f"https://raw.githubusercontent.com/pypa/pyproject-metadata/{args.version}/pyproject_metadata/__init__.py",  | 
320 |  | -    )  | 
321 |  | -    session.run(  | 
322 |  | -        "curl",  | 
323 |  | -        "-o",  | 
324 |  | -        "src/scikit_build_core/_vendor/pyproject_metadata/LICENSE",  | 
325 |  | -        f"https://raw.githubusercontent.com/pypa/pyproject-metadata/{args.version}/LICENSE",  | 
326 |  | -    )  | 
 | 319 | +    repo = "pypa/pyproject-metadata"  | 
 | 320 | +    branch = args.version  | 
 | 321 | + | 
 | 322 | +    with urllib.request.urlopen(  | 
 | 323 | +        f"https://api.github.com/repos/{repo}/git/trees/{branch}?recursive=1"  | 
 | 324 | +    ) as response:  | 
 | 325 | +        info = json.loads(response.read().decode("utf-8"))  | 
 | 326 | + | 
 | 327 | +    files = {  | 
 | 328 | +        y: y for x in info["tree"] if (y := x["path"]).startswith("pyproject_metadata/")  | 
 | 329 | +    }  | 
 | 330 | +    files["pyproject_metadata/LICENSE"] = "LICENSE"  | 
 | 331 | +    for tgt_path, remote_path in files.items():  | 
 | 332 | +        local_path = Path("src/scikit_build_core/_vendor").joinpath(tgt_path)  | 
 | 333 | +        print(f"Vendoring: {remote_path} -> {local_path}")  | 
 | 334 | +        with urllib.request.urlopen(  | 
 | 335 | +            f"https://raw.githubusercontent.com/{repo}/{branch}/{remote_path}"  | 
 | 336 | +        ) as response:  | 
 | 337 | +            txt = response.read()  | 
 | 338 | +        local_path.write_bytes(txt)  | 
0 commit comments