diff options
Diffstat (limited to 'Post')
-rw-r--r-- | Post/views.py | 53 |
1 files changed, 32 insertions, 21 deletions
diff --git a/Post/views.py b/Post/views.py index 0455baa..7f2cffb 100644 --- a/Post/views.py +++ b/Post/views.py @@ -12,7 +12,7 @@ from django.shortcuts import get_object_or_404 from django.shortcuts import HttpResponse, render from django.views.decorators.csrf import csrf_exempt from django.shortcuts import redirect -from Post.models import BuildFailure +from Post.models import BuildFailure, Build, ErrorType from parser import Parser from django.conf import settings from createStatistics import Statistics @@ -83,16 +83,32 @@ def addData(request, return_json=False): def apply_filter(context, items, name, value): # Look up the field name for filtering # e.g. filter_pair = (RECIPE, value) - filter_pair = None - - for col in context['tablecols']: - if col['clclass'] == name: - filter_pair = (col['field'], value) + filters = [] + + if name == 'error_type': + filters.append(('BUILD__ERROR_TYPE', value)) + elif name == 'failure': + # failure column when is recipe error_type + # is build "recipe: task" otherwise only + # "task" + if ':' in value: + recipe = value.split(':')[0].strip() + task = value.split(':')[1].strip() + filters.append(('TASK', task)) + filters.append(('RECIPE', recipe)) + else: + filters.append(('TASK', value)) + else: + for col in context['tablecols']: + if col['clclass'] == name: + filters.append((col['field'], value)) - if not filter_pair: + if not filters: return items - items = items.filter(filter_pair) + for filter_pair in filters: + items = items.filter(filter_pair) + return items def default(request): @@ -128,24 +144,21 @@ def search(request, mode=results_mode.LATEST, **kwargs): 'results_mode' : results_mode, 'mode' : mode, 'args' : kwargs, + 'error_types': ErrorType, 'tablecols' : [ {'name': 'Submitted on', 'clclass' : 'submitted_on', 'field' : 'BUILD__DATE', 'disable_toggle' : True, }, - {'name': 'Recipe', - 'clclass' : 'recipe', - 'field' : 'RECIPE', + {'name': 'Error type', + 'clclass' : 'error_type', + 'field' : 'BUILD__ERROR_TYPE', 'disable_toggle' : True, }, - {'name': 'Recipe version', - 'clclass': 'recipe_version', - 'field' : 'RECIPE_VERSION', - }, - {'name': 'Task', - 'clclass': 'task', - 'field' : 'TASK', + {'name': 'Failure', + 'clclass': 'failure', + 'field': 'TASK', 'disable_toggle' : True, }, {'name': 'Machine', @@ -156,7 +169,6 @@ def search(request, mode=results_mode.LATEST, **kwargs): {'name': 'Distro', 'clclass': 'distro', 'field': 'BUILD__DISTRO', - 'disable_toggle' : True, }, {'name': 'Build system', 'clclass': 'build_sys', @@ -190,7 +202,6 @@ def search(request, mode=results_mode.LATEST, **kwargs): if request.GET.has_key("filter") and request.GET.has_key("type"): items = apply_filter(context, items, request.GET['type'], request.GET['filter']) - if mode == results_mode.SPECIAL_SUBMITTER and hasattr(settings,"SPECIAL_SUBMITTER"): #Special submitter mode see settings.py to enable name = settings.SPECIAL_SUBMITTER['name'] @@ -249,7 +260,7 @@ def details(request, fail_id): except ObjectDoesNotExist: build_failure = None - context = {'detail' : build_failure } + context = {'detail' : build_failure, 'error_types' : ErrorType } return render(request, "error-details.html", context) |