Completed
Push — master ( 61d892...ba8a83 )
by
unknown
01:49
created

TimeZoneAwareDateTimeField.to_internal_value()   A

Complexity

Conditions 2

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
dl 0
loc 7
rs 9.4285
c 0
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
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 View Code Duplication
    class Meta:
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
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
class VersionSerializer(serializers.HyperlinkedModelSerializer):
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', '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 LiveStatisticsRangeSerializer(serializers.Serializer):
114
    start = TimeZoneAwareDateTimeField(required=False)
115
    end = TimeZoneAwareDateTimeField(required=False)
116
117
118
class ServerVersionSerializer(serializers.Serializer):
119
    version = serializers.CharField()
120