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
|
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import django_filters
from rest_framework import mixins, viewsets, permissions
from rest_framework import authentication
from rest_framework.pagination import PageNumberPagination
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from .filters import MachineRecordListFilter, UserMachineListFilter
from test_records.models import TestRecord
from users.models import UserMachine, UserProfile
from users.serializer import CreateUserProfileSerializer
from .serializer import UserMachineManageSerializer, UserPortalInfoSerializer, TestRecordListSerializer, \
UserMachineSerializer, CreateUserMachineSerializer
from rest_framework.response import Response
from rest_framework import status
class StandardResultsSetPagination(PageNumberPagination):
page_size = 20
page_size_query_param = 'page_size'
max_page_size = 100
class MiddleResultsSetPagination(PageNumberPagination):
page_size = 40
page_size_query_param = 'page_size'
max_page_size = 100
class UserMachineRecordByBranchListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
"""
List machine records by branch
"""
queryset = TestRecord.objects.all().order_by('-add_time')
serializer_class = TestRecordListSerializer
pagination_class = StandardResultsSetPagination
filter_backends = (django_filters.rest_framework.DjangoFilterBackend,)
filter_class = MachineRecordListFilter
class UserMachineListViewSet(mixins.ListModelMixin, mixins.CreateModelMixin, viewsets.GenericViewSet):
"""
List test records
"""
authentication_classes = (JSONWebTokenAuthentication, authentication.SessionAuthentication )
permission_classes = (permissions.IsAuthenticated, )
queryset = UserMachine.objects.all().order_by('add_time')
serializer_class = UserMachineManageSerializer
pagination_class = MiddleResultsSetPagination
filter_backends = (django_filters.rest_framework.DjangoFilterBackend,)
filter_class = UserMachineListFilter
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
def create(self, request, *args, **kwargs):
data = {}
data['os_name'] = request.data['os_name']
data['os_version'] = request.data['os_version']
data['comp_name'] = request.data['comp_name']
data['comp_version'] = request.data['comp_version']
username = request.data['machine_owner']
user = UserProfile.objects.filter(username=username).filter().first()
user_serializer = CreateUserProfileSerializer(user)
data['machine_owner'] = user_serializer.data['id']
serializer = CreateUserMachineSerializer(data=data)
serializer.is_valid(raise_exception=True)
machine = self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response('success', status=status.HTTP_201_CREATED, headers=headers)
def perform_create(self, serializer):
return serializer.save()
class PublicMachineListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
"""
List all machines
"""
queryset = UserMachine.objects.all().order_by('add_time')
serializer_class = UserMachineManageSerializer
pagination_class = MiddleResultsSetPagination
class UserPortalInfoViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet):
"""
user info
"""
# authentication_classes = (JSONWebTokenAuthentication, authentication.SessionAuthentication )
# permission_classes = (permissions.IsAuthenticated, )
lookup_field = 'username'
queryset = UserProfile.objects.all()
serializer_class = UserPortalInfoSerializer
class UserMachinePermission(permissions.BasePermission):
"""
Machine upload permission check
"""
def has_permission(self, request, view):
secret = request.META.get("HTTP_AUTHORIZATION")
# print(secret)
# alias = request.data.alias
ret = UserMachine.objects.filter(machine_secret=secret, state=1).exists()
return ret
|