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