- 8 DB models (services, incidents, monitors, subscribers, etc.) - Full CRUD API for services, incidents, monitors - Public status page with live data - Incident detail page with timeline - API key authentication - Uptime monitoring scheduler - 13 tests passing - TECHNICAL_DESIGN.md with full spec
33 lines
878 B
Python
33 lines
878 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 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))
|