from rest_framework import serializers from django.urls import reverse from misago.core.utils import format_plaintext_for_html from misago.threads.models import Attachment __all__ = ['AttachmentSerializer'] class AttachmentSerializer(serializers.ModelSerializer): post = serializers.PrimaryKeyRelatedField(read_only=True) acl = serializers.SerializerMethodField() is_image = serializers.SerializerMethodField() filetype = serializers.SerializerMethodField() uploader_ip = serializers.SerializerMethodField() url = serializers.SerializerMethodField() class Meta: model = Attachment fields = ( 'id', 'filetype', 'post', 'uploaded_on', 'uploader_name', 'uploader_ip', 'filename', 'size', 'acl', 'is_image', 'url', ) def get_acl(self, obj): try: return obj.acl except AttributeError: return None def get_is_image(self, obj): return obj.is_image def get_filetype(self, obj): return obj.filetype.name def get_uploader_ip(self, obj): if 'user' in self.context and self.context['user'].acl_cache['can_see_users_ips']: return obj.uploader_ip else: return None def get_url(self, obj): return { 'index': obj.get_absolute_url(), 'thumb': obj.get_thumbnail_url(), 'uploader': self.get_uploader_url(obj), } def get_uploader_url(self, obj): if obj.uploader_id: return reverse('misago:user', kwargs={ 'slug': obj.uploader_slug, 'pk': obj.uploader_id, }) else: return None