[bitbake-devel] [PATCH 23/27] toaster: all Machines exclude de-prioritised layer source items

Alex DAMIAN alexandru.damian at intel.com
Mon Feb 9 18:01:53 UTC 2015


From: Michael Wood <michael.g.wood at intel.com>

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.

Signed-off-by: Michael Wood <michael.g.wood at intel.com
---
 lib/toaster/toastergui/views.py | 33 ++++++++++++++++++++++-----------
 1 file changed, 22 insertions(+), 11 deletions(-)

diff --git a/lib/toaster/toastergui/views.py b/lib/toaster/toastergui/views.py
index 7dc4bbd..88d59f4 100755
--- a/lib/toaster/toastergui/views.py
+++ b/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',
-- 
1.9.1




More information about the bitbake-devel mailing list