add CreateTestRecordSerializer
authorHongyuan Ma <CS_MaleicAcid@163.com>
Thu, 14 Jun 2018 14:28:13 +0000 (22:28 +0800)
committerHongyuan Ma <CS_MaleicAcid@163.com>
Thu, 14 Jun 2018 14:28:13 +0000 (22:28 +0800)
client/post-example/update.py
web/apps/test_records/models.py
web/apps/test_records/serializer.py
web/apps/test_records/views.py

index 7bb12cb9b088d25d087e63f5d16b69cfdbffd23c..9007ad433d0812ad7707dfeccd3da2c2046c7cd0 100644 (file)
@@ -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:
index 51c8194a01b83fcec7ef5c6c5a3c1c2854183c08..0006003d9c19d33b322ccc668c304bb8329f8ace 100644 (file)
@@ -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"
index ae0711ae83df503ae3a61623bb7fe23eb24174e6..50f595b6acd87009ebea8196cec5eb10c559823d 100644 (file)
@@ -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):
 
     '''
index 741856f371c9e1b3fc25dfaef8af13888dfc654c..53acad9fb588a26572f059b2f9af1063e6a45dab 100644 (file)
@@ -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)