summaryrefslogtreecommitdiff
path: root/blocks/saveAPI/serializers.py
blob: 42d089b2517748c1c20a6a49098850933d230638 (plain)
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
from rest_framework import serializers
from saveAPI.models import StateSave, Gallery, BookCategory, Book
from django.core.files.base import ContentFile
import base64
import six
import uuid
import imghdr


class Base64ImageField(serializers.ImageField):

    def to_internal_value(self, data):
        _, data = self.update(data)
        return super(Base64ImageField, self).to_internal_value(data)

    def update(self, data):
        if isinstance(data, six.string_types):
            if 'data:' in data and ';base64,' in data:
                header, data = data.split(';base64,')
        try:
            decoded_file = base64.b64decode(data)
        except TypeError:
            self.fail('invalid_image')
        file_name = str(uuid.uuid4())
        file_extension = imghdr.what(file_name, decoded_file)
        complete_file_name = "%s.%s" % (file_name, file_extension,)
        data = ContentFile(decoded_file, name=complete_file_name)
        return complete_file_name, data


class StateSaveSerializer(serializers.ModelSerializer):
    base64_image = Base64ImageField(max_length=None, use_url=True)

    class Meta:
        model = StateSave
        fields = ('id',
                  'name',
                  'description',
                  'save_time',
                  'create_time',
                  'save_id',
                  'data_dump',
                  'shared',
                  'owner',
                  'base64_image',
                  'script_dump',
                  )


class SaveListSerializer(serializers.ModelSerializer):
    base64_image = Base64ImageField(max_length=None, use_url=True)

    class Meta:
        model = StateSave
        fields = ('id',
                  'name',
                  'description',
                  'save_time',
                  'create_time',
                  'save_id',
                  'shared',
                  'base64_image',
                  )


class GalleryListSerializer(serializers.ModelSerializer):
    has_script = serializers.SerializerMethodField()

    class Meta:
        model = Gallery
        fields = ('save_id',
                  'name',
                  'description',
                  'book_id',
                  'blocks',
                  'media',
                  'lcname',
                  'lcdescription',
                  'has_script',
                  )

    def get_has_script(self, obj):
        return bool(obj.script_dump)


class GalleryDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = Gallery
        fields = ('save_id',
                  'name',
                  'description',
                  'book_id',
                  'data_dump',
                  'media',
                  'script_dump',
                  )


class BookCategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = BookCategory
        fields = ['id', 'category_name']


class BookSerializer(serializers.ModelSerializer):
    example_count = serializers.IntegerField(read_only=True)

    class Meta:
        model = Book
        fields = ['id', 'book_name', 'author_name', 'category', 'example_count']