mirror of
https://git.yoctoproject.org/poky
synced 2026-09-15 06:49:33 +02:00
bitbake: toaster: add sort, search, paging to recipe package page
When selecting the packages tab on a recipe detail page, the page now
includes:
column sort on package name and size columns,
search on the package name, and
pagination.
Column sort is added by splitting the recipe view/html for a recipe's
package list into a new url path, view name and template, so that
the sorting routine, views.reload_params(), interfaces similar to other
views.
Search, sorting, and pagination are implemented for this detail page
using three new templates.
templates/detail_pagination_bottom.html
templates/detail_search_header.html
templates/detail_sorted_header.html
views.recipe() is optimized since the recipe's package list is no
longer needed by the recipe template, only the recipe's package count
is required for the first page.
The recipe view and template also changes to support tabbing to the
right context on the recipe detail page from the recipe-package page.
[YOCTO #6154]
(Bitbake rev: 6cb9e853d05c2c71467af22ef459ffbe6f41de36)
Signed-off-by: Dave Lerner <dave.lerner@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
e248a503ba
commit
ec8e07f8cf
@@ -419,8 +419,7 @@ def task( request, build_id, task_id ):
|
||||
|
||||
return render( request, template, context )
|
||||
|
||||
|
||||
def recipe(request, build_id, recipe_id):
|
||||
def recipe(request, build_id, recipe_id, active_tab="1"):
|
||||
template = "recipe.html"
|
||||
if Recipe.objects.filter(pk=recipe_id).count() == 0 :
|
||||
return redirect(builds)
|
||||
@@ -429,7 +428,12 @@ def recipe(request, build_id, recipe_id):
|
||||
layer_version = Layer_Version.objects.get(pk=object.layer_version_id)
|
||||
layer = Layer.objects.get(pk=layer_version.layer_id)
|
||||
tasks = Task.objects.filter(recipe_id = recipe_id, build_id = build_id).exclude(order__isnull=True).exclude(task_name__endswith='_setscene').exclude(outcome=Task.OUTCOME_NA)
|
||||
packages = Package.objects.filter(recipe_id = recipe_id).filter(build_id = build_id).filter(size__gte=0)
|
||||
package_count = Package.objects.filter(recipe_id = recipe_id).filter(build_id = build_id).filter(size__gte=0).count()
|
||||
|
||||
if active_tab != '1' and active_tab != '3' and active_tab != '4' :
|
||||
active_tab = '1'
|
||||
tab_states = {'1': '', '3': '', '4': ''}
|
||||
tab_states[active_tab] = 'active'
|
||||
|
||||
context = {
|
||||
'build' : Build.objects.get(pk=build_id),
|
||||
@@ -437,10 +441,58 @@ def recipe(request, build_id, recipe_id):
|
||||
'layer_version' : layer_version,
|
||||
'layer' : layer,
|
||||
'tasks' : tasks,
|
||||
'packages': packages,
|
||||
'package_count' : package_count,
|
||||
'tab_states' : tab_states,
|
||||
}
|
||||
return render(request, template, context)
|
||||
|
||||
def recipe_packages(request, build_id, recipe_id):
|
||||
template = "recipe_packages.html"
|
||||
if Recipe.objects.filter(pk=recipe_id).count() == 0 :
|
||||
return redirect(builds)
|
||||
|
||||
(pagesize, orderby) = _get_parameters_values(request, 10, 'name:+')
|
||||
mandatory_parameters = { 'count': pagesize, 'page' : 1, 'orderby': orderby }
|
||||
retval = _verify_parameters( request.GET, mandatory_parameters )
|
||||
if retval:
|
||||
return _redirect_parameters( 'recipe_packages', request.GET, mandatory_parameters, build_id = build_id, recipe_id = recipe_id)
|
||||
(filter_string, search_term, ordering_string) = _search_tuple(request, Package)
|
||||
|
||||
recipe = Recipe.objects.get(pk=recipe_id)
|
||||
queryset = Package.objects.filter(recipe_id = recipe_id).filter(build_id = build_id).filter(size__gte=0)
|
||||
package_count = queryset.count()
|
||||
queryset = _get_queryset(Package, queryset, filter_string, search_term, ordering_string, 'name')
|
||||
|
||||
packages = _build_page_range(Paginator(queryset, pagesize),request.GET.get('page', 1))
|
||||
|
||||
context = {
|
||||
'build' : Build.objects.get(pk=build_id),
|
||||
'recipe' : recipe,
|
||||
'objects' : packages,
|
||||
'object_count' : package_count,
|
||||
'tablecols':[
|
||||
{
|
||||
'name':'Package',
|
||||
'orderfield': _get_toggle_order(request,"name"),
|
||||
'ordericon': _get_toggle_order_icon(request,"name"),
|
||||
'orderkey': "name",
|
||||
},
|
||||
{
|
||||
'name':'Version',
|
||||
},
|
||||
{
|
||||
'name':'Size',
|
||||
'orderfield': _get_toggle_order(request,"size", True),
|
||||
'ordericon': _get_toggle_order_icon(request,"size"),
|
||||
'orderkey': 'size',
|
||||
'dclass': 'sizecol span2',
|
||||
},
|
||||
]
|
||||
}
|
||||
response = render(request, template, context)
|
||||
_save_parameters_cookies(response, pagesize, orderby, request)
|
||||
return response
|
||||
|
||||
def target_common( request, build_id, target_id, variant ):
|
||||
template = "target.html"
|
||||
(pagesize, orderby) = _get_parameters_values(request, 25, 'name:+')
|
||||
|
||||
Reference in New Issue
Block a user