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 include_hybrid: flag to include hybrid attributes if true
        :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]

        return result

@@ -1216,16 +1216,41 @@
 key%5D = %5B
+%0A                        
 o.to_dic
@@ -1300,16 +1300,94 @@
 o in obj
+%0A                        if isinstance(o, SerializeMixin)%0A                    
 %5D%0A%0A     

Check if relation objects are class of SerializeMixin