Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/rich/protocol.py: 50%
20 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:35 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2023-06-07 06:35 +0000
1from typing import Any, cast, Set, TYPE_CHECKING
2from inspect import isclass
4if TYPE_CHECKING:
5 from rich.console import RenderableType
7_GIBBERISH = """aihwerij235234ljsdnp34ksodfipwoe234234jlskjdf"""
10def is_renderable(check_object: Any) -> bool:
11 """Check if an object may be rendered by Rich."""
12 return (
13 isinstance(check_object, str)
14 or hasattr(check_object, "__rich__")
15 or hasattr(check_object, "__rich_console__")
16 )
19def rich_cast(renderable: object) -> "RenderableType":
20 """Cast an object to a renderable by calling __rich__ if present.
22 Args:
23 renderable (object): A potentially renderable object
25 Returns:
26 object: The result of recursively calling __rich__.
27 """
28 from rich.console import RenderableType
30 rich_visited_set: Set[type] = set() # Prevent potential infinite loop
31 while hasattr(renderable, "__rich__") and not isclass(renderable):
32 # Detect object which claim to have all the attributes
33 if hasattr(renderable, _GIBBERISH):
34 return repr(renderable)
35 cast_method = getattr(renderable, "__rich__")
36 renderable = cast_method()
37 renderable_type = type(renderable)
38 if renderable_type in rich_visited_set:
39 break
40 rich_visited_set.add(renderable_type)
42 return cast(RenderableType, renderable)