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

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

19 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 

5"""Astroid brain hints for some of the _io C objects.""" 

6from astroid.manager import AstroidManager 

7from astroid.nodes import ClassDef 

8 

9BUFFERED = {"BufferedWriter", "BufferedReader"} 

10TextIOWrapper = "TextIOWrapper" 

11FileIO = "FileIO" 

12BufferedWriter = "BufferedWriter" 

13 

14 

15def _generic_io_transform(node, name, cls): 

16 """Transform the given name, by adding the given *class* as a member of the 

17 node. 

18 """ 

19 

20 io_module = AstroidManager().ast_from_module_name("_io") 

21 attribute_object = io_module[cls] 

22 instance = attribute_object.instantiate_class() 

23 node.locals[name] = [instance] 

24 

25 

26def _transform_text_io_wrapper(node): 

27 # This is not always correct, since it can vary with the type of the descriptor, 

28 # being stdout, stderr or stdin. But we cannot get access to the name of the 

29 # stream, which is why we are using the BufferedWriter class as a default 

30 # value 

31 return _generic_io_transform(node, name="buffer", cls=BufferedWriter) 

32 

33 

34def _transform_buffered(node): 

35 return _generic_io_transform(node, name="raw", cls=FileIO) 

36 

37 

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

39 manager.register_transform( 

40 ClassDef, _transform_buffered, lambda node: node.name in BUFFERED 

41 ) 

42 manager.register_transform( 

43 ClassDef, _transform_text_io_wrapper, lambda node: node.name == TextIOWrapper 

44 )