From 2c93879207784628979cbd2fab36ba03c2bec8ee Mon Sep 17 00:00:00 2001 From: Hongyuan Ma Date: Thu, 14 Jun 2018 22:28:13 +0800 Subject: [PATCH] add CreateTestRecordSerializer --- client/post-example/update.py | 2 +- web/apps/test_records/models.py | 8 ++++ web/apps/test_records/serializer.py | 14 +++++++ web/apps/test_records/views.py | 62 +++++++++++++++++++++++------ 4 files changed, 73 insertions(+), 13 deletions(-) diff --git a/client/post-example/update.py b/client/post-example/update.py index 7bb12cb..9007ad4 100644 --- a/client/post-example/update.py +++ b/client/post-example/update.py @@ -32,7 +32,7 @@ def http_post(url, data, token): print result with open("./results.json",'r') as load_f: - load_dict = (json.load(load_f)) + load_dict = (json.load(load_f, encoding="UTF-8")) http_post(url,load_dict,token) # for line in s: diff --git a/web/apps/test_records/models.py b/web/apps/test_records/models.py index 51c8194..0006003 100644 --- a/web/apps/test_records/models.py +++ b/web/apps/test_records/models.py @@ -109,6 +109,14 @@ class TestDataSet(models.Model): metric = models.DecimalField(max_digits=16, decimal_places=6, verbose_name="metric",help_text="metric of the test dataset") median = models.DecimalField(max_digits=16, decimal_places=6, verbose_name="median",help_text="median of the test dataset") add_time = models.DateTimeField(default=datetime.now, verbose_name="test dataset time") + STATUS_CHOICE = ( + ('-1', 'none'), + ('1', 'improved'), + ('2', 'quo'), + ('3', 'regressive'), + ) + status = models.IntegerField(choices=STATUS_CHOICE, verbose_name="status", help_text="status of this dataset") + percentage = models.DecimalField(max_digits=8, decimal_places=4, verbose_name="percentage",help_text="percentage compared to previous dataset") class Meta: verbose_name = "test dataset" verbose_name_plural = "test dataset" diff --git a/web/apps/test_records/serializer.py b/web/apps/test_records/serializer.py index ae0711a..50f595b 100644 --- a/web/apps/test_records/serializer.py +++ b/web/apps/test_records/serializer.py @@ -39,6 +39,20 @@ class TestResultSerializer(serializers.ModelSerializer): model = TestResult fields = "__all__" +class CreateTestRecordSerializer(serializers.ModelSerializer): + + ''' + create ModelSerializer + ''' + # pg_info =PGInfoSerializer() + # linux_info = LinuxInfoSerializer() + # meta_info = MetaInfoSerializer() + + class Meta: + model = TestRecord + fields = "__all__" + + class TestRecordSerializer(serializers.ModelSerializer): ''' diff --git a/web/apps/test_records/views.py b/web/apps/test_records/views.py index 741856f..53acad9 100644 --- a/web/apps/test_records/views.py +++ b/web/apps/test_records/views.py @@ -4,7 +4,9 @@ from __future__ import unicode_literals from django.shortcuts import render from rest_framework.pagination import PageNumberPagination -from .serializer import TestRecordSerializer, TestRecordDetailSerializer +from models import UserMachine +from .serializer import TestRecordSerializer, TestRecordDetailSerializer, LinuxInfoSerializer, MetaInfoSerializer, \ + PGInfoSerializer, CreateTestRecordSerializer from rest_framework.views import APIView from rest_framework.decorators import api_view from rest_framework.response import Response @@ -12,7 +14,9 @@ from rest_framework import mixins from rest_framework import status from rest_framework import generics from rest_framework import viewsets -from .models import TestRecord +from .models import TestRecord, LinuxInfo, MetaInfo, PGInfo, TestBranch +import json + class StandardResultsSetPagination(PageNumberPagination): page_size = 10 @@ -28,6 +32,7 @@ class TestRecordListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): serializer_class = TestRecordSerializer pagination_class = StandardResultsSetPagination + class TestRecordDetailViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): """ List test records @@ -49,13 +54,46 @@ def TestRecordCreate(request, format=None): # return Response(serializers.data, status=status.HTTP_201_CREATED) data = request.data - # def byteify(input): - # if isinstance(input, dict): - # return {byteify(key): byteify(value) for key, value in input.iteritems()} - # elif isinstance(input, list): - # return [byteify(element) for element in input] - # elif isinstance(input, unicode): - # return input.encode('utf-8') - # else: - # return input - return Response((data), status=status.HTTP_200_OK) + print type(data[0]) + json_data = json.dumps(data[0], encoding="UTF-8", ensure_ascii=False) + json_data = json.loads(json_data, encoding="UTF-8") + # obj = data[0].pgbench + # jsLoads = json.loads(data[0]) + + linux_data = json_data['linux'] + linuxInfo = LinuxInfoSerializer(data=linux_data) + linuxInfo.is_valid() + linuxInfoRet = linuxInfo.save() + + meta_data = json_data['meta'] + metaInfo = MetaInfoSerializer(data=meta_data) + metaInfo.is_valid() + metaInfoRet = metaInfo.save() + + # pg_data = json_data['postgres'] + pg_data = { + 'pg_branch':1 + } + pgInfo = PGInfoSerializer(data=pg_data) + pgInfo.is_valid() + pgInfoRet = pgInfo.save() + + test_record_data = { + 'pg_info': pgInfoRet.id, + 'linux_info': linuxInfoRet.id, + 'meta_info': metaInfoRet.id, + 'test_machine_id': 1, + 'test_desc': 'here is desc' + } + testRecord = CreateTestRecordSerializer(data=test_record_data) + testRecord.is_valid() + print testRecord.is_valid() + print testRecord + testRecord.save() + + # ro = json_data['pgbench']['ro'] + # print(type(ro)) + # for scale, v in ro.iteritems(): + # print "ro[%s]=" % scale, v + msg = 'upload ok' + return Response(msg, status=status.HTTP_200_OK) -- 2.39.5