Patchwork [bitbake-devel,01/14] toaster: link task order to right tasks page

login
register
mail settings
Submitter Alexandru DAMIAN
Date April 4, 2014, 2:10 p.m.
Message ID <c0b41b6763e049cd67b1b8038d85c49482557773.1396620556.git.alexandru.damian@intel.com>
Download mbox | patch
Permalink /patch/70121/
State New
Headers show

Comments

Alexandru DAMIAN - April 4, 2014, 2:10 p.m.
From: David Reyna <David.Reyna@windriver.com>

When linking from a task order number to the All Tasks
page, automatically display the correct page for that link
anchor.

[YOCTO #5933]

Signed-off-by: David Reyna <David.Reyna@windriver.com>
Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com>
---
 lib/toaster/toastergui/templates/task.html |  2 +-
 lib/toaster/toastergui/urls.py             |  1 +
 lib/toaster/toastergui/views.py            | 36 +++++++++++++++++++++++++-----
 3 files changed, 32 insertions(+), 7 deletions(-)

Patch

diff --git a/lib/toaster/toastergui/templates/task.html b/lib/toaster/toastergui/templates/task.html
index 1a7e9d4..5c32250 100644
--- a/lib/toaster/toastergui/templates/task.html
+++ b/lib/toaster/toastergui/templates/task.html
@@ -199,7 +199,7 @@ 
         <i class="icon-question-sign get-help" title="The running sequence of each task in the build"></i>
         Task order
     </dt>
-    <dd><a href="{%url "tasks" build.pk %}#{{task.order}}">{{task.order}}</a></dd>
+    <dd><a href="{%url "tasks_task" build.pk task.order %}#{{task.order}}">{{task.order}}</a></dd>
     {% if task.task_executed %}
         <dt>
             <i class="icon-question-sign get-help" title="If this task executes a Python or Shell function(s)"></i>
diff --git a/lib/toaster/toastergui/urls.py b/lib/toaster/toastergui/urls.py
index ac83b38..d7e9457 100644
--- a/lib/toaster/toastergui/urls.py
+++ b/lib/toaster/toastergui/urls.py
@@ -26,6 +26,7 @@  urlpatterns = patterns('toastergui.views',
         url(r'^build/(?P<build_id>\d+)$', 'builddashboard', name="builddashboard"),
 
         url(r'^build/(?P<build_id>\d+)/tasks/$', 'tasks', name='tasks'),
+        url(r'^build/(?P<build_id>\d+)/tasks/(?P<task_id>\d+)/$', 'tasks_task', name='tasks_task'),
         url(r'^build/(?P<build_id>\d+)/task/(?P<task_id>\d+)$', 'task', name='task'),
 
         url(r'^build/(?P<build_id>\d+)/recipes/$', 'recipes', name='recipes'),
diff --git a/lib/toaster/toastergui/views.py b/lib/toaster/toastergui/views.py
index 05e24ea..a92a03f 100644
--- a/lib/toaster/toastergui/views.py
+++ b/lib/toaster/toastergui/views.py
@@ -196,7 +196,7 @@  def _get_queryset(model, queryset, filter_string, search_term, ordering_string,
         else:
             queryset = queryset.order_by(column)
 
-    # insure only distinct records (e.g. from multiple search hits) are returned 
+    # insure only distinct records (e.g. from multiple search hits) are returned
     return queryset.distinct()
 
 
@@ -746,7 +746,7 @@  def _find_task_provider(task):
             return trc
     return None
 
-def tasks_common(request, build_id, variant):
+def tasks_common(request, build_id, variant, task_anchor):
 # This class is shared between these pages
 #
 # Column    tasks  buildtime  diskio  cpuusage
@@ -766,6 +766,10 @@  def tasks_common(request, build_id, variant):
 # 'min':on always, 'def':on by default, else hidden
 # '+' default column sort up, '-' default column sort down
 
+    anchor = request.GET.get('anchor', '')
+    if not anchor:
+        anchor=task_anchor
+
     # default ordering depends on variant
     if   'buildtime' == variant:
         title_variant='Time'
@@ -791,12 +795,29 @@  def tasks_common(request, build_id, variant):
     template = 'tasks.html'
     retval = _verify_parameters( request.GET, mandatory_parameters )
     if retval:
+        if task_anchor:
+	        mandatory_parameters['anchor']=task_anchor
         return _redirect_parameters( variant, request.GET, mandatory_parameters, build_id = build_id)
     (filter_string, search_term, ordering_string) = _search_tuple(request, Task)
     queryset_all = Task.objects.filter(build=build_id, order__gt=0)
     queryset_with_search = _get_queryset(Task, queryset_all, None , search_term, ordering_string, 'order')
     queryset = _get_queryset(Task, queryset_all, filter_string, search_term, ordering_string, 'order')
 
+	# compute the anchor's page
+    if anchor:
+	    request.GET = request.GET.copy()
+        del request.GET['anchor']
+        i=0
+        a=int(anchor)
+		count_per_page=int(request.GET.get('count', 100))
+        for task in queryset.iterator():
+            if a == task.order:
+				new_page= (i / count_per_page ) + 1
+				request.GET.__setitem__('page', new_page)
+				mandatory_parameters['page']=new_page
+				return _redirect_parameters( variant, request.GET, mandatory_parameters, build_id = build_id)
+            i += 1
+
     tasks = _build_page_range(Paginator(queryset, request.GET.get('count', 100)),request.GET.get('page', 1))
 
     # define (and modify by variants) the 'tablecols' members
@@ -937,16 +958,19 @@  def tasks_common(request, build_id, variant):
     return render(request, template, context)
 
 def tasks(request, build_id):
-    return tasks_common(request, build_id, 'tasks')
+    return tasks_common(request, build_id, 'tasks', '')
+
+def tasks_task(request, build_id, task_id):
+    return tasks_common(request, build_id, 'tasks', task_id)
 
 def buildtime(request, build_id):
-    return tasks_common(request, build_id, 'buildtime')
+    return tasks_common(request, build_id, 'buildtime', '')
 
 def diskio(request, build_id):
-    return tasks_common(request, build_id, 'diskio')
+    return tasks_common(request, build_id, 'diskio', '')
 
 def cpuusage(request, build_id):
-    return tasks_common(request, build_id, 'cpuusage')
+    return tasks_common(request, build_id, 'cpuusage', '')
 
 
 def recipes(request, build_id):