Coverage for cuda / bindings / _test_helpers / pep723.py: 90.62%
32 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-01 01:32 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-01 01:32 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE
5import importlib.metadata
6import os
7import re
9import pytest
12def has_package_requirements_or_skip(example):
13 example_name = os.path.basename(example) 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR
15 with open(example, encoding="utf-8") as f: 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR
16 content = f.read() 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR
18 # The canonical regex as defined in PEP 723
19 pep723 = re.search(r"(?m)^# /// (?P<type>[a-zA-Z0-9-]+)$\s(?P<content>(^#(| .*)$\s)+)^# ///$", content) 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR
20 if not pep723: 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR
21 raise ValueError(f"PEP 723 metadata not found in {example_name}")
23 metadata = {} 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR
24 for line in pep723.group("content").splitlines(): 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR
25 line = line.lstrip("# ").rstrip() 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR
26 if not line: 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR
27 continue
28 key, value = line.split("=", 1) 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR
29 key = key.strip() 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR
30 value = value.strip() 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR
31 metadata[key] = value 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR
33 if "dependencies" not in metadata: 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR
34 raise ValueError(f"PEP 723 dependencies not found in {example_name}")
36 missing_dependencies = [] 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR
37 dependencies = eval(metadata["dependencies"]) # noqa: S307 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR
38 for dependency in dependencies: 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR
39 name = re.match("[a-zA-Z0-9_-]+", dependency) 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR
40 try: 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR
41 importlib.metadata.distribution(name.group(0)) 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR
42 except importlib.metadata.PackageNotFoundError: 1abcdefghijkl
43 missing_dependencies.append(name.string) 1abcdefghijkl
45 if missing_dependencies: 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR
46 pytest.skip(f"Skipping {example} due to missing package requirement: {', '.join(missing_dependencies)}") 1abcdefghijkl