attachment.py 1.8 KB

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