X-Git-Url: https://git.madduck.net/etc/taskwarrior.git/blobdiff_plain/4ed5af30a93bb2840e437230e87422a8bebc9b74..b2f9a6b962ba9ef1fabd21cb0a5f2e799022e16a:/tasklib/task.py diff --git a/tasklib/task.py b/tasklib/task.py index de0443c..810406e 100644 --- a/tasklib/task.py +++ b/tasklib/task.py @@ -1,8 +1,10 @@ +from __future__ import print_function import copy import datetime import json import logging import os +import six import subprocess DATE_FORMAT = '%Y%m%dT%H%M%SZ' @@ -36,8 +38,14 @@ class TaskResource(object): self._data[key] = dehydrate_func(value) self._modified_fields.add(key) + def __str__(self): + s = six.text_type(self.__unicode__()) + if not six.PY3: + s = s.encode('utf-8') + return s + def __repr__(self): - return self.__unicode__() + return str(self) class TaskAnnotation(TaskResource): @@ -151,7 +159,17 @@ class TaskFilter(object): def add_filter_param(self, key, value): key = key.replace('__', '.') - self.filter_params.append('{0}:{1}'.format(key, value)) + + # Replace the value with empty string, since that is the + # convention in TW for empty values + value = value if value is not None else '' + + # 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: + self.filter_params.append('{0}:{1}'.format(key, value)) def get_filter_params(self): return [f for f in self.filter_params if f] @@ -297,7 +315,7 @@ class TaskWarrior(object): logger.debug(' '.join(command_args)) p = subprocess.Popen(command_args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - stdout, stderr = [x.decode() for x in p.communicate()] + stdout, stderr = [x.decode('utf-8') for x in p.communicate()] if p.returncode: if stderr.strip(): error_msg = stderr.strip().splitlines()[-1]