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)