blob: 26b44b69c8144f34ad1b60f40a5376507495e133 [file] [log] [blame]
# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Entry point for django urls code to invoke views."""
import datetime
from django.http import HttpResponse
from django.shortcuts import render_to_response
import autotest_lib.frontend.croschart.validators as validators
import autotest_lib.frontend.croschart.chartmodels as chartmodels
import autotest_lib.frontend.croschart.chartviews as chartviews
import autotest_lib.frontend.croschart.reportviews as reportviews
from autotest_lib.frontend.croschart.charterrors import ChartInputError
VLISTS = {
'chart': {
'from_build': [validators.CrosChartValidator,
validators.BuildRangeValidator],
'from_date': [validators.CrosChartValidator,
validators.DateRangeValidator],
'interval': [validators.CrosChartValidator,
validators.IntervalRangeValidator]},
'chartreport': {
'from_build': [validators.CrosReportValidator,
validators.BuildRangeValidator],
'from_date': [validators.CrosReportValidator,
validators.DateRangeValidator],
'interval': [validators.CrosReportValidator,
validators.IntervalRangeValidator]}}
def ValidateParameters(request, vlist):
"""Returns a list of appropriate validators."""
# Catches when no interval supplied.
for range_key in vlist.keys() + [None]:
if request.GET.get(range_key, None):
break
if not range_key:
raise ChartInputError('One interval-type parameter must be supplied.')
validators.Validate(request, vlist[range_key])
if range_key == 'interval':
salt = datetime.date.isoformat(datetime.date.today())
else:
salt = None
return salt
def PlotChart(request):
"""Plot the requested chart from /chart?..."""
try:
salt = ValidateParameters(request, VLISTS['chart'])
return chartviews.PlotChart(
request, 'plot_chart.html',
chartmodels.GetRangedOneKeyByBuildLinechartData, salt)
except ChartInputError as e:
tpl_hostname = request.get_host()
return render_to_response('plot_syntax.html', locals())
def PlotChartDiff(request):
"""Plot the requested chart from /chartdiff?... and a split diff view."""
try:
salt = ValidateParameters(request, VLISTS['chart'])
return chartviews.PlotChart(
request, 'plot_chartdiff.html',
chartmodels.GetRangedOneKeyByBuildLinechartData, salt)
except ChartInputError as e:
tpl_hostname = request.get_host()
return render_to_response('plot_syntax.html', locals())
def PlotChartReport(request):
"""Plot the requested report from /report?..."""
try:
ValidateParameters(request, VLISTS['chartreport'])
return reportviews.PlotReport(request, 'plot_chartreport.html')
except ChartInputError as e:
tpl_hostname = request.get_host()
return render_to_response('plot_syntax.html', locals())