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

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) 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR

14 

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

16 content = f.read() 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR

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) 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR

20 if not pep723: 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR

21 raise ValueError(f"PEP 723 metadata not found in {example_name}") 

22 

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

32 

33 if "dependencies" not in metadata: 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR

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

35 

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

44 

45 if missing_dependencies: 1ambcdefgnhiojpklqrstuvwxyzABCDEFGHIJKLMNOPQR

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