From 5ba0e1105517f8b0e22b0bcf5c79f40a0fb644d9 Mon Sep 17 00:00:00 2001 From: Tomas Babej Date: Sat, 8 Aug 2015 23:38:22 +0200 Subject: [PATCH] filters: Move TaskFilter into separate module --- tasklib/filters.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++ tasklib/task.py | 49 --------------------------------------------- 2 files changed, 50 insertions(+), 49 deletions(-) create mode 100644 tasklib/filters.py diff --git a/tasklib/filters.py b/tasklib/filters.py new file mode 100644 index 0000000..1899d1d --- /dev/null +++ b/tasklib/filters.py @@ -0,0 +1,50 @@ +from tasklib.serializing import SerializingObject + + +class TaskFilter(SerializingObject): + """ + A set of parameters to filter the task list with. + """ + + def __init__(self, warrior, filter_params=None): + self.filter_params = filter_params or [] + super(TaskFilter, self).__init__(warrior) + + def add_filter(self, filter_str): + self.filter_params.append(filter_str) + + def add_filter_param(self, key, value): + key = key.replace('__', '.') + + # Replace the value with empty string, since that is the + # convention in TW for empty values + attribute_key = key.split('.')[0] + + # Since this is user input, we need to normalize before we serialize + value = self._normalize(attribute_key, value) + value = self._serialize(attribute_key, value) + + # If we are filtering by uuid:, do not use uuid keyword + # due to TW-1452 bug + if key == 'uuid': + self.filter_params.insert(0, value) + else: + # Surround value with aphostrophes unless it's a empty string + value = "'%s'" % value if value else '' + + # We enforce equality match by using 'is' (or 'none') modifier + # Without using this syntax, filter fails due to TW-1479 + # which is, however, fixed in 2.4.5 + if self.warrior.version < VERSION_2_4_5: + modifier = '.is' if value else '.none' + key = key + modifier if '.' not in key else key + + self.filter_params.append(six.u("{0}:{1}").format(key, value)) + + def get_filter_params(self): + return [f for f in self.filter_params if f] + + def clone(self): + c = self.__class__(self.warrior) + c.filter_params = list(self.filter_params) + return c diff --git a/tasklib/task.py b/tasklib/task.py index 211573d..614fd56 100644 --- a/tasklib/task.py +++ b/tasklib/task.py @@ -653,55 +653,6 @@ class Task(TaskResource): else: self._load_data(new_data) -class TaskFilter(SerializingObject): - """ - A set of parameters to filter the task list with. - """ - - def __init__(self, warrior, filter_params=None): - self.filter_params = filter_params or [] - super(TaskFilter, self).__init__(warrior) - - def add_filter(self, filter_str): - self.filter_params.append(filter_str) - - def add_filter_param(self, key, value): - key = key.replace('__', '.') - - # Replace the value with empty string, since that is the - # convention in TW for empty values - attribute_key = key.split('.')[0] - - # Since this is user input, we need to normalize before we serialize - value = self._normalize(attribute_key, value) - value = self._serialize(attribute_key, value) - - # If we are filtering by uuid:, do not use uuid keyword - # due to TW-1452 bug - if key == 'uuid': - self.filter_params.insert(0, value) - else: - # Surround value with aphostrophes unless it's a empty string - value = "'%s'" % value if value else '' - - # We enforce equality match by using 'is' (or 'none') modifier - # Without using this syntax, filter fails due to TW-1479 - # which is, however, fixed in 2.4.5 - if self.warrior.version < VERSION_2_4_5: - modifier = '.is' if value else '.none' - key = key + modifier if '.' not in key else key - - self.filter_params.append(six.u("{0}:{1}").format(key, value)) - - def get_filter_params(self): - return [f for f in self.filter_params if f] - - def clone(self): - c = self.__class__(self.warrior) - c.filter_params = list(self.filter_params) - return c - - class TaskQuerySet(object): """ Represents a lazy lookup for a task objects. -- 2.39.2