Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/pip/_vendor/rich/screen.py: 38%

24 statements  

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

1from typing import Optional, TYPE_CHECKING 

2 

3from .segment import Segment 

4from .style import StyleType 

5from ._loop import loop_last 

6 

7 

8if TYPE_CHECKING: 

9 from .console import ( 

10 Console, 

11 ConsoleOptions, 

12 RenderResult, 

13 RenderableType, 

14 Group, 

15 ) 

16 

17 

18class Screen: 

19 """A renderable that fills the terminal screen and crops excess. 

20 

21 Args: 

22 renderable (RenderableType): Child renderable. 

23 style (StyleType, optional): Optional background style. Defaults to None. 

24 """ 

25 

26 renderable: "RenderableType" 

27 

28 def __init__( 

29 self, 

30 *renderables: "RenderableType", 

31 style: Optional[StyleType] = None, 

32 application_mode: bool = False, 

33 ) -> None: 

34 from pip._vendor.rich.console import Group 

35 

36 self.renderable = Group(*renderables) 

37 self.style = style 

38 self.application_mode = application_mode 

39 

40 def __rich_console__( 

41 self, console: "Console", options: "ConsoleOptions" 

42 ) -> "RenderResult": 

43 width, height = options.size 

44 style = console.get_style(self.style) if self.style else None 

45 render_options = options.update(width=width, height=height) 

46 lines = console.render_lines( 

47 self.renderable or "", render_options, style=style, pad=True 

48 ) 

49 lines = Segment.set_shape(lines, width, height, style=style) 

50 new_line = Segment("\n\r") if self.application_mode else Segment.line() 

51 for last, line in loop_last(lines): 

52 yield from line 

53 if not last: 

54 yield new_line