Skip to content

Commit c85040a

Browse files
Moved get_benchmark_results to views_data.py
get_benchmark_results now relies on calling function to catch any ObjectNotFound exception.
1 parent 78fd40a commit c85040a

2 files changed

Lines changed: 90 additions & 126 deletions

File tree

codespeed/views.py

Lines changed: 7 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import django
77

88
from django.core.urlresolvers import reverse
9-
from django.core.exceptions import ValidationError
9+
from django.core.exceptions import ValidationError, ObjectDoesNotExist
1010
from django.http import HttpResponse, Http404, HttpResponseBadRequest,\
1111
HttpResponseNotFound
1212
from django.shortcuts import get_object_or_404, render_to_response
@@ -18,7 +18,8 @@
1818
from .models import (Environment, Report, Project, Revision, Result,
1919
Executable, Benchmark, Branch)
2020
from .views_data import (get_default_environment, getbaselineexecutables,
21-
getdefaultexecutable, getcomparisonexes)
21+
getdefaultexecutable, getcomparisonexes,
22+
get_benchmark_results)
2223
from .results import save_result, create_report_if_enough_data
2324
from . import commits
2425
from .validators import validate_results_request
@@ -748,124 +749,6 @@ def django_has_content_type():
748749
(django.VERSION[0] == 1 and django.VERSION[1] >= 6))
749750

750751

751-
def get_benchmark_results(data):
752-
try:
753-
environment = Environment.objects.get(name=data['env'])
754-
project = Project.objects.get(name=data['proj'])
755-
executable = Executable.objects.get(name=data['exe'], project=project)
756-
branch = Branch.objects.get(name=data['branch'], project=project)
757-
benchmark = Benchmark.objects.get(name=data['ben'])
758-
except Environment.DoesNotExist:
759-
return None, HttpResponseNotFound(
760-
'Environment "' + data['env'] + '" does not exist!')
761-
except Project.DoesNotExist:
762-
return None, HttpResponseNotFound(
763-
'Project "' + data['proj'] + '" does not exist!')
764-
except Executable.DoesNotExist:
765-
return None, HttpResponseNotFound(
766-
'Executable "' + data['exe'] + '" does not exist!')
767-
except Branch.DoesNotExist:
768-
return None, HttpResponseNotFound(
769-
'Branch "' + data['branch'] + '" does not exist!')
770-
except Benchmark.DoesNotExist:
771-
return None, HttpResponseNotFound(
772-
'Benchmark "' + data['ben'] + '" does not exist!')
773-
774-
number_of_revs = int(data.get('revs', 10))
775-
776-
baseline_commit_name = (data['base_commit'] if 'base_commit' in data
777-
else None)
778-
relative_results = (
779-
('relative' in data and data['relative'] in ['1', 'yes']) or
780-
baseline_commit_name is not None)
781-
782-
result_query = Result.objects.filter(
783-
benchmark=benchmark
784-
).filter(
785-
environment=environment
786-
).filter(
787-
executable=executable
788-
).filter(
789-
revision__project=project
790-
).filter(
791-
revision__branch=branch
792-
).select_related(
793-
"revision"
794-
).order_by('-date')[:number_of_revs]
795-
796-
if len(result_query) == 0:
797-
return None, HttpResponseNotFound("No results were found!")
798-
799-
result_list = [item for item in result_query]
800-
result_list.reverse()
801-
802-
if relative_results:
803-
ref_value = result_list[0].value
804-
805-
if baseline_commit_name is not None:
806-
baseline_env = environment
807-
baseline_proj = project
808-
baseline_exe = executable
809-
baseline_branch = branch
810-
811-
try:
812-
if 'base_env' in data:
813-
baseline_env = Environment.objects.get(name=data['base_env'])
814-
if 'base_proj' in data:
815-
baseline_proj = Project.objects.get(name=data['base_proj'])
816-
if 'base_exe' in data:
817-
baseline_exe = Executable.objects.get(name=data['base_exe'],
818-
project=baseline_proj)
819-
if 'base_branch' in data:
820-
baseline_branch = Branch.objects.get(name=data['base_branch'],
821-
project=baseline_proj)
822-
except Environment.DoesNotExist:
823-
return None, HttpResponseNotFound(
824-
'Baseline environment "' + data['base_env'] +
825-
'" does not exist!')
826-
except Project.DoesNotExist:
827-
return None, HttpResponseNotFound(
828-
'Baseline project "' + data['base_proj'] +
829-
'" does not exist!')
830-
except Executable.DoesNotExist:
831-
return None, HttpResponseNotFound(
832-
'Baseline executable "' + data['base_exe'] +
833-
'"does not exist!')
834-
except Branch.DoesNotExist:
835-
return None, HttpResponseNotFound(
836-
'Baseline branch "' + data['base_branch'] +
837-
'" does not exist!')
838-
839-
base_data = Result.objects.get(
840-
benchmark=benchmark,
841-
environment=baseline_env,
842-
executable=baseline_exe,
843-
revision__project=baseline_proj,
844-
revision__branch=baseline_branch,
845-
revision__commitid=baseline_commit_name)
846-
847-
if base_data:
848-
ref_value = base_data.value
849-
else:
850-
return None, HttpResponseNotFound(
851-
'Result for revision "' + baseline_commit +
852-
'" does not exist !')
853-
854-
if relative_results:
855-
for element in result_list:
856-
element.value = (100 * (element.value - ref_value)) / ref_value
857-
858-
return {
859-
'environment': environment,
860-
'project': project,
861-
'executable': executable,
862-
'branch': branch,
863-
'benchmark': benchmark,
864-
'results': result_list,
865-
'relative': relative_results,
866-
}, None
867-
868-
869752
@require_GET
870753
def makeimage(request):
871754
data = request.GET
@@ -875,10 +758,10 @@ def makeimage(request):
875758
except ValidationError as err:
876759
return HttpResponseBadRequest(str(err))
877760

