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

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

20 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.""" 

6 

7from astroid.manager import AstroidManager 

8from astroid.nodes import ClassDef 

9 

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

11TextIOWrapper = "TextIOWrapper" 

12FileIO = "FileIO" 

13BufferedWriter = "BufferedWriter" 

14 

15 

16def _generic_io_transform(node, name, cls): 

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

18 node. 

19 """ 

20 

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

22 attribute_object = io_module[cls] 

23 instance = attribute_object.instantiate_class() 

24 node.locals[name] = [instance] 

25 

26 

27def _transform_text_io_wrapper(node): 

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

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

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

31 # value 

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

33 

34 

35def _transform_buffered(node): 

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

37 

38 

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

40 manager.register_transform( 

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

42 ) 

43 manager.register_transform( 

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

45 )