All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
1 from tasklib.serializing import SerializingObject
4 class TaskFilter(SerializingObject):
6 A set of parameters to filter the task list with.
9 def __init__(self, warrior, filter_params=None):
10 self.filter_params = filter_params or []
11 super(TaskFilter, self).__init__(warrior)
13 def add_filter(self, filter_str):
14 self.filter_params.append(filter_str)
16 def add_filter_param(self, key, value):
17 key = key.replace('__', '.')
19 # Replace the value with empty string, since that is the
20 # convention in TW for empty values
21 attribute_key = key.split('.')[0]
23 # Since this is user input, we need to normalize before we serialize
24 value = self._normalize(attribute_key, value)
25 value = self._serialize(attribute_key, value)
27 # If we are filtering by uuid:, do not use uuid keyword
30 self.filter_params.insert(0, value)
32 # Surround value with aphostrophes unless it's a empty string
33 value = "'%s'" % value if value else ''
35 # We enforce equality match by using 'is' (or 'none') modifier
36 # Without using this syntax, filter fails due to TW-1479
37 # which is, however, fixed in 2.4.5
38 if self.warrior.version < VERSION_2_4_5:
39 modifier = '.is' if value else '.none'
40 key = key + modifier if '.' not in key else key
42 self.filter_params.append(six.u("{0}:{1}").format(key, value))
44 def get_filter_params(self):
45 return [f for f in self.filter_params if f]
48 c = self.__class__(self.warrior)
49 c.filter_params = list(self.filter_params)