X-Git-Url: https://git.madduck.net/etc/taskwarrior.git/blobdiff_plain/ff45f9122b3f1a441491d9bcb0d9681039baea38..97eff0b3747614feaf9522d1338106ac98978c40:/tasklib/filters.py diff --git a/tasklib/filters.py b/tasklib/filters.py index 211302f..b7cab64 100644 --- a/tasklib/filters.py +++ b/tasklib/filters.py @@ -1,14 +1,43 @@ -from tasklib.serializing import SerializingObject +import abc +import six +from .serializing import SerializingObject -class TaskWarriorFilter(SerializingObject): +class TaskFilter(object): + """ + Abstract base class that defines interface of a TaskFilter. + """ + + @abc.abstractmethod + def add_filter(self, arg): + """ + Processes an non-keyword filter. + """ + pass + + @abc.abstractmethod + def add_filter_param(self, key, value): + """ + Processes a keyword filter. + """ + pass + + @abc.abstractmethod + def clone(self): + """ + Returns a new deep copy of itself. + """ + pass + + +class TaskWarriorFilter(TaskFilter, SerializingObject): """ A set of parameters to filter the task list with. """ - def __init__(self, warrior, filter_params=None): + def __init__(self, backend, filter_params=None): self.filter_params = filter_params or [] - super(TaskFilter, self).__init__(warrior) + super(TaskFilter, self).__init__(backend) def add_filter(self, filter_str): self.filter_params.append(filter_str) @@ -35,7 +64,7 @@ class TaskWarriorFilter(SerializingObject): # 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: + if self.backend.version < self.backend.VERSION_2_4_5: modifier = '.is' if value else '.none' key = key + modifier if '.' not in key else key @@ -45,6 +74,6 @@ class TaskWarriorFilter(SerializingObject): return [f for f in self.filter_params if f] def clone(self): - c = self.__class__(self.warrior) + c = self.__class__(self.backend) c.filter_params = list(self.filter_params) return c