You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
890 B
Python
34 lines
890 B
Python
2 years ago
|
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))
|