Move part of the functionality of the filter functions to the Table
widget. We don't need to implement it in each subclass.

Signed-off-by: Michael Wood <[email protected]>
---
 bitbake/lib/toaster/toastergui/tables.py  | 61 +++++++++++++++++++------------
 bitbake/lib/toaster/toastergui/widgets.py |  5 ++-
 2 files changed, 40 insertions(+), 26 deletions(-)

diff --git a/bitbake/lib/toaster/toastergui/tables.py 
b/bitbake/lib/toaster/toastergui/tables.py
index 74af507..6bbf0d7 100644
--- a/bitbake/lib/toaster/toastergui/tables.py
+++ b/bitbake/lib/toaster/toastergui/tables.py
@@ -31,19 +31,11 @@ from django.views.generic import TemplateView
 class ProjectFiltersMixin(object):
     """Common mixin for recipe, machine in project filters"""
 
-    def filter_in_project(self, count_only=False):
-        query = self.queryset.filter(layer_version__in=self.project_layers)
-        if count_only:
-            return query.count()
-
-        self.queryset = query
+    def filter_in_project(self):
+        return self.queryset.filter(layer_version__in=self.project_layers)
 
-    def filter_not_in_project(self, count_only=False):
-        query = self.queryset.exclude(layer_version__in=self.project_layers)
-        if count_only:
-            return query.count()
-
-        self.queryset = query
+    def filter_not_in_project(self):
+        return self.queryset.exclude(layer_version__in=self.project_layers)
 
 class LayersTable(ToasterTable):
     """Table of layers in Toaster"""
@@ -75,19 +67,10 @@ class LayersTable(ToasterTable):
                         ])
 
     def filter_in_project(self, count_only=False):
-        query = self.queryset.filter(projectlayer__in=self.project_layers)
-        if count_only:
-            return query.count()
-
-        self.queryset = query
+        return self.queryset.filter(projectlayer__in=self.project_layers)
 
     def filter_not_in_project(self, count_only=False):
-        query = self.queryset.exclude(projectlayer__in=self.project_layers)
-        if count_only:
-            return query.count()
-
-        self.queryset = query
-
+        return self.queryset.exclude(projectlayer__in=self.project_layers)
 
     def setup_queryset(self, *args, **kwargs):
         prj = Project.objects.get(pk = kwargs['pid'])
@@ -631,4 +614,34 @@ class SelectPackagesTable(ToasterTable):
                         help_text="Use the add and remove buttons to modify "
                         "the package content of you custom image",
                         static_data_name="add_rm_pkg_btn",
-                        static_data_template='{% include "pkg_add_rm_btn.html" 
%}')
+                        static_data_template='{% include "pkg_add_rm_btn.html" 
%}',
+                        filter_name="in_current_image"
+                        )
+
+    def setup_filters(self, *args, **kwargs):
+        project = Project.objects.get(pk=kwargs['pid'])
+        self.project_layers = ProjectLayer.objects.filter(project=project)
+
+
+        self.add_filter(title="Filter by added packages",
+                        name="in_current_image",
+                        filter_actions=[
+                            self.make_filter_action(
+                                "in_image",
+                                "Packages in %s" % self.cust_recipe.name,
+                                self.filter_in_image),
+                            self.make_filter_action(
+                                "not_in_image",
+                                "Packages not added to %s" %
+                                self.cust_recipe.name,
+                                self.filter_not_in_image)
+                        ])
+
+    def filter_in_image(self, count_only=False):
+        return self.queryset.filter(
+            pk__in=self.static_context_extra['current_packages'])
+
+
+    def filter_not_in_image(self, count_only=False):
+        return self.queryset.exclude(
+            pk__in=self.static_context_extra['current_packages'])
diff --git a/bitbake/lib/toaster/toastergui/widgets.py 
b/bitbake/lib/toaster/toastergui/widgets.py
index 6bb3889..aeaa26a 100644
--- a/bitbake/lib/toaster/toastergui/widgets.py
+++ b/bitbake/lib/toaster/toastergui/widgets.py
@@ -113,7 +113,8 @@ class ToasterTable(TemplateView):
                               cls=DjangoJSONEncoder)
         else:
             for actions in self.filters[name]['filter_actions']:
-                actions['count'] = 
self.filter_actions[actions['name']](count_only=True)
+                actions['count'] = \
+                        self.filter_actions[actions['name']]().count()
 
             # Add the "All" items filter action
             self.filters[name]['filter_actions'].insert(0, {
@@ -222,7 +223,7 @@ class ToasterTable(TemplateView):
             return
 
         try:
-            self.filter_actions[filter_action]()
+            self.queryset = self.filter_actions[filter_action]()
         except KeyError:
             # pass it to the user - programming error here
             raise
-- 
2.1.4

-- 
_______________________________________________
toaster mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/toaster

Reply via email to