summaryrefslogtreecommitdiff
path: root/web/apps/user_operation/views.py
blob: 43696f6b727ef7eab32841063cce72f50bb5c619 (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
# -*- 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