docs: def debug_object(obj, log_level: int = logging.DEBUG) -> None:
      """
      Sends details about a Python to the log, specifically its ``repr()``
      representation, and all of its attributes with their name, value, and type.
  
      Args:
          obj: object to debug
          log_level: log level to use; default is ``logging.DEBUG``
      """
      msgs = ["For {o!r}:".format(o=obj)]
      for attrname in dir(obj):
          attribute = getattr(obj, attrname)
          msgs.append("- {an!r}: {at!r}, of type {t!r}".format(
              an=attrname, at=attribute, t=type(attribute)))
      log.log(log_level, "{}", "\n".join(msgs))