[pypy-svn] r69311 - in codespeed: . documentation pyspeed/codespeed pyspeed/fixtures tools
tobami at codespeak.net
tobami at codespeak.net
Mon Nov 16 01:01:03 CET 2009
Author: tobami
Date: Mon Nov 16 01:01:01 2009
New Revision: 69311
Added:
codespeed/documentation/
codespeed/documentation/Backend_DB.mwb (contents, props changed)
codespeed/documentation/Backend_DB.png
- copied unchanged from r69108, codespeed/Backend_DB.png
codespeed/tools/
codespeed/tools/save_result.py
Removed:
codespeed/Backend_DB.png
codespeed/pyspeed/fixtures/fixtures.json
Modified:
codespeed/pyspeed/codespeed/admin.py
codespeed/pyspeed/codespeed/models.py
codespeed/pyspeed/codespeed/tests.py
codespeed/pyspeed/codespeed/urls.py
codespeed/pyspeed/codespeed/views.py
Log:
Add view to save result data.
Add unittest for the view
Add script to save result data
Added: codespeed/documentation/Backend_DB.mwb
==============================================================================
Binary file. No diff available.
Modified: codespeed/pyspeed/codespeed/admin.py
==============================================================================
--- codespeed/pyspeed/codespeed/admin.py (original)
+++ codespeed/pyspeed/codespeed/admin.py Mon Nov 16 01:01:01 2009
@@ -3,7 +3,7 @@
from django.contrib import admin
class RevisionAdmin(admin.ModelAdmin):
- list_display = ('number', 'project', 'tag')
+ list_display = ('number', 'project', 'tag', 'date')
admin.site.register(Revision, RevisionAdmin)
Modified: codespeed/pyspeed/codespeed/models.py
==============================================================================
--- codespeed/pyspeed/codespeed/models.py (original)
+++ codespeed/pyspeed/codespeed/models.py Mon Nov 16 01:01:01 2009
@@ -26,6 +26,7 @@
TYPES = (
('T', 'Trunk'),
('D', 'Debug'),
+ ('P', 'Python'),
('M', 'Multilanguage'),
)
def __unicode__(self):
Modified: codespeed/pyspeed/codespeed/tests.py
==============================================================================
--- codespeed/pyspeed/codespeed/tests.py (original)
+++ codespeed/pyspeed/codespeed/tests.py Mon Nov 16 01:01:01 2009
@@ -1,35 +1,79 @@
# -*- coding: utf-8 -*-
-"""
-This file demonstrates two different styles of tests (one doctest and one
-unittest). These will both pass when you run "manage.py test".
-
-Replace these with more appropriate tests for your application.
-"""
-
from django.test import TestCase
-import urllib, urllib2
-import simplejson
from datetime import datetime
+from django.test.client import Client
+from pyspeed.codespeed.models import Benchmark, Revision, Interpreter, Environment, Result
class AddResultTest(TestCase):
+ def setUp(self):
+ self.path = '/result/add/'
+ self.client = Client()
+ self.e = Environment(name='Dual Core Linux', cpu='Core 2 Duo 8200')
+ self.e.save()
+ self.cdate = datetime.today()
+ self.data = {
+ 'revision_number': '23232',
+ 'revision_project': 'pypy',
+ 'interpreter_name': 'pypy-c',
+ 'interpreter_coptions': 'gc=Böhm',
+ 'benchmark_name': 'Richards',
+ 'environment': 'Dual Core Linux',
+ 'result_key': 'total',
+ 'result_value': 456,
+ 'result_date': self.cdate,
+ }
def test_add_result(self):
"""
Add result data
"""
- data = {
- 'revision_number': '23232',
- 'revision_project': 'pypy',
- 'interpreter_name': 'pypy-c',
- 'interpreter_coptions': 'gc=Boehm',
- 'benchmark_name': 'Richards',
- 'environment': 1,
- 'result_key': 'total',
- 'result_value': 456,
- 'result_date': datetime.today(),
- }
- params = urllib.urlencode(data)
- f = urllib2.urlopen('http://localhost:8000/pypy/result/add/', params)
- data = f.read()
- print "Server response:", data
- f.close()
+ response = self.client.post(self.path, self.data)
+ self.assertEquals(response.status_code, 200)
+ self.assertEquals(response.content, "Result data saved succesfully")
+ e = Environment.objects.get(name='Dual Core Linux')
+ b = Benchmark.objects.get(name='Richards')
+ r = Revision.objects.get(number='23232', project='pypy')
+ i = Interpreter.objects.get(name='pypy-c', coptions='gc=Böhm')
+ self.assertTrue(Result.objects.get(
+ key='total',
+ value=456,
+ date=self.cdate,
+ revision=r,
+ interpreter=i,
+ benchmark=b,
+ environment=e
+ ))
+ def test_bad_environment(self):
+ """
+ Add result associated with non-existing environment
+ """
+ no_name = 'Dual Core Linux1'
+ self.data['environment'] = no_name
+ response = self.client.post(self.path, self.data)
+ self.assertEquals(response.status_code, 404)
+ self.assertEquals(response.content, "Environment " + no_name + " not found")
+ self.data['environment'] = 'Dual Core Linux'
+
+ def test_empty_argument(self):
+ """
+ Make POST request with an empty argument.
+ """
+ for key in self.data:
+ backup = self.data[key]
+ self.data[key] = ""
+ response = self.client.post(self.path, self.data)
+ self.assertEquals(response.status_code, 400)
+ self.assertEquals(response.content, 'Key "' + key + '" empty in request')
+ self.data[key] = backup
+
+ def test_missing_argument(self):
+ """
+ Make POST request with a missing argument.
+ """
+ for key in self.data:
+ backup = self.data[key]
+ del(self.data[key])
+ response = self.client.post(self.path, self.data)
+ self.assertEquals(response.status_code, 400)
+ self.assertEquals(response.content, 'Key "' + key + '" missing from request')
+ self.data[key] = backup
Modified: codespeed/pyspeed/codespeed/urls.py
==============================================================================
--- codespeed/pyspeed/codespeed/urls.py (original)
+++ codespeed/pyspeed/codespeed/urls.py Mon Nov 16 01:01:01 2009
@@ -33,7 +33,7 @@
(r'^pypy/result/$', list_detail.object_list, result_list),
(r'^pypy/revision/$', list_detail.object_list, revision_list),
# URL interface for adding results
- (r'^pypy/result/add/$', 'addresult'),
+ (r'^result/add/$', 'addresult'),
)
if settings.DEBUG:
Modified: codespeed/pyspeed/codespeed/views.py
==============================================================================
--- codespeed/pyspeed/codespeed/views.py (original)
+++ codespeed/pyspeed/codespeed/views.py Mon Nov 16 01:01:01 2009
@@ -1,20 +1,53 @@
# -*- coding: utf-8 -*-
-#from django.shortcuts import render_to_response
-#from django.views.generic.list_detail import object_list
-from pyspeed.codespeed.models import Revision, Result, Interpreter, Benchmark
-#from pyspeed import settings
-from django.http import HttpResponse, HttpResponseNotAllowed
from django.shortcuts import get_object_or_404
+from pyspeed.codespeed.models import Revision, Result, Interpreter, Benchmark, Environment
+from django.http import HttpResponse, Http404, HttpResponseBadRequest, HttpResponseNotFound
def addresult(request):
if request.method != 'POST':
return HttpResponseNotAllowed('POST')
data = request.POST
- print data
- ben = get_object_or_404(Benchmark, name=data["benchmark_name"])
- print "benchmark:", ben
- rev = get_object_or_404(Revision, number=data["revision_number"], project=data["revision_project"])
- print "revision object:", rev
- inter = get_object_or_404(Interpreter, name=data["interpreter_name"], coptions=data["interpreter_coptions"])
- print inter
- return HttpResponse("Data saved succesfully")
+
+ mandatory_data = [
+ 'revision_number',
+ 'revision_project',
+ 'interpreter_name',
+ 'interpreter_coptions',
+ 'benchmark_name',
+ 'environment',
+ 'result_key',
+ 'result_value',
+ 'result_date',
+ ]
+ for key in mandatory_data:
+ if data.has_key(key):
+ if data[key] == "":
+ return HttpResponseBadRequest('Key "' + key + '" empty in request')
+ else: return HttpResponseBadRequest('Key "' + key + '" missing from request')
+ b, created = Benchmark.objects.get_or_create(name=data["benchmark_name"])
+ if data.has_key('benchmark_type'):
+ b.benchmark_type = data['benchmark_type']
+ b.save()
+ rev, created = Revision.objects.get_or_create(number=data["revision_number"], project=data["revision_project"])
+ if data.has_key('revision_date'):
+ rev.date = data['revision_date']
+ rev.save()
+ inter, created = Interpreter.objects.get_or_create(name=data["interpreter_name"], coptions=data["interpreter_coptions"])
+ try:
+ e = get_object_or_404(Environment, name=data["environment"])
+ except Http404:
+ return HttpResponseNotFound("Environment " + data["environment"] + " not found")
+ result_type = "T"
+ if data.has_key('result_type'):
+ result_type = data['result_type']
+ r, created = Result.objects.get_or_create(
+ key=data["result_key"],
+ value=data["result_value"],
+ result_type=result_type,
+ date=data["result_date"],
+ revision=rev,
+ interpreter=inter,
+ benchmark=b,
+ environment=e
+ )
+ return HttpResponse("Result data saved succesfully")
Added: codespeed/tools/save_result.py
==============================================================================
--- (empty file)
+++ codespeed/tools/save_result.py Mon Nov 16 01:01:01 2009
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+from datetime import datetime
+import urllib, urllib2
+
+BASEURL = 'http://localhost:8080/'
+
+def add_result():
+ data = {
+ 'revision_number': '23238',
+ 'revision_project': 'pypy',
+ 'revision_date': "2009-11-15 18:11:29", # Optional
+ 'interpreter_name': 'pypy-c-jit',
+ 'interpreter_coptions': 'gc=Boehm',
+ 'benchmark_name': 'Richards',
+ 'benchmark_type': 'P',# Optional. Default Trunk. (Trunk, Debug, Python, Multilanguage)
+ 'environment': "Dual Core Linux",
+ 'result_key': 'total',
+ 'result_value': 400,
+ 'result_type': 'M',# Optional. Default Time in milliseconds. (Time, Memory, Score)
+ 'result_date': datetime.today(),
+ }
+
+ # TODO add HTTPError try
+ params = urllib.urlencode(data)
+ f = urllib2.urlopen(BASEURL + 'result/add/', params)
+ response = f.read()
+ print "Server response:", response
+ f.close()
+
+if __name__ == "__main__":
+ add_result()
More information about the Pypy-commit
mailing list