Coverage for cuda/bindings/_test_helpers/pep723.py: 90.62%
32 statements
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-03 01:38 +0000
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-03 01:38 +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) 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV
15 with open(example, encoding="utf-8") as f: 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV
16 content = f.read() 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV
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) 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV
20 if not pep723: 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV
21 raise ValueError(f"PEP 723 metadata not found in {example_name}")
23 metadata = {} 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV
24 for line in pep723.group("content").splitlines(): 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV
25 line = line.lstrip("# ").rstrip() 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV
26 if not line: 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV
27 continue
28 key, value = line.split("=", 1) 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV
29 key = key.strip() 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV
30 value = value.strip() 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV
31 metadata[key] = value 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV
33 if "dependencies" not in metadata: 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV
34 raise ValueError(f"PEP 723 dependencies not found in {example_name}")
36 missing_dependencies = [] 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV
37 dependencies = eval(metadata["dependencies"]) # noqa: S307 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV
38 for dependency in dependencies: 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV
39 name = re.match("[a-zA-Z0-9_-]+", dependency) 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV
40 try: 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV
41 importlib.metadata.distribution(name.group(0)) 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV
42 except importlib.metadata.PackageNotFoundError: 1abcdefghijklmn
43 missing_dependencies.append(name.string) 1abcdefghijklmn
45 if missing_dependencies: 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV
46 pytest.skip(f"Skipping {example} due to missing package requirement: {', '.join(missing_dependencies)}") 1abcdefghijklmn