text: from collections.abc import Iterable
  
  from .inspection import InspectionMixin
  
  
  class SerializeMixin(InspectionMixin):
      """Mixin to make model serializable."""
  
      __abstract__ = True
  
      def to_dict(self,nested = False, hybrid_attributes = False, exclude = None):
          """Return dict object with model's data.
  
          :param nested: flag to return nested relationships' data if true
          :type: bool
          :param hybrid_attributes: flag to include hybrid attributes if true
          :type: bool
          :return: dict
          """
          result = dict()
  
          if exclude is None:
               view_cols = self.columns
          else :
               view_cols = filter(lambda e: e not in exclude, self.columns)
  
          for key in view_cols :
              result[key] = getattr(self, key)
  
          if hybrid_attributes:
              for key in self.hybrid_properties:
                  result[key] = getattr(self, key)
  
          if nested:
              for key in self.relations:
                  obj = getattr(self, key)
  
                  if isinstance(obj, SerializeMixin):
                      result[key] = obj.to_dict(hybrid_attributes=hybrid_attributes)
                  elif isinstance(obj, Iterable):
                      result[key] = [
                          o.to_dict(hybrid_attributes=hybrid_attributes) for o in obj
                          if isinstance(o, SerializeMixin)
                      ]
  
          return result
  