diff mbox

[v7,7/8] templates: Integrate series support

Message ID 1477746820-11629-8-git-send-email-stephen@that.guru
State Accepted
Headers show

Commit Message

Stephen Finucane Oct. 29, 2016, 1:13 p.m. UTC
Integrate support for series in the web UI. This is rather
straightforward, the only significant change being the addition of a
filter for series filtering.

Signed-off-by: Stephen Finucane <stephen@that.guru>
Reviewed-by: Andy Doan <andy.doan@linaro.org>
Tested-by: Russell Currey <ruscur@russell.cc>
---
v7:
- Reference 'Series' instead of 'SeriesRevision'
- Remove unnecessary 'Exception' handler
v5:
- Don't use the 'Patch.series' property, which results in a new query
  each time
v4:
- Update to use newly added Series.name field
---
 patchwork/filters.py                          | 49 +++++++++++++++++++++++++--
 patchwork/templates/patchwork/patch-list.html | 13 +++++++
 patchwork/views/__init__.py                   |  4 +--
 3 files changed, 62 insertions(+), 4 deletions(-)

Comments

Daniel Axtens Oct. 31, 2016, 6:08 a.m. UTC | #1
Looks good to me, thanks for making the fixups I asked for.

Reviewed-by: Daniel Axtens <dja@axtens.net>

I think now every patch in the series has >= 1 review!

Regards,
Daniel

Stephen Finucane <stephen@that.guru> writes:

