"""DRF serializers defined by the members package"""
from django.templatetags.static import static
from django.urls import reverse
from rest_framework import serializers
from events.api.serializers import CalenderJSSerializer
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 MemberBirthdaySerializer(CalenderJSSerializer):
"""Serializer that renders the member birthdays to the CalendarJS format"""
def _start(self, instance):
return instance.profile.birthday
def _end(self, instance):
pass
def _all_day(self, instance):
return True
def _is_birthday(self, instance):
return True
def _url(self, instance):
return reverse("members:profile", kwargs={"pk": instance.pk})
def _title(self, instance):
return instance.profile.display_name()
def _description(self, instance):
membership = instance.current_membership
if membership and membership.type == "honorary":
return membership.get_type_display()
return ""
def _class_names(self, instance):
class_names = ["birthday-event"]
membership = instance.current_membership
if membership and membership.type == "honorary":
class_names.append("honorary")
return class_names
[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")
avatar = serializers.SerializerMethodField("_avatar")
def _display_name(self, instance):
return instance.profile.display_name()
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"
)
[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"
)