X-Git-Url: https://git.madduck.net/etc/taskwarrior.git/blobdiff_plain/7b0f22cf6cf519ece57e5282412669f460859293..71d228aa43ba3912ad252a9724b14fcb5a6cd12d:/tasklib/task.py?ds=sidebyside diff --git a/tasklib/task.py b/tasklib/task.py index 61f944a..5a86529 100644 --- a/tasklib/task.py +++ b/tasklib/task.py @@ -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']) @@ -712,43 +708,8 @@ class Task(TaskResource): if not self.saved: raise Task.NotSaved("Task needs to be saved to be refreshed") - # We need to use ID as backup for uuid here for the refreshes - # of newly saved tasks. Any other place in the code is fine - # with using UUID only. - args = [self['uuid'] or self['id'], 'export'] - output = self.warrior.execute_command(args) - - def valid(output): - return len(output) == 1 and output[0].startswith('{') - - # For older TW versions attempt to uniquely locate the task - # using the data we have if it has been just saved. - # This can happen when adding a completed task on older TW versions. - if (not valid(output) and self.warrior.version < VERSION_2_4_5 - and after_save): - - # Make a copy, removing ID and UUID. It's most likely invalid - # (ID 0) if it failed to match a unique task. - data = copy.deepcopy(self._data) - data.pop('id', None) - data.pop('uuid', None) - - taskfilter = TaskFilter(self.warrior) - for key, value in data.items(): - taskfilter.add_filter_param(key, value) - - output = self.warrior.execute_command(['export', '--'] + - taskfilter.get_filter_params()) - - # If more than 1 task has been matched still, raise an exception - if not valid(output): - raise TaskWarriorException( - "Unique identifiers {0} with description: {1} matches " - "multiple tasks: {2}".format( - self['uuid'] or self['id'], self['description'], output) - ) + new_data = self.backend.refresh_task(self, after_save=after_save) - new_data = json.loads(output[0]) if only_fields: to_update = dict( [(k, new_data.get(k)) for k in only_fields])