19def rich_cast(renderable: object) -> "RenderableType":
20 """Cast an object to a renderable by calling __rich__ if present.
21
22 Args:
23 renderable (object): A potentially renderable object
24
25 Returns:
26 object: The result of recursively calling __rich__.
27 """
29
30 rich_visited_set: Set[type] = set()
31 while hasattr(renderable,
"__rich__")
and not isclass(renderable):
32
33 if hasattr(renderable, _GIBBERISH):
34 return repr(renderable)
35 cast_method =
getattr(renderable,
"__rich__")
37 renderable_type = type(renderable)
38 if renderable_type in rich_visited_set:
39 break
41
42 return cast(RenderableType, renderable)