attachment.py 1.7 KB

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