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 <michael.g.wood@intel.com
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Michael Wood 2015-02-05 18:19:57 +00:00 committed by Richard Purdie
parent a7ab4d0314
commit 203ac2937c
1 changed files with 22 additions and 11 deletions

View File

@ -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',