Source code for torx.autodoc_decorators_m
"""Contains decorators to add automatically created nice documentation."""
from rich import inspect
import sys
def autodoc_module(mod_name):
"""
Automatically create nice documentation for modules.
Must be used as
_repr_html_ = lambda: autodoc_module(__name__)
to work properly.
"""
inspect(sys.modules[mod_name], methods=True)
def autodoc_class(cls):
"""
Automatically create nice documentation for classes and instances.
Used as a decorator.
"""
def __rich_repr__(self):
"""Advanced representation of the object."""
# Inspect will print directly to the output
inspect(self)
# NOTE: We return None here, thus the output of __repr__ will be
# returned to the caller
return None
def __rich_help__(self=None, full=False):
"""Advanced help for the object."""
# Either inspect the class or the object
if self == None:
to_inspect = __rich_help__.mytype
else:
to_inspect = self
if not full:
inspect(to_inspect, help=True, methods=True)
else:
inspect(to_inspect, all=True)
# Jupyter uses repr_html which we set by our custom function
# NOTE: Do not use __repr__ because rich inspect will call that function
# in its display, creating an infinite recursion
cls._repr_html_ = __rich_repr__
# Add class type to helper function for display of help of the class itself
__rich_help__.mytype = cls
cls.help = __rich_help__
# Add help function to all methods in this class
for attr, value in cls.__dict__.items():
# NOTE: We currently cannot support internal functions with _ at the
# start
# NOTE: All functions/methods have a method called mro which does not
# work with the code and needs to be excluded from autodoc
if ("help" in attr) or ("mro" in attr) or ("_" in attr[0]):
continue
if callable(value):
setattr(cls, attr, autodoc_function(value))
return cls
def autodoc_function(func):
"""
Automatically create nice documentation for functions.
Used as a decorator.
"""
def __rich_help__():
inspect(__rich_help__.myfunc, help=True)
__rich_help__.myfunc = func
func.help = __rich_help__
func._repr_html_ = __rich_help__
return func