42_ft_transcendence/profiles/serializers.py

47 lines
1.4 KiB
Python

from django.conf import settings
from django.utils.translation import gettext as _
from rest_framework import serializers
from .models import ProfileModel
class ProfileSerializer(serializers.ModelSerializer):
username = serializers.ReadOnlyField(source='user.username')
avatar = serializers.ImageField(required=False)
online = serializers.SerializerMethodField()
class Meta:
model = ProfileModel
fields = ["username", "avatar", "id", 'online']
def get_online(self, obj: ProfileModel):
from notice.consumers import notice_manager
user = None
request = self.context.get("request")
if request and hasattr(request, "user"):
user = request.user
if user is None:
return None
if not user.profilemodel.is_friend(obj) and user.pk != obj.pk:
return None
return notice_manager.get_consumer_by_user(obj.user) is not None
def validate_avatar(self, value):
'''
Check that the image is not too large
'''
if value.size > settings.PROFILE_PICTURE_MAX_SIZE:
raise serializers.ValidationError(_('Image is too large.'))
return value
def to_representation(self, instance):
data = super().to_representation(instance)
data['avatar'] = data['avatar'][data['avatar'].find('/static/'):]
return data