| 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) | |
| """ | |
| 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)) | |