diff options
author | Michael Wood <michael.g.wood@intel.com> | 2015-06-18 14:16:07 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-06-26 09:27:33 +0100 |
commit | 10e35ab742bf1dc7eb41dde6e3423c2a77d992e6 (patch) | |
tree | f3730f4d6257035f4b85d9f2e2b8771469b7d832 /bitbake | |
parent | 4013784b450a2965d16324ffd501c353da5f11e0 (diff) | |
download | poky-10e35ab742bf1dc7eb41dde6e3423c2a77d992e6.tar.gz |
bitbake: toaster: Restore 'in project' filters to main tables
Restores the previously removed filters from recipes, machines and layers
table. These filters allow filtering down the results to just displaying
the current added layers, machines or recipes in the project.
[YOCTO #7851]
(Bitbake rev: 04a3e4614aae8ba794a3b8ac9083e723de7ca522)
Signed-off-by: Michael Wood <michael.g.wood@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake')
-rw-r--r-- | bitbake/lib/toaster/toastergui/tables.py | 75 |
1 files changed, 73 insertions, 2 deletions
diff --git a/bitbake/lib/toaster/toastergui/tables.py b/bitbake/lib/toaster/toastergui/tables.py index 43b81a3e79..146a8ddeed 100644 --- a/bitbake/lib/toaster/toastergui/tables.py +++ b/bitbake/lib/toaster/toastergui/tables.py | |||
@@ -26,6 +26,24 @@ from django.conf.urls import url | |||
26 | from django.core.urlresolvers import reverse | 26 | from django.core.urlresolvers import reverse |
27 | from django.views.generic import TemplateView | 27 | from django.views.generic import TemplateView |
28 | 28 | ||
29 | |||
30 | class ProjectFiltersMixin(object): | ||
31 | """Common mixin for recipe, machine in project filters""" | ||
32 | |||
33 | def filter_in_project(self, count_only=False): | ||
34 | query = self.queryset.filter(layer_version__in=self.project_layers) | ||
35 | if count_only: | ||
36 | return query.count() | ||
37 | |||
38 | self.queryset = query | ||
39 | |||
40 | def filter_not_in_project(self, count_only=False): | ||
41 | query = self.queryset.exclude(layer_version__in=self.project_layers) | ||
42 | if count_only: | ||
43 | return query.count() | ||
44 | |||
45 | self.queryset = query | ||
46 | |||
29 | class LayersTable(ToasterTable): | 47 | class LayersTable(ToasterTable): |
30 | """Table of layers in Toaster""" | 48 | """Table of layers in Toaster""" |
31 | 49 | ||
@@ -37,12 +55,40 @@ class LayersTable(ToasterTable): | |||
37 | context = super(LayersTable, self).get_context_data(**kwargs) | 55 | context = super(LayersTable, self).get_context_data(**kwargs) |
38 | 56 | ||
39 | project = Project.objects.get(pk=kwargs['pid']) | 57 | project = Project.objects.get(pk=kwargs['pid']) |
58 | |||
40 | context['project'] = project | 59 | context['project'] = project |
41 | context['projectlayers'] = map(lambda prjlayer: prjlayer.layercommit.id, ProjectLayer.objects.filter(project=project)) | 60 | context['projectlayers'] = map(lambda prjlayer: prjlayer.layercommit.id, ProjectLayer.objects.filter(project=project)) |
42 | 61 | ||
43 | return context | 62 | return context |
44 | 63 | ||
45 | 64 | ||
65 | def setup_filters(self, *args, **kwargs): | ||
66 | project = Project.objects.get(pk=kwargs['pid']) | ||
67 | self.project_layers = ProjectLayer.objects.filter(project=project) | ||
68 | |||
69 | |||
70 | self.add_filter(title="Filter by project layers", | ||
71 | name="in_current_project", | ||
72 | filter_actions=[ | ||
73 | self.make_filter_action("in_project", "Layers added to this project", self.filter_in_project), | ||
74 | self.make_filter_action("not_in_project", "Layers not added to this project", self.filter_not_in_project) | ||
75 | ]) | ||
76 | |||
77 | def filter_in_project(self, count_only=False): | ||
78 | query = self.queryset.filter(projectlayer__in=self.project_layers) | ||
79 | if count_only: | ||
80 | return query.count() | ||
81 | |||
82 | self.queryset = query | ||
83 | |||
84 | def filter_not_in_project(self, count_only=False): | ||
85 | query = self.queryset.exclude(projectlayer__in=self.project_layers) | ||
86 | if count_only: | ||
87 | return query.count() | ||
88 | |||
89 | self.queryset = query | ||
90 | |||
91 | |||
46 | def setup_queryset(self, *args, **kwargs): | 92 | def setup_queryset(self, *args, **kwargs): |
47 | prj = Project.objects.get(pk = kwargs['pid']) | 93 | prj = Project.objects.get(pk = kwargs['pid']) |
48 | compatible_layers = prj.compatible_layerversions() | 94 | compatible_layers = prj.compatible_layerversions() |
@@ -140,6 +186,7 @@ class LayersTable(ToasterTable): | |||
140 | self.add_column(title="Add | Delete", | 186 | self.add_column(title="Add | Delete", |
141 | help_text="Add or delete layers to / from your project", | 187 | help_text="Add or delete layers to / from your project", |
142 | hideable=False, | 188 | hideable=False, |
189 | filter_name="in_current_project", | ||
143 | static_data_name="add-del-layers", | 190 | static_data_name="add-del-layers", |
144 | static_data_template='{% include "layer_btn.html" %}') | 191 | static_data_template='{% include "layer_btn.html" %}') |
145 | 192 | ||
@@ -169,7 +216,7 @@ class LayerDetails(ToasterTemplateView): | |||
169 | return context | 216 | return context |
170 | 217 | ||
171 | 218 | ||
172 | class MachinesTable(ToasterTable): | 219 | class MachinesTable(ToasterTable, ProjectFiltersMixin): |
173 | """Table of Machines in Toaster""" | 220 | """Table of Machines in Toaster""" |
174 | 221 | ||
175 | def __init__(self, *args, **kwargs): | 222 | def __init__(self, *args, **kwargs): |
@@ -183,6 +230,16 @@ class MachinesTable(ToasterTable): | |||
183 | context['projectlayers'] = map(lambda prjlayer: prjlayer.layercommit.id, ProjectLayer.objects.filter(project=context['project'])) | 230 | context['projectlayers'] = map(lambda prjlayer: prjlayer.layercommit.id, ProjectLayer.objects.filter(project=context['project'])) |
184 | return context | 231 | return context |
185 | 232 | ||
233 | def setup_filters(self, *args, **kwargs): | ||
234 | project = Project.objects.get(pk=kwargs['pid']) | ||
235 | self.project_layers = project.projectlayer_equivalent_set() | ||
236 | |||
237 | self.add_filter(title="Filter by project machines", | ||
238 | name="in_current_project", | ||
239 | filter_actions=[ | ||
240 | self.make_filter_action("in_project", "Machines provided by layers added to this project", self.filter_in_project), | ||
241 | self.make_filter_action("not_in_project", "Machines provided by layers not added to this project", self.filter_not_in_project) | ||
242 | ]) | ||
186 | 243 | ||
187 | def setup_queryset(self, *args, **kwargs): | 244 | def setup_queryset(self, *args, **kwargs): |
188 | prj = Project.objects.get(pk = kwargs['pid']) | 245 | prj = Project.objects.get(pk = kwargs['pid']) |
@@ -226,6 +283,7 @@ class MachinesTable(ToasterTable): | |||
226 | self.add_column(title="Select", | 283 | self.add_column(title="Select", |
227 | help_text="Sets the selected machine as the project machine. You can only have one machine per project", | 284 | help_text="Sets the selected machine as the project machine. You can only have one machine per project", |
228 | hideable=False, | 285 | hideable=False, |
286 | filter_name="in_current_project", | ||
229 | static_data_name="add-del-layers", | 287 | static_data_name="add-del-layers", |
230 | static_data_template='{% include "machine_btn.html" %}') | 288 | static_data_template='{% include "machine_btn.html" %}') |
231 | 289 | ||
@@ -264,7 +322,7 @@ class LayerMachinesTable(MachinesTable): | |||
264 | static_data_template=select_btn_template) | 322 | static_data_template=select_btn_template) |
265 | 323 | ||
266 | 324 | ||
267 | class RecipesTable(ToasterTable): | 325 | class RecipesTable(ToasterTable, ProjectFiltersMixin): |
268 | """Table of Recipes in Toaster""" | 326 | """Table of Recipes in Toaster""" |
269 | 327 | ||
270 | def __init__(self, *args, **kwargs): | 328 | def __init__(self, *args, **kwargs): |
@@ -282,6 +340,17 @@ class RecipesTable(ToasterTable): | |||
282 | 340 | ||
283 | return context | 341 | return context |
284 | 342 | ||
343 | def setup_filters(self, *args, **kwargs): | ||
344 | project = Project.objects.get(pk=kwargs['pid']) | ||
345 | self.project_layers = project.projectlayer_equivalent_set() | ||
346 | |||
347 | self.add_filter(title="Filter by project recipes", | ||
348 | name="in_current_project", | ||
349 | filter_actions=[ | ||
350 | self.make_filter_action("in_project", "Recipes provided by layers added to this project", self.filter_in_project), | ||
351 | self.make_filter_action("not_in_project", "Recipes provided by layers not added to this project", self.filter_not_in_project) | ||
352 | ]) | ||
353 | |||
285 | 354 | ||
286 | def setup_queryset(self, *args, **kwargs): | 355 | def setup_queryset(self, *args, **kwargs): |
287 | prj = Project.objects.get(pk = kwargs['pid']) | 356 | prj = Project.objects.get(pk = kwargs['pid']) |
@@ -318,6 +387,7 @@ class RecipesTable(ToasterTable): | |||
318 | 387 | ||
319 | self.add_column(title="Recipe file", | 388 | self.add_column(title="Recipe file", |
320 | help_text="Path to the recipe .bb file", | 389 | help_text="Path to the recipe .bb file", |
390 | hidden=True, | ||
321 | static_data_name="recipe-file", | 391 | static_data_name="recipe-file", |
322 | static_data_template=recipe_file_template) | 392 | static_data_template=recipe_file_template) |
323 | 393 | ||
@@ -348,6 +418,7 @@ class RecipesTable(ToasterTable): | |||
348 | self.add_column(title="Build", | 418 | self.add_column(title="Build", |
349 | help_text="Add or delete recipes to and from your project", | 419 | help_text="Add or delete recipes to and from your project", |
350 | hideable=False, | 420 | hideable=False, |
421 | filter_name="in_current_project", | ||
351 | static_data_name="add-del-layers", | 422 | static_data_name="add-del-layers", |
352 | static_data_template='{% include "recipe_btn.html" %}') | 423 | static_data_template='{% include "recipe_btn.html" %}') |
353 | 424 | ||