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/self/root/home/arjun/projects/buyercall/buyercall/blueprints/widgets/serializers.py
from buyercall.blueprints.partnership.models import PartnershipAccount, Partnership
from buyercall.extensions import ma
from buyercall.blueprints.widgets.models import Widget
from buyercall.blueprints.channels.serializers import ChannelOutSchema, ChannelOutMiniSchema, ChannelOutWithoutWidgets, ChannelOutMinimal
from buyercall.blueprints.user.models import User


class WidgetOutSchema(ma.SQLAlchemyAutoSchema):
    partnership_account = ma.Method('get_partnership_account')
    options = ma.Raw(dump_to='options')
    channels = ma.Method("get_channels")

    class Meta:
        model = Widget
        exclude = ['id', 'leads', 'partnership_account_id', 'inbound_id', 'is_options_v3', '_options']

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

    def get_channels(self, obj):
        return ChannelOutMiniSchema(many=True).dump(obj.channels)


class WidgetOutSelectedResponseSchema(ma.SQLAlchemyAutoSchema):
    id = ma.Method("get_id")
    partnership_account_id = ma.Method("get_partnership_account_id")
    created_by = ma.Method("get_created_by")
    updated_by = ma.Method("get_updated_by")
    partnership_id = ma.Method("get_partnership_id")
    partnershipName = ma.Method("get_partnership_name")
    partnershipAccountname = ma.Method("get_partnership_account_name")
    created_by_agent_id = ma.Method("get_created_by_agent_id")
    updated_by_agent_id = ma.Method("get_updated_by_agent_id")
    channels = ma.Method("get_channels")
    attatchedChannelCount = ma.Method("get_channels_count")
    isActive = ma.Method('get_is_active')

    class Meta:
        model = Widget
        fields = ['id', 'name', 'description', 'created_on', 'updated_on',
                  'partnership_account_id', 'created_by', 'updated_by',
                  'partnership_id', 'partnershipName', 'partnershipAccountname',
                  'created_by_agent_id', 'updated_by_agent_id', 'channels', 'options',
                  'attatchedChannelCount', 'isActive']

    def get_id(self, obj):
        return obj.guid

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

    def get_created_by(self, obj):
        created_by = User.get_by_id(obj.created_by)
        created_by = f"{created_by.firstname} {created_by.lastname}" if created_by else None
        return created_by

    def get_created_by_agent_id(self, obj):
        return User.get_sid_from_id(obj.created_by)

    def get_updated_by_agent_id(self, obj):
        return User.get_sid_from_id(obj.updated_by)

    def get_updated_by(self, obj):
        updated_by = User.get_by_id(obj.updated_by)
        updated_by = f"{updated_by.firstname} {updated_by.lastname}" if updated_by else None
        return updated_by

    def get_partnership_id(self, obj):
        partnersip_account = PartnershipAccount.query.filter(
            PartnershipAccount.id == obj.partnership_account_id).first()
        partnership_sid = Partnership.get_sid_from_id(
            partnersip_account.partnership_id) if partnersip_account else None
        return partnership_sid

    def get_partnership_name(self, obj):
        partnersip_account = PartnershipAccount.query.filter(
            PartnershipAccount.id == obj.partnership_account_id).first()
        partnership_name = Partnership.get_name(partnersip_account.partnership_id) if partnersip_account else None
        return partnership_name

    def get_partnership_account_name(self, obj):
        partnersip_account = PartnershipAccount.query.filter(
            PartnershipAccount.id == obj.partnership_account_id).first()
        partnership_account_name = partnersip_account.name if partnersip_account else None
        return partnership_account_name

    def get_channels(self, obj):
        return ChannelOutMinimal(many=True).dump(obj.channels)

    def get_channels_count(self, obj):
        return len(obj.channels)

    def get_is_active(self, obj):
        return obj.enabled


class WidgetOutWithoutChannels(WidgetOutSelectedResponseSchema):
    options = ma.Raw(dump_to='_options')

    class Meta:
        model = Widget
        exclude = ['channels', '_options']