docs: def to_dict(obj, **kwargs):
      """
      Convert an object into dictionary. Uses singledispatch to allow for
      clean extensions for custom class types.
  
      Reference: https://pypi.python.org/pypi/singledispatch
  
      :param obj: object instance
      :param kwargs: keyword arguments such as suppress_private_attr,
                     suppress_empty_values, dict_factory
      :return: converted dictionary.
      """
  
      # if is_related, then iterate attrs.
      if is_model(obj.__class__):
          return related_obj_to_dict(obj, **kwargs)
  
      # else, return obj directly. register a custom to_dict if you need to!
      #   reference: https://pypi.python.org/pypi/singledispatch
      else:
          return obj