> Integrate support for series in the web UI. This is rather
> straightforward, the only significant change being the addition of a
> filter for series filtering.
>
> Signed-off-by: Stephen Finucane <stephen@that.guru>
> Reviewed-by: Andy Doan <andy.doan@linaro.org>
> Tested-by: Russell Currey <ruscur@russell.cc>
> ---
> v7:
> - Reference 'Series' instead of 'SeriesRevision'
> - Remove unnecessary 'Exception' handler
> v5:
> - Don't use the 'Patch.series' property, which results in a new query
>   each time
> v4:
> - Update to use newly added Series.name field
> ---
>  patchwork/filters.py                          | 49 +++++++++++++++++++++++++--
>  patchwork/templates/patchwork/patch-list.html | 13 +++++++
>  patchwork/views/__init__.py                   |  4 +--
>  3 files changed, 62 insertions(+), 4 deletions(-)
>
> diff --git a/patchwork/filters.py b/patchwork/filters.py
> index ea832b7..bc8ca41 100644
> --- a/patchwork/filters.py
> +++ b/patchwork/filters.py
> @@ -25,7 +25,9 @@ from django.utils.safestring import mark_safe
>  from django.utils import six
>  from django.utils.six.moves.urllib.parse import quote
>  
> -from patchwork.models import Person, State
> +from patchwork.models import Person
> +from patchwork.models import Series
> +from patchwork.models import State
>  
>  
>  class Filter(object):
> @@ -82,6 +84,48 @@ class Filter(object):
>          return '%s: %s' % (self.name, self.kwargs())
>  
>  
> +class SeriesFilter(Filter):
> +    param = 'series'
> +    name = 'Series'
> +
> +    def __init__(self, filters):
> +        super(SeriesFilter, self).__init__(filters)
> +        self.series = None
> +
> +    def _set_key(self, key):
> +        self.series = None
> +
> +        key = key.strip()
> +        if not key:
> +            return
> +
> +        try:
> +            self.series = Series.objects.get(id=int(key))
> +        except (ValueError, Series.DoesNotExist):
> +            return
> +
> +        self.applied = True
> +
> +    def kwargs(self):
> +        if self.series:
> +            return {'series': self.series}
> +        return {}
> +
> +    def condition(self):
> +        if self.series:
> +            return self.series.name
> +        return ''
> +
> +    def _form(self):
> +        return mark_safe(('<input type="text" name="series" ' +
> +                          'id="series_input" class="form-control">'))
> +
> +    def key(self):
> +        if self.series:
> +            return self.series.id
> +        return
> +
> +
>  class SubmitterFilter(Filter):
>      param = 'submitter'
>  
> @@ -391,7 +435,8 @@ class DelegateFilter(Filter):
>              self.forced = True
>  
>  
> -filterclasses = [SubmitterFilter,
> +filterclasses = [SeriesFilter,
> +                 SubmitterFilter,
>                   StateFilter,
>                   SearchFilter,
>                   ArchiveFilter,
> diff --git a/patchwork/templates/patchwork/patch-list.html b/patchwork/templates/patchwork/patch-list.html
> index 937a609..4b979ac 100644
> --- a/patchwork/templates/patchwork/patch-list.html
> +++ b/patchwork/templates/patchwork/patch-list.html
> @@ -83,6 +83,10 @@ $(document).ready(function() {
>     </th>
>  
>     <th>
> +    <span class="colinactive">Series</span>
> +   </th>
> +
> +   <th>
>      {% project_tags %}
>     </th>
>  
> @@ -176,6 +180,15 @@ $(document).ready(function() {
>       {{ patch.name|default:"[no subject]"|truncatechars:100 }}
>      </a>
>     </td>
> +   <td>
> +    {% with patch.series.all.0 as series %}
> +     {% if series %}
> +     <a href="?series={{series.id}}">
> +      {{ series|truncatechars:100 }}
> +     </a>
> +     {% endif %}
> +    {% endwith %}
> +   </td>
>     <td class="text-nowrap">{{ patch|patch_tags }}</td>
>     <td class="text-nowrap">{{ patch|patch_checks }}</td>
>     <td class="text-nowrap">{{ patch.date|date:"Y-m-d" }}</td>
> diff --git a/patchwork/views/__init__.py b/patchwork/views/__init__.py
> index 8b5e881..a29da83 100644
> --- a/patchwork/views/__init__.py
> +++ b/patchwork/views/__init__.py
> @@ -297,8 +297,8 @@ def generic_list(request, project, view, view_args=None, filter_settings=None,
>      # rendering the list template
>      patches = patches.select_related('state', 'submitter', 'delegate')
>  
> -    # we also need checks
> -    patches = patches.prefetch_related('check_set')
> +    # we also need checks and series
> +    patches = patches.prefetch_related('check_set', 'series')
>  
>      paginator = Paginator(request, patches)
>  
> -- 
> 2.7.4
>
> _______________________________________________
> Patchwork mailing list
> Patchwork@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/patchwork
Andrew Donnellan Oct. 31, 2016, 6:12 a.m. UTC | #2
On 31/10/16 17:08, Daniel Axtens wrote:
> Looks good to me, thanks for making the fixups I asked for.
>
> Reviewed-by: Daniel Axtens <dja@axtens.net>

Reviewed-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>

>
> I think now every patch in the series has >= 1 review!

SHIP IT! Or something...


Andrew
diff mbox

Patch

diff --git a/patchwork/filters.py b/patchwork/filters.py
index ea832b7..bc8ca41 100644
--- a/patchwork/filters.py
+++ b/patchwork/filters.py
@@ -25,7 +25,9 @@  from django.utils.safestring import mark_safe
 from django.utils import six
 from django.utils.six.moves.urllib.parse import quote
 
-from patchwork.models import Person, State
+from patchwork.models import Person
+from patchwork.models import Series
+from patchwork.models import State
 
 
 class Filter(object):
@@ -82,6 +84,48 @@  class Filter(object):
         return '%s: %s' % (self.name, self.kwargs())
 
 
+class SeriesFilter(Filter):
+    param = 'series'
+    name = 'Series'
+
+    def __init__(self, filters):
+        super(SeriesFilter, self).__init__(filters)
+        self.series = None
+
+    def _set_key(self, key):
+        self.series = None
+
+        key = key.strip()
+        if not key:
+            return
+
+        try:
+            self.series = Series.objects.get(id=int(key))
+        except (ValueError, Series.DoesNotExist):
+            return
+
+        self.applied = True
+
+    def kwargs(self):
+        if self.series:
+            return {'series': self.series}
+        return {}
+
+    def condition(self):
+        if self.series:
+            return self.series.name
+        return ''
+
+    def _form(self):
+        return mark_safe(('<input type="text" name="series" ' +
+                          'id="series_input" class="form-control">'))
+
+    def key(self):
+        if self.series:
+            return self.series.id
+        return
+
+
 class SubmitterFilter(Filter):
     param = 'submitter'
 
@@ -391,7 +435,8 @@  class DelegateFilter(Filter):
             self.forced = True
 
 
-filterclasses = [SubmitterFilter,
+filterclasses = [SeriesFilter,
+                 SubmitterFilter,
                  StateFilter,
                  SearchFilter,
                  ArchiveFilter,
diff --git a/patchwork/templates/patchwork/patch-list.html b/patchwork/templates/patchwork/patch-list.html
index 937a609..4b979ac 100644
--- a/patchwork/templates/patchwork/patch-list.html
+++ b/patchwork/templates/patchwork/patch-list.html
@@ -83,6 +83,10 @@  $(document).ready(function() {
    </th>
 
    <th>
+    <span class="colinactive">Series</span>
+   </th>
+
+   <th>
     {% project_tags %}
    </th>
 
@@ -176,6 +180,15 @@  $(document).ready(function() {
      {{ patch.name|default:"[no subject]"|truncatechars:100 }}
     </a>
    </td>
+   <td>
+    {% with patch.series.all.0 as series %}
+     {% if series %}
+     <a href="?series={{series.id}}">
+      {{ series|truncatechars:100 }}
+     </a>
+     {% endif %}
+    {% endwith %}
+   </td>
    <td class="text-nowrap">{{ patch|patch_tags }}</td>
    <td class="text-nowrap">{{ patch|patch_checks }}</td>
    <td class="text-nowrap">{{ patch.date|date:"Y-m-d" }}</td>
diff --git a/patchwork/views/__init__.py b/patchwork/views/__init__.py
index 8b5e881..a29da83 100644
--- a/patchwork/views/__init__.py
+++ b/patchwork/views/__init__.py
@@ -297,8 +297,8 @@  def generic_list(request, project, view, view_args=None, filter_settings=None,
     # rendering the list template
     patches = patches.select_related('state', 'submitter', 'delegate')
 
-    # we also need checks
-    patches = patches.prefetch_related('check_set')
+    # we also need checks and series
+    patches = patches.prefetch_related('check_set', 'series')
 
     paginator = Paginator(request, patches)