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/agents/serializers.py
from marshmallow import fields

from buyercall.blueprints.agents.models import Agent, Team
from buyercall.blueprints.partnership.models import Partnership, PartnershipAccount
from buyercall.blueprints.user.models import User
from buyercall.extensions import ma
from buyercall.lib.util_boto3_s3 import generate_presigned_file_url


class AgentWithoutTeamSchema(ma.SQLAlchemyAutoSchema):
    role = ma.Method('get_agent_role')

    class Meta:
        model = Agent
        fields = ['sid', 'firstname', 'lastname', 'phonenumber', 'email', 'role']

    def get_agent_role(self, obj):
        return obj.user.role


class TeamSchema(ma.SQLAlchemyAutoSchema):
    partnership_account_id = ma.Method('get_partnership_account_id')
    partnership_id = ma.Method('get_partnership_id')
    members = ma.Nested(lambda: AgentWithoutTeamSchema(many=True), dump_only=True)
    teamName = fields.String(attribute='name')

    class Meta:
        model = Team
        exclude = ['id', 'is_active', 'name']

    def get_partnership_id(self, obj):
        return Partnership.get_sid_from_id(id=obj.partnership_id) if obj else None

    def get_partnership_account_id(self, obj):
        return PartnershipAccount.get_sid_from_id(id=obj.partnership_account_id) if obj else None


class AgentSchema(ma.SQLAlchemyAutoSchema):
    class Meta:
        model = Agent
        exclude = ['id', 'extension', 'is_group', 'agents']


class AgentMiniSchema(ma.SQLAlchemyAutoSchema):
    role = ma.Method('get_agent_role')
    teams = ma.Method('get_teams')
    isTeam = fields.Boolean(dump_default=False)
    userAvatar = ma.Method('get_avatar')
    userId = ma.Method('get_user_id')
    # sid = ma.Method('get_user_id')

    class Meta:
        model = Agent
        fields = ['sid', 'firstname', 'lastname', 'phonenumber', 'email', 'role', 'teams', 'isTeam', 'userAvatar', 'userId']

    def get_agent_role(self, obj):
        return obj.user.role if obj.user else ''

    def get_teams(self, obj):
        return TeamSchema(many=True).dump(obj.teams) if obj.teams else []

    def get_avatar(self, obj):
        user = User.get_by_id(obj.user_id)
        if user:
            try:
                bucket_name, key = user.user_avatar.split("::")
                return generate_presigned_file_url(key, bucket_name)
            except Exception as e:
                pass
        return ''

    def get_user_id(self, obj):
        return User.get_sid_from_id(obj.user_id)