diff options
| author | Alexandru DAMIAN <alexandru.damian@intel.com> | 2013-12-05 14:20:36 +0000 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2013-12-10 11:16:14 +0000 |
| commit | 192583a91e17b15da4668dbacee035def1d68b0c (patch) | |
| tree | 2dfef54dff47dddfb3005b619ee08d1731b63c2d /bitbake/lib/toaster/bldviewer/views.py | |
| parent | 415ebb738da2a9625d6cc1456f4e99e463797c31 (diff) | |
| download | poky-192583a91e17b15da4668dbacee035def1d68b0c.tar.gz | |
bitbake: toaster: add pagination to the Simple UI
In an effort to make the Simple UI more usable and
reponsive, this patch adds pagination support for the
pages with lots of entries: Builds, Configuration and
Tasks.
(Bitbake rev: d4f075c050ad9ecebe750420d49961a7f30d090b)
Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/toaster/bldviewer/views.py')
| -rw-r--r-- | bitbake/lib/toaster/bldviewer/views.py | 47 |
1 files changed, 35 insertions, 12 deletions
diff --git a/bitbake/lib/toaster/bldviewer/views.py b/bitbake/lib/toaster/bldviewer/views.py index 3eb785b6c6..7cb9b42379 100644 --- a/bitbake/lib/toaster/bldviewer/views.py +++ b/bitbake/lib/toaster/bldviewer/views.py | |||
| @@ -24,15 +24,38 @@ from orm.models import Build, Target, Task, Layer, Layer_Version, Recipe, LogMes | |||
| 24 | from orm.models import Task_Dependency, Recipe_Dependency, Package, Package_File, Package_Dependency | 24 | from orm.models import Task_Dependency, Recipe_Dependency, Package, Package_File, Package_Dependency |
| 25 | from orm.models import Target_Installed_Package | 25 | from orm.models import Target_Installed_Package |
| 26 | from django.views.decorators.cache import cache_control | 26 | from django.views.decorators.cache import cache_control |
| 27 | from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger | ||
| 28 | |||
| 29 | |||
| 30 | def _build_page_range(paginator, index = 1): | ||
| 31 | try: | ||
| 32 | page = paginator.page(index) | ||
| 33 | except PageNotAnInteger: | ||
| 34 | page = paginator.page(1) | ||
| 35 | except EmptyPage: | ||
| 36 | page = paginator.page(paginator.num_pages) | ||
| 37 | |||
| 38 | page.page_range = [page.number] | ||
| 39 | crt_range = 0 | ||
| 40 | for i in range(1,5): | ||
| 41 | if (page.number + i) <= paginator.num_pages: | ||
| 42 | page.page_range = page.page_range + [ page.number + i] | ||
| 43 | crt_range +=1 | ||
| 44 | if (page.number - i) > 0: | ||
| 45 | page.page_range = [page.number -i] + page.page_range | ||
| 46 | crt_range +=1 | ||
| 47 | if crt_range == 4: | ||
| 48 | break | ||
| 49 | return page | ||
| 27 | 50 | ||
| 28 | @cache_control(no_store=True) | 51 | @cache_control(no_store=True) |
| 29 | def build(request): | 52 | def build(request): |
| 30 | template = 'build.html' | 53 | template = 'build.html' |
| 31 | build_info = Build.objects.all() | ||
| 32 | |||
| 33 | logs = LogMessage.objects.all() | 54 | logs = LogMessage.objects.all() |
| 34 | 55 | ||
| 35 | context = {'builds': build_info, 'logs': logs , | 56 | build_info = _build_page_range(Paginator(Build.objects.order_by("-id"), 10),request.GET.get('page', 1)) |
| 57 | |||
| 58 | context = {'objects': build_info, 'logs': logs , | ||
| 36 | 'hideshowcols' : [ | 59 | 'hideshowcols' : [ |
| 37 | {'name': 'Output', 'order':10}, | 60 | {'name': 'Output', 'order':10}, |
| 38 | {'name': 'Log', 'order':11}, | 61 | {'name': 'Log', 'order':11}, |
| @@ -61,38 +84,38 @@ def _find_task_provider(task): | |||
| 61 | def task(request, build_id): | 84 | def task(request, build_id): |
| 62 | template = 'task.html' | 85 | template = 'task.html' |
| 63 | 86 | ||
| 64 | tasks = Task.objects.filter(build=build_id) | 87 | tasks = _build_page_range(Paginator(Task.objects.filter(build=build_id), 100),request.GET.get('page', 1)) |
| 65 | 88 | ||
| 66 | for t in tasks: | 89 | for t in tasks: |
| 67 | if t.outcome == Task.OUTCOME_COVERED: | 90 | if t.outcome == Task.OUTCOME_COVERED: |
| 68 | t.provider = _find_task_provider(t) | 91 | t.provider = _find_task_provider(t) |
| 69 | 92 | ||
| 70 | context = {'build': Build.objects.filter(pk=build_id)[0], 'tasks': tasks} | 93 | context = {'build': Build.objects.filter(pk=build_id)[0], 'objects': tasks} |
| 71 | 94 | ||
| 72 | return render(request, template, context) | 95 | return render(request, template, context) |
| 73 | 96 | ||
| 74 | def configuration(request, build_id): | 97 | def configuration(request, build_id): |
| 75 | template = 'configuration.html' | 98 | template = 'configuration.html' |
| 76 | variables = Variable.objects.filter(build=build_id) | 99 | variables = _build_page_range(Paginator(Variable.objects.filter(build=build_id), 50), request.GET.get('page', 1)) |
| 77 | context = {'build': Build.objects.filter(pk=build_id)[0], 'configuration' : variables} | 100 | context = {'build': Build.objects.filter(pk=build_id)[0], 'objects' : variables} |
| 78 | return render(request, template, context) | 101 | return render(request, template, context) |
| 79 | 102 | ||
| 80 | def bpackage(request, build_id): | 103 | def bpackage(request, build_id): |
| 81 | template = 'bpackage.html' | 104 | template = 'bpackage.html' |
| 82 | packages = Package.objects.filter(build = build_id) | 105 | packages = Package.objects.filter(build = build_id) |
| 83 | context = {'build': Build.objects.filter(pk=build_id)[0], 'packages' : packages} | 106 | context = {'build': Build.objects.filter(pk=build_id)[0], 'objects' : packages} |
| 84 | return render(request, template, context) | 107 | return render(request, template, context) |
| 85 | 108 | ||
| 86 | def bfile(request, build_id, package_id): | 109 | def bfile(request, build_id, package_id): |
| 87 | template = 'bfile.html' | 110 | template = 'bfile.html' |
| 88 | files = Package_File.objects.filter(package = package_id) | 111 | files = Package_File.objects.filter(package = package_id) |
| 89 | context = {'build': Build.objects.filter(pk=build_id)[0], 'files' : files} | 112 | context = {'build': Build.objects.filter(pk=build_id)[0], 'objects' : files} |
| 90 | return render(request, template, context) | 113 | return render(request, template, context) |
| 91 | 114 | ||
| 92 | def tpackage(request, build_id, target_id): | 115 | def tpackage(request, build_id, target_id): |
| 93 | template = 'package.html' | 116 | template = 'package.html' |
| 94 | packages = map(lambda x: x.package, list(Target_Installed_Package.objects.filter(target=target_id))) | 117 | packages = map(lambda x: x.package, list(Target_Installed_Package.objects.filter(target=target_id))) |
| 95 | context = {'build': Build.objects.filter(pk=build_id)[0], 'packages' : packages} | 118 | context = {'build': Build.objects.filter(pk=build_id)[0], 'objects' : packages} |
| 96 | return render(request, template, context) | 119 | return render(request, template, context) |
| 97 | 120 | ||
| 98 | def layer(request): | 121 | def layer(request): |
| @@ -104,7 +127,7 @@ def layer(request): | |||
| 104 | for liv in li.versions: | 127 | for liv in li.versions: |
| 105 | liv.count = Recipe.objects.filter(layer_version__id = liv.id).count() | 128 | liv.count = Recipe.objects.filter(layer_version__id = liv.id).count() |
| 106 | 129 | ||
| 107 | context = {'layers': layer_info} | 130 | context = {'objects': layer_info} |
| 108 | 131 | ||
| 109 | return render(request, template, context) | 132 | return render(request, template, context) |
| 110 | 133 | ||
| @@ -113,7 +136,7 @@ def layer_versions_recipes(request, layerversion_id): | |||
| 113 | template = 'recipe.html' | 136 | template = 'recipe.html' |
| 114 | recipes = Recipe.objects.filter(layer_version__id = layerversion_id) | 137 | recipes = Recipe.objects.filter(layer_version__id = layerversion_id) |
| 115 | 138 | ||
| 116 | context = {'recipes': recipes, | 139 | context = {'objects': recipes, |
| 117 | 'layer_version' : Layer_Version.objects.filter( id = layerversion_id )[0] | 140 | 'layer_version' : Layer_Version.objects.filter( id = layerversion_id )[0] |
| 118 | } | 141 | } |
| 119 | 142 | ||