878-
result_data, error = get_benchmark_results(data)
879-
880-
if error is not None:
881-
return error
761+
try:
762+
result_data = get_benchmark_results(data)
763+
except ObjectDoesNotExist as err:
764+
return HttpResponseNotFound(str(err))
882765

883766
canvas_width = int(data['width']) if 'width' in data else 600
884767
canvas_height = int(data['height']) if 'height' in data else 500

codespeed/views_data.py

Lines changed: 83 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
from __future__ import absolute_import
33

44
from django.conf import settings
5-
6-
from codespeed.models import Executable, Revision, Project, Branch
5+
from django.core.exceptions import ObjectDoesNotExist
6+
from codespeed.models import Executable, Revision, Project, Branch,\
7+
Environment, Benchmark, Result
78

89

910
def get_default_environment(enviros, data, multi=False):
@@ -147,3 +148,83 @@ def getcomparisonexes():
147148
all_executables[proj] = executables
148149
exekeys += executablekeys
149150
return all_executables, exekeys
151+
152+
153+
def get_benchmark_results(data):
154+
environment = Environment.objects.get(name=data['env'])
155+
project = Project.objects.get(name=data['proj'])
156+
executable = Executable.objects.get(name=data['exe'], project=project)
157+
branch = Branch.objects.get(name=data['branch'], project=project)
158+
benchmark = Benchmark.objects.get(name=data['ben'])
159+
160+
number_of_revs = int(data.get('revs', 10))
161+
162+
baseline_commit_name = (data['base_commit'] if 'base_commit' in data
163+
else None)
164+
relative_results = (
165+
('relative' in data and data['relative'] in ['1', 'yes']) or
166+
baseline_commit_name is not None)
167+
168+
result_query = Result.objects.filter(
169+
benchmark=benchmark
170+
).filter(
171+
environment=environment
172+
).filter(
173+
executable=executable
174+
).filter(
175+
revision__project=project
176+
).filter(
177+
revision__branch=branch
178+
).select_related(
179+
"revision"
180+
).order_by('-date')[:number_of_revs]
181+
182+
if len(result_query) == 0:
183+
raise ObjectDoesNotExist("No results were found!")
184+
185+
result_list = [item for item in result_query]
186+
result_list.reverse()
187+
188+
if relative_results:
189+
ref_value = result_list[0].value
190+
191+
if baseline_commit_name is not None:
192+
baseline_env = environment
193+
baseline_proj = project
194+
baseline_exe = executable
195+
baseline_branch = branch
196+
197+
if 'base_env' in data:
198+
baseline_env = Environment.objects.get(name=data['base_env'])
199+
if 'base_proj' in data:
200+
baseline_proj = Project.objects.get(name=data['base_proj'])
201+
if 'base_exe' in data:
202+
baseline_exe = Executable.objects.get(name=data['base_exe'],
203+
project=baseline_proj)
204+
if 'base_branch' in data:
205+
baseline_branch = Branch.objects.get(name=data['base_branch'],
206+
project=baseline_proj)
207+
208+
base_data = Result.objects.get(
209+
benchmark=benchmark,
210+
environment=baseline_env,
211+
executable=baseline_exe,
212+
revision__project=baseline_proj,
213+
revision__branch=baseline_branch,
214+
revision__commitid=baseline_commit_name)
215+
216+
ref_value = base_data.value
217+
218+
if relative_results:
219+
for element in result_list:
220+
element.value = (100 * (element.value - ref_value)) / ref_value
221+
222+
return {
223+
'environment': environment,
224+
'project': project,
225+
'executable': executable,
226+
'branch': branch,
227+
'benchmark': benchmark,
228+
'results': result_list,
229+
'relative': relative_results,
230+
}

0 commit comments

Comments
 (0)