Fw: [PATCH v2] filters: re-add the possibility of filtering undelegated patches
Stephen Finucane
stephen at that.guru
Wed Jun 5 20:28:34 AEST 2019
Thanks. Fixed some style issues and reworked the release note then applied it.
Stephen
On Tue, 2019-06-04 at 18:31 -0300, Mauro Carvalho Chehab wrote:
>
> Forwarded message:
>
> Date: Tue, 4 Jun 2019 15:07:58 -0300
> From: Mauro Carvalho Chehab <mchehab+samsung at kernel.org>
> To: patchwork at lists.ozlabs.org
> Subject: [PATCH v2] filters: re-add the possibility of filtering undelegated patches
>
>
> The filters.py redesign that happened for patchwork 1.1 removed
> a functionality that we use a lot: to filter patches that weren't
> delegated to anyone.
>
> Also, it is a way harder to find someone to delegate with a free
> text input. Use, instead a combo-box just like before.
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab at osg.samsung.com>
>
> diff --git a/patchwork/filters.py b/patchwork/filters.py
> index 79aaea437c6e..11d00390145a 100644
> --- a/patchwork/filters.py
> +++ b/patchwork/filters.py
> @@ -385,6 +385,7 @@ class ArchiveFilter(Filter):
> class DelegateFilter(Filter):
> name = 'Delegate'
> param = 'delegate'
> + no_delegate_str = 'Nobody'
> ANY_DELEGATE = object()
>
> def __init__(self, filters):
> @@ -416,6 +417,11 @@ class DelegateFilter(Filter):
> if not key:
> return
>
> + if key == self.no_delegate_str:
> + self.delegate_match = key
> + self.applied = True
> + return
> +
> try:
> self.delegate = User.objects.get(id=int(key))
> except (ValueError, User.DoesNotExist):
> @@ -436,6 +442,9 @@ class DelegateFilter(Filter):
> if self.delegate:
> return {'delegate': self.delegate}
>
> + if self.delegate_match == self.no_delegate_str:
> + return {'delegate__username__isnull': True}
> +
> if self.delegate_match:
> return {'delegate__username__icontains': self.delegate_match}
>
> @@ -447,8 +456,33 @@ class DelegateFilter(Filter):
> return mark_safe('<input type="hidden" value="%s">%s' % (
> self.param, self.condition))
>
> - return mark_safe('<input type="text" name="delegate" '
> - 'id="delegate_input" class="form-control">')
> + delegates = User.objects.filter(profile__maintainer_projects__isnull = False)
> +
> + str = '<select name="delegate">'
> +
> + selected = ''
> + if not self.applied:
> + selected = 'selected'
> +
> + str += '<option %s value="">------</option>' % selected
> +
> + selected = ''
> + if self.applied and self.delegate is None:
> + selected = 'selected'
> +
> + str += '<option %s value="%s">%s</option>' % (
> + selected, self.no_delegate_str, self.no_delegate_str)
> +
> + for delegate in delegates:
> + selected = ''
> + if delegate == self.delegate:
> + selected = ' selected'
> +
> + str += '<option %s value="%s">%s</option>' % (selected,
> + delegate.id, delegate.username)
> + str += '</select>'
> +
> + return mark_safe(str)
>
> def set_status(self, *args, **kwargs):
> if 'delegate' in kwargs:
> diff --git a/patchwork/templates/patchwork/partials/filters.html b/patchwork/templates/patchwork/partials/filters.html
> index 41ed2c268e46..e89c4d0f6284 100644
> --- a/patchwork/templates/patchwork/partials/filters.html
> +++ b/patchwork/templates/patchwork/partials/filters.html
> @@ -76,44 +76,6 @@ $(document).ready(function() {
> });
> }
> });
> -
> - $('#delegate_input').selectize({
> - plugins: ['enter_key_submit'],
> - maxItems: 1,
> - persist: false,
> - onInitialize: function() {
> - this.on('submit', function() {
> - if (!this.items.length)
> - this.$input.val(this.lastValue);
> - this.$input.closest('form').submit();
> - }, this);
> - },
> -{% if "delegate" in filters.applied_filters %}
> -{% with delegate_filter=filters.applied_filters.delegate %}
> - options: [
> - {
> - value: "{{ delegate_filter.key }}",
> - text: "{{ delegate_filter.condition }}",
> - },
> - ],
> - items: ["{{ delegate_filter.key }}"],
> -{% endwith %}
> -{% endif %}
> - load: function(query, callback) {
> - req = $.ajax({
> - url: "{% url 'api-delegates' %}",
> - data: {q: query, l: 10},
> - error: function() {
> - callback();
> - },
> - success: function(res) {
> - callback($.map(res, function (obj) {
> - return {value: obj.pk, text: obj.name};
> - }));
> - }
> - });
> - }
> - });
> });
> </script>
>
> diff --git a/releasenotes/notes/Re-added-delegate-to-nobody-filter-and-use-select-for-delegated-people-04a81a4a914965d8.yaml b/releasenotes/notes/Re-added-delegate-to-nobody-filter-and-use-select-for-delegated-people-04a81a4a914965d8.yaml
> new file mode 100644
> index 000000000000..eb4246e5600e
> --- /dev/null
> +++ b/releasenotes/notes/Re-added-delegate-to-nobody-filter-and-use-select-for-delegated-people-04a81a4a914965d8.yaml
> @@ -0,0 +1,11 @@
> +---
> +prelude: >
> + In the past, Patchwork used to support filtering patches that weren't
> + delegated to anyone. This feature was removed in 2015, as part of a
> + patch designed to support deletation to anyone. Yet, the feature didn't
> + scale and got removed in 2016. So, re-introduce the old logic, fixing
> + a regression.
> +fixes:
> + - |
> + Fix a regression introduced by changeset
> + f439f5414206 ("Add delegate filter autocomplete support")
>
>
> Thanks,
> Mauro
>
>
>
> Thanks,
> Mauro
> _______________________________________________
> Patchwork mailing list
> Patchwork at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/patchwork
More information about the Patchwork
mailing list