From 54a4ca3d5a3fcb99e8dae216dcba25c9cc05a914 Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Fri, 12 Sep 2008 10:14:12 +1000 Subject: [PATCH 01/16] Add 'Action Required' meta-state filter This filter shows all patches in states with action_required = True. Signed-off-by: Jeremy Kerr --- apps/patchwork/filters.py | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/apps/patchwork/filters.py b/apps/patchwork/filters.py index 6cd526b..b0b204e 100644 --- a/apps/patchwork/filters.py +++ b/apps/patchwork/filters.py @@ -143,12 +143,23 @@ class SubmitterFilter(Filter): class StateFilter(Filter): param = 'state' + action_req_key = '!' + def __init__(self, filters): super(StateFilter, self).__init__(filters) self.name = 'State' self.state = None + self.action_req = None def _set_key(self, str): + self.action_req = None + self.state = None + + if str == self.action_req_key: + self.action_req = True + self.applied = True + return + try: self.state = State.objects.get(id=int(str)) except: @@ -157,12 +168,24 @@ class StateFilter(Filter): self.applied = True def kwargs(self): - return {'state': self.state} + if self.action_req == True: + return {'state__in': \ + State.objects.filter(action_required = True) \ + .values('pk').query} + if self.state is not None: + return {'state': self.state} def condition(self): - return self.state.name + if self.state: + return self.state.name + elif self.action_req == True: + return 'Action Required' + return None + def key(self): + if self.action_req == True: + return self.action_req_key if self.state is None: return None return self.state.id @@ -170,6 +193,9 @@ class StateFilter(Filter): def _form(self): str = '' % self.param - str += '' - if self.action_req_key: - str += '' % \ - self.action_req_key + str += '' % self.any_key + str += '' % self.action_req_str for state in State.objects.all(): selected = '' if self.state and self.state == state: @@ -209,6 +203,12 @@ class StateFilter(Filter): def form_function(self): return 'function(form) { return form.x.value }' + def url_without_me(self): + qs = self.filters.querystring_without_filter(self) + if qs != '?': + qs += '&' + return qs + '%s=%s' % (self.param, self.any_key) + class SearchFilter(Filter): param = 'q' def __init__(self, filters): -- 2.39.2 From e472cd43637c3b30b45ace46146addb46b8a5980 Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Fri, 12 Sep 2008 10:41:27 +1000 Subject: [PATCH 03/16] Don't apply delegate = Nobody filter by default Signed-off-by: Jeremy Kerr --- apps/patchwork/filters.py | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/apps/patchwork/filters.py b/apps/patchwork/filters.py index 4b29bc9..228c9c2 100644 --- a/apps/patchwork/filters.py +++ b/apps/patchwork/filters.py @@ -309,21 +309,19 @@ class ArchiveFilter(Filter): class DelegateFilter(Filter): param = 'delegate' + no_delegate_key = '-' + no_delegate_str = 'Nobody' AnyDelegate = 1 def __init__(self, filters): super(DelegateFilter, self).__init__(filters) self.name = 'Delegate' self.param = 'delegate' - - # default to applied, but no delegate - this will result in patches with - # no delegate self.delegate = None - self.applied = True def _set_key(self, str): - if str == "*": - self.applied = False + if str == self.no_delegate_key: + self.applied = True self.delegate = None return @@ -342,7 +340,7 @@ class DelegateFilter(Filter): def condition(self): if self.delegate: return self.delegate.get_profile().name() - return 'Nobody' + return self.no_delegate_str def _form(self): delegates = User.objects.filter(userprofile__maintainer_projects = @@ -354,13 +352,14 @@ class DelegateFilter(Filter): if not self.applied: selected = 'selected' - str += '' % selected + str += '' % selected selected = '' - if self.delegate is None: + if self.applied and self.delegate is None: selected = 'selected' - str += '' % selected + str += '' % \ + (selected, self.no_delegate_key, self.no_delegate_str) for d in delegates: selected = '' @@ -377,14 +376,8 @@ class DelegateFilter(Filter): if self.delegate: return self.delegate.id if self.applied: - return None - return '*' - - def url_without_me(self): - qs = self.filters.querystring_without_filter(self) - if qs != '?': - qs += '&' - return qs + ('%s=*' % self.param) + return self.no_delegate_key + return None def set_status(self, *args, **kwargs): if 'delegate' in kwargs: -- 2.39.2 From 5799a55da8c20e0f3820b2e131c20083fe559675 Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Fri, 12 Sep 2008 10:55:21 +1000 Subject: [PATCH 04/16] Remember state filter settings We need to set a few 'selected' options.. Signed-off-by: Jeremy Kerr --- apps/patchwork/filters.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/apps/patchwork/filters.py b/apps/patchwork/filters.py index 228c9c2..a722a24 100644 --- a/apps/patchwork/filters.py +++ b/apps/patchwork/filters.py @@ -188,8 +188,18 @@ class StateFilter(Filter): def _form(self): str = '