"""DRF serializers defined by the members package."""
from django.templatetags.static import static
from rest_framework import serializers
from members.models import Member, Profile
from members.services import member_achievements, member_societies
from thaliawebsite.api.services import create_image_thumbnail_dict
[docs]class ProfileRetrieveSerializer(serializers.ModelSerializer):
"""Serializer that renders a member profile."""
pk = serializers.SerializerMethodField("_pk")
avatar = serializers.SerializerMethodField("_avatar")
birthday = serializers.SerializerMethodField("_birthday")
membership_type = serializers.SerializerMethodField("_membership_type")
achievements = serializers.SerializerMethodField("_achievements")
societies = serializers.SerializerMethodField("_societies")
def _pk(self, instance):
return instance.user.pk
def _birthday(self, instance):
if instance.show_birthday:
return instance.birthday
return None
def _membership_type(self, instance):
membership = instance.user.current_membership
if membership:
return membership.type
return None
def _achievements(self, instance):
return member_achievements(instance.user)
def _societies(self, instance):
return member_societies(instance.user)
def _avatar(self, instance):
placeholder = self.context["request"].build_absolute_uri(
static("members/images/default-avatar.jpg")
)
file = None
if instance.photo:
file = instance.photo
return create_image_thumbnail_dict(
self.context["request"], file, placeholder=placeholder, size_large="800x800"
)
[docs]class MemberListSerializer(serializers.ModelSerializer):
"""Serializer that renders a list of members."""
display_name = serializers.SerializerMethodField("_display_name")
starting_year = serializers.SerializerMethodField("_starting_year")
avatar = serializers.SerializerMethodField("_avatar")
membership_type = serializers.SerializerMethodField("_membership_type")
def _display_name(self, instance):
return instance.profile.display_name()
def _starting_year(self, instance):
return instance.profile.starting_year
def _avatar(self, instance):
placeholder = self.context["request"].build_absolute_uri(
static("members/images/default-avatar.jpg")
)
file = None
if instance.profile.photo:
file = instance.profile.photo
return create_image_thumbnail_dict(
self.context["request"], file, placeholder=placeholder, size_large="800x800"
)
def _membership_type(self, instance):
membership = instance.current_membership
if membership:
return membership.type
return None
[docs]class ProfileEditSerializer(serializers.ModelSerializer):
"""Serializer that renders a profile to be edited."""
pk = serializers.SerializerMethodField("_pk")
email = serializers.SerializerMethodField("_email")
first_name = serializers.SerializerMethodField("_first_name")
last_name = serializers.SerializerMethodField("_last_name")
avatar = serializers.SerializerMethodField("_avatar")
membership_type = serializers.SerializerMethodField("_membership_type")
achievements = serializers.SerializerMethodField("_achievements")
societies = serializers.SerializerMethodField("_societies")
def _pk(self, instance):
return instance.user.pk
def _email(self, instance):
return instance.user.email
def _first_name(self, instance):
return instance.user.first_name
def _last_name(self, instance):
return instance.user.last_name
def _membership_type(self, instance):
membership = instance.user.current_membership
if membership:
return membership.type
return None
def _achievements(self, instance):
return member_achievements(instance.user)
def _societies(self, instance):
return member_societies(instance.user)
def _avatar(self, instance):
placeholder = self.context["request"].build_absolute_uri(
static("members/images/default-avatar.jpg")
)
file = None
if instance.photo:
file = instance.photo
return create_image_thumbnail_dict(
self.context["request"], file, placeholder=placeholder, size_large="800x800"
)