serializers.py 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. from rest_framework import serializers
  2. from .models import Category, Comment, EncodeProfile, Media, Playlist, Tag
  3. # TODO: put them in a more DRY way
  4. class MediaSerializer(serializers.ModelSerializer):
  5. # to be used in APIs as show related media
  6. user = serializers.ReadOnlyField(source="user.username")
  7. url = serializers.SerializerMethodField()
  8. api_url = serializers.SerializerMethodField()
  9. thumbnail_url = serializers.SerializerMethodField()
  10. author_profile = serializers.SerializerMethodField()
  11. author_thumbnail = serializers.SerializerMethodField()
  12. def get_url(self, obj):
  13. return self.context["request"].build_absolute_uri(obj.get_absolute_url())
  14. def get_api_url(self, obj):
  15. return self.context["request"].build_absolute_uri(obj.get_absolute_url(api=True))
  16. def get_thumbnail_url(self, obj):
  17. if obj.thumbnail_url:
  18. return self.context["request"].build_absolute_uri(obj.thumbnail_url)
  19. else:
  20. return None
  21. def get_author_profile(self, obj):
  22. return self.context["request"].build_absolute_uri(obj.author_profile())
  23. def get_author_thumbnail(self, obj):
  24. return self.context["request"].build_absolute_uri(obj.author_thumbnail())
  25. class Meta:
  26. model = Media
  27. read_only_fields = (
  28. "friendly_token",
  29. "user",
  30. "add_date",
  31. "media_type",
  32. "state",
  33. "duration",
  34. "encoding_status",
  35. "views",
  36. "likes",
  37. "dislikes",
  38. "reported_times",
  39. "size",
  40. "is_reviewed",
  41. "featured",
  42. )
  43. fields = (
  44. "friendly_token",
  45. "url",
  46. "api_url",
  47. "user",
  48. "title",
  49. "description",
  50. "add_date",
  51. "views",
  52. "media_type",
  53. "state",
  54. "duration",
  55. "thumbnail_url",
  56. "is_reviewed",
  57. "preview_url",
  58. "author_name",
  59. "author_profile",
  60. "author_thumbnail",
  61. "encoding_status",
  62. "views",
  63. "likes",
  64. "dislikes",
  65. "reported_times",
  66. "featured",
  67. "user_featured",
  68. "size",
  69. )
  70. class SingleMediaSerializer(serializers.ModelSerializer):
  71. user = serializers.ReadOnlyField(source="user.username")
  72. url = serializers.SerializerMethodField()
  73. def get_url(self, obj):
  74. return self.context["request"].build_absolute_uri(obj.get_absolute_url())
  75. class Meta:
  76. model = Media
  77. read_only_fields = (
  78. "friendly_token",
  79. "user",
  80. "add_date",
  81. "views",
  82. "media_type",
  83. "state",
  84. "duration",
  85. "encoding_status",
  86. "views",
  87. "likes",
  88. "dislikes",
  89. "reported_times",
  90. "size",
  91. "video_height",
  92. "is_reviewed",
  93. )
  94. fields = (
  95. "url",
  96. "user",
  97. "title",
  98. "description",
  99. "add_date",
  100. "edit_date",
  101. "media_type",
  102. "state",
  103. "duration",
  104. "thumbnail_url",
  105. "poster_url",
  106. "thumbnail_time",
  107. "url",
  108. "sprites_url",
  109. "preview_url",
  110. "author_name",
  111. "author_profile",
  112. "author_thumbnail",
  113. "encodings_info",
  114. "encoding_status",
  115. "views",
  116. "likes",
  117. "dislikes",
  118. "reported_times",
  119. "user_featured",
  120. "original_media_url",
  121. "size",
  122. "video_height",
  123. "enable_comments",
  124. "categories_info",
  125. "is_reviewed",
  126. "edit_url",
  127. "tags_info",
  128. "hls_info",
  129. "license",
  130. "subtitles_info",
  131. "ratings_info",
  132. "add_subtitle_url",
  133. "allow_download",
  134. )
  135. class MediaSearchSerializer(serializers.ModelSerializer):
  136. url = serializers.SerializerMethodField()
  137. api_url = serializers.SerializerMethodField()
  138. def get_url(self, obj):
  139. return self.context["request"].build_absolute_uri(obj.get_absolute_url())
  140. def get_api_url(self, obj):
  141. return self.context["request"].build_absolute_uri(obj.get_absolute_url(api=True))
  142. class Meta:
  143. model = Media
  144. fields = (
  145. "title",
  146. "author_name",
  147. "author_profile",
  148. "thumbnail_url",
  149. "add_date",
  150. "views",
  151. "description",
  152. "friendly_token",
  153. "duration",
  154. "url",
  155. "api_url",
  156. "media_type",
  157. "preview_url",
  158. "categories_info",
  159. )
  160. class EncodeProfileSerializer(serializers.ModelSerializer):
  161. class Meta:
  162. model = EncodeProfile
  163. fields = ("name", "extension", "resolution", "codec", "description")
  164. class CategorySerializer(serializers.ModelSerializer):
  165. user = serializers.ReadOnlyField(source="user.username")
  166. class Meta:
  167. model = Category
  168. fields = (
  169. "title",
  170. "description",
  171. "is_global",
  172. "media_count",
  173. "user",
  174. "thumbnail_url",
  175. )
  176. class TagSerializer(serializers.ModelSerializer):
  177. class Meta:
  178. model = Tag
  179. fields = ("title", "media_count", "thumbnail_url")
  180. class PlaylistSerializer(serializers.ModelSerializer):
  181. user = serializers.ReadOnlyField(source="user.username")
  182. class Meta:
  183. model = Playlist
  184. read_only_fields = ("add_date", "user")
  185. fields = ("add_date", "title", "description", "user", "media_count", "url", "api_url", "thumbnail_url")
  186. class PlaylistDetailSerializer(serializers.ModelSerializer):
  187. user = serializers.ReadOnlyField(source="user.username")
  188. class Meta:
  189. model = Playlist
  190. read_only_fields = ("add_date", "user")
  191. fields = ("title", "add_date", "user_thumbnail_url", "description", "user", "media_count", "url", "thumbnail_url")
  192. class CommentSerializer(serializers.ModelSerializer):
  193. author_profile = serializers.ReadOnlyField(source="user.get_absolute_url")
  194. author_name = serializers.ReadOnlyField(source="user.name")
  195. author_thumbnail_url = serializers.ReadOnlyField(source="user.thumbnail_url")
  196. class Meta:
  197. model = Comment
  198. read_only_fields = ("add_date", "uid")
  199. fields = (
  200. "add_date",
  201. "text",
  202. "parent",
  203. "author_thumbnail_url",
  204. "author_profile",
  205. "author_name",
  206. "media_url",
  207. "uid",
  208. )