X-Git-Url: https://git.madduck.net/etc/taskwarrior.git/blobdiff_plain/0531935967fd784f762215d35bcae90194e0ff90..15c5d693afb61c72f6a6984c25dacb8610b2d9a8:/tasklib/task.py?ds=inline diff --git a/tasklib/task.py b/tasklib/task.py index 4f10b9d..3f53511 100644 --- a/tasklib/task.py +++ b/tasklib/task.py @@ -586,7 +586,7 @@ class Task(TaskResource): if self.deleted: raise Task.DeletedTask("Task was already deleted") - self.warrior.execute_command([self['uuid'], 'delete']) + self.backend.delete_task(self) # Refresh the status again, so that we have updated info stored self.refresh(only_fields=['status', 'start', 'end']) @@ -605,7 +605,7 @@ class Task(TaskResource): elif self.active: raise Task.ActiveTask("Task is already active") - self.warrior.execute_command([self['uuid'], 'start']) + self.backend.start_task(self) # Refresh the status again, so that we have updated info stored self.refresh(only_fields=['status', 'start']) @@ -620,7 +620,7 @@ class Task(TaskResource): if not self.active: raise Task.InactiveTask("Cannot stop an inactive task") - self.warrior.execute_command([self['uuid'], 'stop']) + self.backend.stop_task(self) # Refresh the status again, so that we have updated info stored self.refresh(only_fields=['status', 'start']) @@ -637,11 +637,7 @@ class Task(TaskResource): elif self.deleted: raise Task.DeletedTask("Deleted task cannot be completed") - # Older versions of TW do not stop active task at completion - if self.warrior.version < VERSION_2_4_0 and self.active: - self.stop() - - self.warrior.execute_command([self['uuid'], 'done']) + self.backend.complete_task(self) # Refresh the status again, so that we have updated info stored self.refresh(only_fields=['status', 'start', 'end']) @@ -650,33 +646,8 @@ class Task(TaskResource): if self.saved and not self.modified: return - args = [self['uuid'], 'modify'] if self.saved else ['add'] - args.extend(self._get_modified_fields_as_args()) - output = self.warrior.execute_command(args) - - # Parse out the new ID, if the task is being added for the first time - if not self.saved: - id_lines = [l for l in output if l.startswith('Created task ')] - - # Complain loudly if it seems that more tasks were created - # Should not happen - if len(id_lines) != 1 or len(id_lines[0].split(' ')) != 3: - raise TaskWarriorException("Unexpected output when creating " - "task: %s" % '\n'.join(id_lines)) - - # Circumvent the ID storage, since ID is considered read-only - identifier = id_lines[0].split(' ')[2].rstrip('.') - - # Identifier can be either ID or UUID for completed tasks - try: - self._data['id'] = int(identifier) - except ValueError: - self._data['uuid'] = identifier - - # Refreshing is very important here, as not only modification time - # is updated, but arbitrary attribute may have changed due hooks - # altering the data before saving - self.refresh(after_save=True) + # All the actual work is done by the backend + self.backend.save_task(self) def add_annotation(self, annotation): if not self.saved: