50 lines
1.4 KiB
Python
50 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 user.pk == obj.pk:
|
|
return True
|
|
|
|
if not user.profilemodel.is_friend(obj):
|
|
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
|