Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.10/site-packages/astroid/brain/brain_pathlib.py: 88%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

25 statements  

1# Licensed under the LGPL: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html 

2# For details: https://github.com/pylint-dev/astroid/blob/main/LICENSE 

3# Copyright (c) https://github.com/pylint-dev/astroid/blob/main/CONTRIBUTORS.txt 

4 

5from __future__ import annotations 

6 

7from collections.abc import Iterator 

8 

9from astroid import bases, context, nodes 

10from astroid.builder import _extract_single_node 

11from astroid.const import PY313_PLUS 

12from astroid.exceptions import InferenceError, UseInferenceDefault 

13from astroid.inference_tip import inference_tip 

14from astroid.manager import AstroidManager 

15 

16PATH_TEMPLATE = """ 

17from pathlib import Path 

18Path 

19""" 

20 

21 

22def _looks_like_parents_subscript(node: nodes.Subscript) -> bool: 

23 if not ( 

24 isinstance(node.value, nodes.Attribute) and node.value.attrname == "parents" 

25 ): 

26 return False 

27 

28 try: 

29 value = next(node.value.infer()) 

30 except (InferenceError, StopIteration): 

31 return False 

32 parents = "builtins.tuple" if PY313_PLUS else "pathlib._PathParents" 

33 return ( 

34 isinstance(value, bases.Instance) 

35 and isinstance(value._proxied, nodes.ClassDef) 

36 and value.qname() == parents 

37 ) 

38 

39 

40def infer_parents_subscript( 

41 subscript_node: nodes.Subscript, ctx: context.InferenceContext | None = None 

42) -> Iterator[bases.Instance]: 

43 if isinstance(subscript_node.slice, nodes.Const): 

44 path_cls = next(_extract_single_node(PATH_TEMPLATE).infer()) 

45 return iter([path_cls.instantiate_class()]) 

46 

47 raise UseInferenceDefault 

48 

49 

50def register(manager: AstroidManager) -> None: 

51 manager.register_transform( 

52 nodes.Subscript, 

53 inference_tip(infer_parents_subscript), 

54 _looks_like_parents_subscript, 

55 )