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
111
112
113
114
115
116
|
from django.db.models import Count
from rest_framework import serializers
from pgperffarm.settings import DB_ENUM,AVATAR_URL
from test_records.serializer import TestRecordListSerializer
from users.serializer import AliasSerializer, UserMachineSerializer
from test_records.models import TestRecord
from users.models import UserMachine, Alias, UserProfile
import hashlib
class UserPortalInfoSerializer(serializers.ModelSerializer):
involved = serializers.SerializerMethodField()
reports = serializers.SerializerMethodField()
machines = serializers.SerializerMethodField()
avatar = serializers.SerializerMethodField()
date_joined = serializers.SerializerMethodField()
class Meta:
model = UserProfile
fields = ('email', 'involved', 'reports', 'date_joined', 'machines', 'avatar')
def date_joined(self, obj):
return obj.date_joined.strftime('%Y')
def get_avatar(self, obj):
email = obj.email
avatar = AVATAR_URL + hashlib.md5(email).hexdigest()
return avatar
def get_machines(self, obj):
'''
machines num
'''
return UserMachine.objects.filter(machine_owner_id=obj.id).count()
def get_reports(self, obj):
'''
reports num
'''
machine_dict = []
target_machines = UserMachine.objects.filter(machine_owner_id=obj.id)
serializer = UserMachineSerializer(target_machines, many=True)
# print(serializer.data)
for item in serializer.data:
machine_dict.append(item['machine_sn'])
reports = TestRecord.objects.filter(test_machine__machine_sn__in=machine_dict).count()
return reports
def get_involved(self, obj):
'''
reports, machines, branches
'''
machine_dict = []
target_machines = UserMachine.objects.filter(machine_owner_id=obj.id)
serializer = UserMachineSerializer(target_machines, many=True)
# print(serializer.data)
for item in serializer.data:
machine_dict.append(item['machine_sn'])
reports = TestRecord.objects.filter(test_machine__machine_sn__in=machine_dict).values_list('branch__branch_name').annotate(Count('id'))
return reports.count()
class CreateUserMachineSerializer(serializers.ModelSerializer):
class Meta:
model = UserMachine
fields = "__all__"
class UserMachineManageSerializer(serializers.ModelSerializer):
'''
use UserMachineSerializer
'''
alias = serializers.SerializerMethodField()
reports = serializers.SerializerMethodField()
lastest = serializers.SerializerMethodField()
state = serializers.SerializerMethodField()
class Meta:
model = UserMachine
fields = (
'alias', 'machine_sn', 'os_name', 'os_version', 'comp_name', 'comp_version', 'reports', 'state', 'lastest',
'state', 'add_time')
def get_state(self, obj):
state_code = obj.state
new_dict = {v: k for k, v in DB_ENUM["machine_state"].items()}
return new_dict[state_code]
def get_alias(self, obj):
target_alias = Alias.objects.filter(id=obj.alias_id).first()
serializer = AliasSerializer(target_alias)
return serializer.data['name']
def get_reports(self, obj):
reports_num = TestRecord.objects.filter(test_machine_id=obj.id).count()
return reports_num
def get_lastest(self, obj):
record_branch_list = TestRecord.objects.filter(test_machine_id=obj.id).values_list(
'branch').annotate(Count('id'))
# < QuerySet[(1, 4), (2, 5)] >
ret = []
for branch_item in record_branch_list:
# branch_name = branch_item[0]
target_record = TestRecord.objects.filter(test_machine_id=obj.id, branch=branch_item[0]).first()
serializer = TestRecordListSerializer(target_record)
ret.append(serializer.data)
return ret
|