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
