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

18 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2023-06-07 06:53 +0000

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 

38AstroidManager().register_transform( 

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

40) 

41AstroidManager().register_transform( 

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

43)