-
Notifications
You must be signed in to change notification settings - Fork 0
/
serializers.py
74 lines (63 loc) · 2.42 KB
/
serializers.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
from rest_framework import serializers
from rest_framework.reverse import reverse
from content.models import Content, Videoinstance
class VideoinstanceSerializer(serializers.HyperlinkedModelSerializer):
url = serializers.SerializerMethodField()
# Future compatibility, fields will be renamed in some future version
created_at = serializers.DateTimeField(source="created")
def get_url(self, obj):
request = self.context.get("request")
url = reverse("instance", kwargs={"uid": obj.content.uid, "extension": obj.extension}, request=request)
return url
class Meta:
model = Videoinstance
fields = ["url", "mimetype", "filesize", "duration", "bitrate", "width", "height", "framerate", "created_at"]
class ContentSerializer(serializers.HyperlinkedModelSerializer):
original_url = serializers.SerializerMethodField()
preview_url = serializers.SerializerMethodField()
videoinstances = VideoinstanceSerializer(many=True, read_only=True)
# Future compatibility, fields will be renamed in some future version
created_at = serializers.DateTimeField(source="created")
updated_at = serializers.DateTimeField(source="updated")
def get_original_url(self, obj):
request = self.context.get("request")
url = reverse("original", kwargs={"uid": obj.uid, "filename": obj.originalfilename}, request=request)
return url
def get_preview_url(self, obj: Content):
request = self.context.get("request")
if obj.preview:
url = reverse(
"preview",
kwargs={"uid": obj.uid, "width": "W", "height": "H", "action": "", "ext": "jpg"},
request=request,
)
else:
url = None
return url
class Meta:
model = Content
fields = [
"uid",
"title",
"caption",
"author",
"original_url",
"preview_url",
"videoinstances",
"originalfilename",
"filesize",
"filetime",
"sha1",
"point",
"mimetype",
"created_at",
"updated_at",
]
def create(self, validated_data):
"""
Create a new Content instance.
Note that lots of saving process is done in views.py and models.py.
"""
c = Content(**validated_data)
c.save()
return c