attachment.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from rest_framework import serializers
  2. from django.urls import reverse
  3. from misago.threads.models import Attachment
  4. __all__ = ['AttachmentSerializer']
  5. class AttachmentSerializer(serializers.ModelSerializer):
  6. post = serializers.PrimaryKeyRelatedField(read_only=True)
  7. acl = serializers.SerializerMethodField()
  8. is_image = serializers.SerializerMethodField()
  9. filetype = serializers.SerializerMethodField()
  10. uploader_ip = serializers.SerializerMethodField()
  11. url = serializers.SerializerMethodField()
  12. class Meta:
  13. model = Attachment
  14. fields = (
  15. 'id', 'filetype', 'post', 'uploaded_on', 'uploader_name', 'uploader_ip', 'filename',
  16. 'size', 'acl', 'is_image', 'url',
  17. )
  18. def get_acl(self, obj):
  19. try:
  20. return obj.acl
  21. except AttributeError:
  22. return None
  23. def get_is_image(self, obj):
  24. return obj.is_image
  25. def get_filetype(self, obj):
  26. return obj.filetype.name
  27. def get_uploader_ip(self, obj):
  28. if 'user' in self.context and self.context['user'].acl_cache['can_see_users_ips']:
  29. return obj.uploader_ip
  30. else:
  31. return None
  32. def get_url(self, obj):
  33. return {
  34. 'index': obj.get_absolute_url(),
  35. 'thumb': obj.get_thumbnail_url(),
  36. 'uploader': self.get_uploader_url(obj),
  37. }
  38. def get_uploader_url(self, obj):
  39. if obj.uploader_id:
  40. return reverse(
  41. 'misago:user', kwargs={
  42. 'slug': obj.uploader_slug,
  43. 'pk': obj.uploader_id,
  44. }
  45. )
  46. else:
  47. return None