From d6868d5d9db132b2634e1f7c94fbefe907cab086 Mon Sep 17 00:00:00 2001 From: Michael Wood Date: Wed, 4 Feb 2015 18:06:30 +0000 Subject: bitbake: toaster: All machines Add filtering based on layer in project Add a filter so that we can filter machines which are already being provided by a layer in the current project. Also make sure that we're only showing layers which are compatible with the current project. Also handle no results returned and page heading reflecting the number of results returned from a search. AlexD solved conflicts while merging the patch. (Bitbake rev: b0ae4d2bb71e897d8a846a3cf14b7151baa09bd2) Signed-off-by: Michael Wood Signed-off-by: Alexandru DAMIAN Signed-off-by: Richard Purdie --- .../lib/toaster/toastergui/templates/machines.html | 67 ++++++++++++++-------- bitbake/lib/toaster/toastergui/views.py | 48 ++++++++++++++-- 2 files changed, 86 insertions(+), 29 deletions(-) (limited to 'bitbake/lib/toaster/toastergui') diff --git a/bitbake/lib/toaster/toastergui/templates/machines.html b/bitbake/lib/toaster/toastergui/templates/machines.html index 650c47bd66..9930a94f4d 100644 --- a/bitbake/lib/toaster/toastergui/templates/machines.html +++ b/bitbake/lib/toaster/toastergui/templates/machines.html @@ -30,38 +30,57 @@ {% include "layers_dep_modal.html" %} - +{% if request.GET.search and objects.paginator.count == 0 %} +
+ +
+{% else %} + {% include "basetable_top.html" %} + {% for o in objects %} + + {{o.name}} + {{o.description}} + {{o.layer_version.layer.name}} + {{o.layer_source.name}} + {{o.layer_version.get_vcs_reference}} + /machine/conf/{{o.name}}.conf + + Select machine + + + Add layer + + + + + {% endfor %} -{% include "basetable_top.html" %} -{% for o in objects %} - - {{o.name}} - {{o.description}} - {{o.layer_version.layer.name}} - {{o.layer_source.name}} - {{o.layer_version.commit}} - /machine/conf/{{o.name}}.conf - - Select machine - - - Add layer - - - - -{% endfor %} - -{% include "basetable_bottom.html" %} + {% include "basetable_bottom.html" %} +{% endif %} {% endblock %} diff --git a/bitbake/lib/toaster/toastergui/views.py b/bitbake/lib/toaster/toastergui/views.py index 2e52d2bff9..7dc4bbd5a2 100755 --- a/bitbake/lib/toaster/toastergui/views.py +++ b/bitbake/lib/toaster/toastergui/views.py @@ -2789,11 +2789,38 @@ if toastermain.settings.MANAGED: queryset_all = Machine.objects.all() - queryset_with_search = _get_queryset(Machine, queryset_all, None, search_term, ordering_string, '-name') - queryset = _get_queryset(Machine, queryset_all, filter_string, search_term, ordering_string, '-name') + 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 + 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 + # 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 + + if "name:notinprj" in filter_string: + 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') + + 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() + } + + # 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)) @@ -2802,7 +2829,7 @@ if toastermain.settings.MANAGED: 'project_layers' : project_layers, 'objectname' : "machines", 'default_orderby' : 'name:+', - 'total_count': queryset_with_search.count(), + 'total_count': machine_info.paginator.count, 'tablecols' : [ { 'name': 'Machine', @@ -2840,12 +2867,23 @@ if toastermain.settings.MANAGED: 'hidden' : 1, }, { 'name': 'Select', - 'dclass': 'span2', - 'qhelp': "Add or delete machines to / from your project ", + 'dclass': 'select span2', + 'qhelp': "Sets the selected machine as the project machine. You can only have one machine per project", + 'filter': { + 'class': 'select', + 'label': 'Show:', + 'options': [ + (u'Machines provided by layers added to this project', 'name:inprj', selected_filter_count['inprj']), + (u'Machines provided by layers not added to this project', 'name:notinprj', selected_filter_count['notinprj']), + + ], + } + }, ] } + response = render(request, template, context) _save_parameters_cookies(response, pagesize, orderby, request) -- cgit v1.2.3-54-g00ecf