From 203ac2937c80b4e5960ea981971d9dbf4ddcd564 Mon Sep 17 00:00:00 2001 From: Michael Wood Date: Thu, 5 Feb 2015 18:19:57 +0000 Subject: bitbake: toaster: all Machines exclude de-prioritised layer source items If a duplicate layer exists from another layer source and provides a machine we don't want to show it if that layer comes from a low priority layer source. (Bitbake rev: ae52f478bbf693b85da21f64835e70825968a305) Signed-off-by: Michael Wood --- bitbake/lib/toaster/toastergui/views.py | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) (limited to 'bitbake/lib') diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py index 7dc4bbd5a2..88d59f4136 100755 --- a/bitbake/lib/toaster/toastergui/views.py +++ b/bitbake/lib/toaster/toastergui/views.py @@ -203,7 +203,6 @@ def _get_search_results(search_term, queryset, model): search_objects.append(reduce(operator.or_, q_map)) search_object = reduce(operator.and_, search_objects) - print "search objects", search_object queryset = queryset.filter(search_object) return queryset @@ -2788,18 +2787,25 @@ if toastermain.settings.MANAGED: (filter_string, search_term, ordering_string) = _search_tuple(request, Machine) queryset_all = Machine.objects.all() + queryset_all = queryset_all.prefetch_related('layer_version') + queryset_all = queryset_all.prefetch_related('layer_source') prj = Project.objects.get(pk = request.session['project_id']) compatible_layers = prj.compatible_layerversions() - # Make sure we only show machines / layers which are compatible with the current project + + # FILTERS SECTION + + # Make sure we only show machines / layers which are compatible + # with the current project queryset_all = queryset_all.filter(layer_version__in=compatible_layers) project_layers = ProjectLayer.objects.filter(project_id=request.session['project_id']).values_list('layercommit',flat=True) by_pass_filter_string = False - # "special" filters identified by these valid filter strings we + # "special" filters identified by these valid filter strings we # by pass the usual filter applying method because we're filtering using # a subquery done by project_layers + if "name:inprj" in filter_string: queryset_all = queryset_all.filter(layer_version__in=project_layers) by_pass_filter_string = True @@ -2808,20 +2814,25 @@ if toastermain.settings.MANAGED: queryset_all = queryset_all.exclude(layer_version__in=project_layers) by_pass_filter_string = True - queryset_with_search = _get_queryset(Machine, queryset_all, None, search_term, ordering_string, '-name') + selected_filter_count = { + 'inprj' : queryset_all.filter(layer_version__in=project_layers).count(), + 'notinprj' : queryset_all.exclude(layer_version__in=project_layers).count() + } + + # END FILTERS if by_pass_filter_string: queryset = _get_queryset(Machine, queryset_all, None, search_term, ordering_string, '-name') else: queryset = _get_queryset(Machine, queryset_all, filter_string, search_term, ordering_string, '-name') - selected_filter_count = { - 'inprj' : queryset.filter(layer_version__in=project_layers).count(), - 'notinprj' : queryset.exclude(layer_version__in=project_layers).count() - } - + # Now we need to weed out the layers which will appear as duplicated + # because they're from a layer source which doesn't need to be used + for machine in queryset: + to_rm = machine.layer_version.get_equivalents_wpriority(prj)[1:] + if len(to_rm) > 0: + queryset = queryset.exclude(layer_version__in=to_rm) - # retrieve the objects that will be displayed in the table; machines a paginator and gets a page range to display machine_info = _build_page_range(Paginator(queryset, request.GET.get('count', 10)),request.GET.get('page', 1)) context = { @@ -2854,7 +2865,7 @@ if toastermain.settings.MANAGED: 'filter': { 'class': 'machine', 'label': 'Show:', - 'options': map(lambda x: (x.name, 'layer_source__pk:' + str(x.id), queryset_with_search.filter(layer_source__pk = x.id).count() ), LayerSource.objects.all()), + 'options': map(lambda x: (x.name, 'layer_source__pk:' + str(x.id), queryset.filter(layer_source__pk = x.id).count() ), LayerSource.objects.all()), } }, { 'name': 'Revision', -- cgit v1.2.3-54-g00ecf