HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //proc/thread-self/root/home/arjun/projects/buyercall/buyercall/blueprints/channels/serializers.py
from buyercall.blueprints.partnership.models import Partnership, PartnershipAccount
from buyercall.extensions import ma
from buyercall.blueprints.channels.models import Channel, ChannelType
from buyercall.blueprints.sources.models import Source
from buyercall.blueprints.sources.serializers import SourceOutSchema
from buyercall.blueprints.user.models import User
from buyercall.blueprints.user.serializers import UserSchema
from buyercall.blueprints.partnership.serializers import (PartnershipAccountInSchema,
                                                          PartnershipOutSchema, PartnershipAccountOutSchema, PartnershipInSchema)


class ChannelTypeInSchema(ma.SQLAlchemyAutoSchema):
    class Meta:
        model = ChannelType
        include_fk = True


class ChannelTypeOutSchema(ma.SQLAlchemyAutoSchema):

    class Meta:
        model = ChannelType
        include_fk = True
        exclude = ['id']


class ChannelInSchema(ma.SQLAlchemyAutoSchema):

    class Meta:
        model = Channel
        fields = ['name', 'description', 'content', 'is_active', 'source', 'type']


class ChannelOutSchema(ma.SQLAlchemyAutoSchema):
    object = ma.Method("get_related_object")
    source = ma.Method("get_source")
    type = ma.Method("get_type")
    partnership = ma.Method("get_partnership")
    partnership_account = ma.Method("get_partnership_account")
    created_by = ma.Method("get_created_by")
    widgets = ma.Method("get_widgets")

    class Meta:
        model = Channel
        include_fk = True
        exclude = ['id', 'partnership_id', 'partnership_account_id', 'related_id']

    def get_partnership(self, obj):
        return PartnershipOutSchema(only=('sid', 'name')).dump(Partnership.get_by_id(obj.partnership_id))

    def get_partnership_account(self, obj):
        return PartnershipAccountOutSchema(only=('sid', 'name')).dump(PartnershipAccount.get_by_id(obj.partnership_account_id))

    def get_related_object(self, obj):
        return obj.get_related_object()

    def get_source(self, obj):
        return SourceOutSchema(only=('sid', 'name', 'description', 'workflows')).dump(Source.get_by_id(obj.source))

    def get_type(self, obj):
        return ChannelTypeOutSchema(only=('sid', 'name')).dump(ChannelType.get_by_id(obj.type))

    def get_created_by(self, obj):
        fields = ('sid', 'firstname', 'lastname', 'email')
        return UserSchema(only=fields).dump(User.get_by_id(obj.created_by))

    def get_widgets(self, obj):
        return [wid.guid for wid in obj.widgets]


class ChannelOutMiniSchema(ma.SQLAlchemyAutoSchema):
    source = ma.Method("get_source")
    type = ma.Method("get_type")
    partnership = ma.Method("get_partnership")
    partnership_account = ma.Method("get_partnership_account")
    widgets = ma.Method("get_widgets")

    class Meta:
        model = Channel
        exclude = ['id', 'partnership_id', 'partnership_account_id', 'related_id']

    def get_source(self, obj):
        return Source.get_sid_from_id(obj.source)

    def get_type(self, obj):
        return ChannelType.get_name_by_id(obj.type)

    def get_partnership(self, obj):
        return Partnership.get_sid_from_id(obj.partnership_id)

    def get_partnership_account(self, obj):
        return PartnershipAccount.get_sid_from_id(obj.partnership_account_id)

    def get_widgets(self, obj):
        from buyercall.blueprints.widgets.serializers import WidgetOutWithoutChannels
        return WidgetOutWithoutChannels(many=True).dump(obj.widgets)


class ChannelOutWithoutWidgets(ChannelOutMiniSchema):
    class Meta:
        model = Channel
        exclude = ['id', 'partnership_id', 'partnership_account_id', 'related_id', 'widgets']


class ChannelOutMinimal(ma.SQLAlchemyAutoSchema):
    type = ma.Method('get_type')
    value = ma.Method('get_sid_value')
    sourceId = ma.Method('get_source')

    class Meta:
        model = Channel
        fields = ['type', 'value', 'sourceId']

    def get_type(self, obj):
        channel_type = ChannelType.get_by_id(obj.type)
        if channel_type:
            return channel_type.name.upper()
        return ''

    def get_source(self, obj):
        return Source.get_sid_from_id(obj.source) or None

    def get_sid_value(self, obj):
        return obj.sid