34 lines
890 B
Python
34 lines
890 B
Python
from abc import ABC
|
|
|
|
|
|
class RichRenderable(ABC):
|
|
"""An abstract base class for Rich renderables.
|
|
|
|
Note that there is no need to extend this class, the intended use is to check if an
|
|
object supports the Rich renderable protocol. For example::
|
|
|
|
if isinstance(my_object, RichRenderable):
|
|
console.print(my_object)
|
|
|
|
"""
|
|
|
|
@classmethod
|
|
def __subclasshook__(cls, other: type) -> bool:
|
|
"""Check if this class supports the rich render protocol."""
|
|
return hasattr(other, "__rich_console__") or hasattr(other, "__rich__")
|
|
|
|
|
|
if __name__ == "__main__": # pragma: no cover
|
|
from pip._vendor.rich.text import Text
|
|
|
|
t = Text()
|
|
print(isinstance(Text, RichRenderable))
|
|
print(isinstance(t, RichRenderable))
|
|
|
|
class Foo:
|
|
pass
|
|
|
|
f = Foo()
|
|
print(isinstance(f, RichRenderable))
|
|
print(isinstance("", RichRenderable))
|