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

1# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 

2# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE 

3 

4 

5import importlib.metadata 

6import os 

7import re 

8 

9import pytest 

10 

11 

12def has_package_requirements_or_skip(example): 

13 example_name = os.path.basename(example) 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV

14 

15 with open(example, encoding="utf-8") as f: 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV

16 content = f.read() 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV

17 

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}") 

22 

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

32 

33 if "dependencies" not in metadata: 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV

34 raise ValueError(f"PEP 723 dependencies not found in {example_name}") 

35 

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

44 

45 if missing_dependencies: 1aobpqcdefghrijskltmnuvwxyzABCDEFGHIJKLMNOPQRSTUV

46 pytest.skip(f"Skipping {example} due to missing package requirement: {', '.join(missing_dependencies)}") 1abcdefghijklmn