summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/toastergui/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/toaster/toastergui/views.py')
-rwxr-xr-xbitbake/lib/toaster/toastergui/views.py33
1 files changed, 22 insertions, 11 deletions
diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py
index 7dc4bbd..88d59f4 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',
OpenPOWER on IntegriCloud