Completed
Push — master ( 6a4ed1...7ae2ee )
by
unknown
44s
created

PartialUpdateSerializer   A

Size/Duplication

Total Lines 12
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 12
rs 10
c 1
b 0
f 0
1
# coding: utf8
2
3
"""
4
This software is licensed under the Apache 2 license, quoted below.
5
6
Copyright 2014 Crystalnix Limited
7
8
Licensed under the Apache License, Version 2.0 (the "License"); you may not
9
use this file except in compliance with the License. You may obtain a copy of
10
the License at
11
12
    http://www.apache.org/licenses/LICENSE-2.0
13
14
Unless required by applicable law or agreed to in writing, software
15
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
16
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
17
License for the specific language governing permissions and limitations under
18
the License.
19
"""
20
from django.utils import timezone
21
22
from rest_framework import serializers
23
from dateutil import parser
24
import pytz
25
26
from omaha.models import Application, Platform, Channel, Version, Action, Data, PartialUpdate
27
28
29
__all__ = ['AppSerializer', 'PlatformSerializer', 'ChannelSerializer', 'VersionSerializer']
30
31
32
class TimeZoneAwareDateTimeField(serializers.DateTimeField):
33
    def to_internal_value(self, value):
34
        local_dt = parser.parse(value)
35
        if not local_dt.tzinfo:
36
            tz = timezone.get_current_timezone()
37
            local_dt = tz.localize(local_dt)
38
        utc_dt = local_dt.astimezone(pytz.utc)
39
        return utc_dt
40
41
42
class DataSerializer(serializers.HyperlinkedModelSerializer):
43
    app = serializers.PrimaryKeyRelatedField(queryset=Application.objects.all())
44
45
    class Meta:
46
        model = Data
47
        fields = ('id', 'app', 'index', 'name', 'value')
48
49
50
class AppSerializer(serializers.HyperlinkedModelSerializer):
51
    data_set = DataSerializer(many=True, required=False, read_only=True)
52
53
    class Meta:
54
        model = Application
55
        fields = ('id', 'name', 'data_set')
56
57
58
class PlatformSerializer(serializers.HyperlinkedModelSerializer):
59
    class Meta:
60
        model = Platform
61
        fields = ('id', 'name')
62
63
64
class ChannelSerializer(serializers.HyperlinkedModelSerializer):
65
    class Meta:
66
        model = Channel
67
        fields = ('id', 'name')
68
69
70
class ActionSerializer(serializers.HyperlinkedModelSerializer):
71
    version = serializers.PrimaryKeyRelatedField(queryset=Version.objects.all())
72
73
    class Meta:
74
        model = Action
75
        fields = ('id', 'version', 'event', 'run', 'arguments', 'successurl',
76
                  'terminateallbrowsers', 'successsaction', 'other')
77
78
79 View Code Duplication
class VersionSerializer(serializers.HyperlinkedModelSerializer):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
80
    is_enabled = serializers.BooleanField(default=True, required=False)
81
    app = serializers.PrimaryKeyRelatedField(queryset=Application.objects.all())
82
    platform = serializers.PrimaryKeyRelatedField(queryset=Platform.objects.all())
83
    channel = serializers.PrimaryKeyRelatedField(queryset=Channel.objects.all())
84
    version = serializers.CharField()
85
86
    class Meta:
87
        model = Version
88
        fields = ('id', 'is_enabled', 'is_critical', 'app', 'platform', 'channel',
89
                  'version', 'release_notes', 'file', 'file_hash', 'file_size',
90
                  'created', 'modified')
91
        read_only_fields = ('created', 'modified')
92
93
    def create(self, validated_data):
94
        if not validated_data.get('file_size'):
95
            file = validated_data['file']
96
            validated_data['file_size'] = file.size
97
        return super(VersionSerializer, self).create(validated_data)
98
99
100
class StatisticsMonthsSerializer(serializers.Serializer):
101
    data = serializers.DictField()
102
103
104
class MonthRangeSerializer(serializers.Serializer):
105
    start = serializers.DateTimeField(input_formats=['%Y-%m'], required=False)
106
    end = serializers.DateTimeField(input_formats=['%Y-%m'], required=False)
107
108
109
class MonthInputSerializer(serializers.Serializer):
110
    date = serializers.DateTimeField(input_formats=['%Y-%m'], required=False)
111
112
113
class LiveStatisticsInputSerializer(serializers.Serializer):
114
    start = TimeZoneAwareDateTimeField(required=False)
115
    end = TimeZoneAwareDateTimeField(required=False)
116
    channel = serializers.CharField(required=False)
117
118
119
class ServerVersionSerializer(serializers.Serializer):
120
    version = serializers.CharField()
121
122
123
class PartialUpdateSerializer(serializers.ModelSerializer):
124
    version = serializers.PrimaryKeyRelatedField(queryset=Version.objects.all())
125
126
    class Meta:
127
        model = PartialUpdate
128
        filelds = (
129
            'active_users',
130
            'is_enabled',
131
            'percent',
132
            'version',
133
            'start_date',
134
            'exclude_new_users',
135
        )
136