X-Git-Url: https://git.madduck.net/etc/taskwarrior.git/blobdiff_plain/76ef07d9a8863b337a7aca651842f094472f867f..9a7dac4599f198c52f268ae8bcc0267743ef934f:/tasklib/lazy.py diff --git a/tasklib/lazy.py b/tasklib/lazy.py index 1e13fc3..e5b3492 100644 --- a/tasklib/lazy.py +++ b/tasklib/lazy.py @@ -32,15 +32,24 @@ class LazyUUIDTask(object): return getattr(self, name) def __eq__(self, other): - if other['uuid']: + if other and other['uuid']: # For saved Tasks, just define equality by equality of uuids return self['uuid'] == other['uuid'] + def __ne__(self, other): + return not self.__eq__(other) + def __hash__(self): return self['uuid'].__hash__() def __repr__(self): - return "LazyUUIDTask: {0}".format(self._uuid) + return 'LazyUUIDTask: {0}'.format(self._uuid) + + def __copy__(self): + return LazyUUIDTask(self._tw, self._uuid) + + def __deepcopy__(self, memo): + return LazyUUIDTask(self._tw, self._uuid) @property def saved(self): @@ -49,6 +58,14 @@ class LazyUUIDTask(object): """ return True + @property + def _modified_fields(self): + return set() + + @property + def modified(self): + return False + def replace(self): """ Performs conversion to the regular Task object, referenced by the @@ -86,10 +103,10 @@ class LazyUUIDTaskSet(object): return getattr(self, name) def __repr__(self): - return "LazyUUIDTaskSet([{0}])".format(', '.join(self._uuids)) + return 'LazyUUIDTaskSet([{0}])'.format(', '.join(self._uuids)) def __eq__(self, other): - return set(t['uuid'] for t in other) == self._uuids + return (set(t['uuid'] for t in other) if other else set()) == self._uuids def __ne__(self, other): return not (self == other) @@ -105,8 +122,49 @@ class LazyUUIDTaskSet(object): yield LazyUUIDTask(self._tw, uuid) def __sub__(self, other): - return LazyUUIDTaskSet(self._tw, - self._uuids - set(t['uuid'] for t in other)) + return self.difference(other) + + def __isub__(self, other): + return self.difference_update(other) + + def __rsub__(self, other): + return LazyUUIDTaskSet( + self._tw, + set(t['uuid'] for t in other) - self._uuids, + ) + + def __or__(self, other): + return self.union(other) + + def __ior__(self, other): + return self.update(other) + + def __ror__(self, other): + return self.union(other) + + def __xor__(self, other): + return self.symmetric_difference(other) + + def __ixor__(self, other): + return self.symmetric_difference_update(other) + + def __rxor__(self, other): + return self.symmetric_difference(other) + + def __and__(self, other): + return self.intersection(other) + + def __iand__(self, other): + return self.intersection_update(other) + + def __rand__(self, other): + return self.intersection(other) + + def __le__(self, other): + return self.issubset(other) + + def __ge__(self, other): + return self.issuperset(other) def issubset(self, other): return all([task in other for task in self]) @@ -115,20 +173,28 @@ class LazyUUIDTaskSet(object): return all([task in self for task in other]) def union(self, other): - return LazyUUIDTaskSet(self._tw, - self._uuids | set(t['uuid'] for t in other)) + return LazyUUIDTaskSet( + self._tw, + self._uuids | set(t['uuid'] for t in other), + ) def intersection(self, other): - return LazyUUIDTaskSet(self._tw, - self._uuids & set(t['uuid'] for t in other)) + return LazyUUIDTaskSet( + self._tw, + self._uuids & set(t['uuid'] for t in other), + ) def difference(self, other): - return LazyUUIDTaskSet(self._tw, - self._uuids - set(t['uuid'] for t in other)) + return LazyUUIDTaskSet( + self._tw, + self._uuids - set(t['uuid'] for t in other), + ) def symmetric_difference(self, other): - return LazyUUIDTaskSet(self._tw, - self._uuids ^ set(t['uuid'] for t in other)) + return LazyUUIDTaskSet( + self._tw, + self._uuids ^ set(t['uuid'] for t in other), + ) def update(self, other): self._uuids |= set(t['uuid'] for t in other)