from django.utils.safestring import mark_safe
from django.utils.html import escape
from django.contrib.auth.models import User
+from urllib import quote
class Filter(object):
def __init__(self, filters):
class StateFilter(Filter):
param = 'state'
- action_req_key = '!'
+ any_key = '*'
+ action_req_str = 'Action Required'
def __init__(self, filters):
super(StateFilter, self).__init__(filters)
self.name = 'State'
self.state = None
- self.action_req = None
+ self.applied = True
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
+ if str == self.any_key:
+ self.applied = False
return
try:
self.applied = True
def kwargs(self):
- if self.action_req == True:
+ if self.state is not None:
+ return {'state': self.state}
+ else:
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):
if self.state:
return self.state.name
- elif self.action_req == True:
- return 'Action Required'
- return None
-
+ return self.action_req_str
def key(self):
- if self.action_req == True:
- return self.action_req_key
- if self.state is None:
- return None
- return self.state.id
+ if self.state is not None:
+ return self.state.id
+ if not self.applied:
+ return '*'
+ return None
def _form(self):
str = '<select name="%s">' % self.param
- str += '<option value="">any</option>'
- if self.action_req_key:
- str += '<option value="%s">Action Required</option>' % \
- self.action_req_key
+
+ selected = ''
+ if not self.applied:
+ selected = 'selected'
+ str += '<option %s value="%s">any</option>' % (selected, self.any_key)
+
+ selected = ''
+ if self.applied and self.state == None:
+ selected = 'selected'
+ str += '<option %s value="">%s</option>' % \
+ (selected, self.action_req_str)
+
for state in State.objects.all():
selected = ''
if self.state and self.state == state:
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):
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
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 =
if not self.applied:
selected = 'selected'
- str += '<option %s value="*">------</option>' % selected
+ str += '<option %s value="">------</option>' % selected
selected = ''
- if self.delegate is None:
+ if self.applied and self.delegate is None:
selected = 'selected'
- str += '<option %s value="">Nobody</option>' % selected
+ str += '<option %s value="%s">%s</option>' % \
+ (selected, self.no_delegate_key, self.no_delegate_str)
for d in delegates:
selected = ''
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:
for (k, v) in self.dict.iteritems():
if k not in params:
- params[k] = v[0]
+ params[k] = v
if remove is not None:
if remove.param in params.keys():
del params[remove.param]
- return '?' + '&'.join(['%s=%s' % x for x in params.iteritems()])
+ pairs = params.iteritems()
+
+ def sanitise(s):
+ if not isinstance(s, basestring):
+ s = unicode(s)
+ return quote(s.encode('utf-8'))
+
+ return '?' + '&'.join(['%s=%s' % (sanitise(k), sanitise(v))
+ for (k, v) in pairs])
def querystring_without_filter(self, filter):
return self.querystring(filter)