All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
Thanks @xarthurx for proposing WSL support in #62. This commit adds
support in a different way, by allowing the "task" command to be
customised (to `wsl task`, for example).
VERSION_2_4_5 = six.u('2.4.5')
def __init__(self, data_location=None, create=True,
VERSION_2_4_5 = six.u('2.4.5')
def __init__(self, data_location=None, create=True,
- taskrc_location='~/.taskrc'):
+ taskrc_location='~/.taskrc', task_command='task'):
self.taskrc_location = os.path.expanduser(taskrc_location)
# If taskrc does not exist, pass / to use defaults and avoid creating
self.taskrc_location = os.path.expanduser(taskrc_location)
# If taskrc does not exist, pass / to use defaults and avoid creating
if not os.path.exists(self.taskrc_location):
self.taskrc_location = '/'
if not os.path.exists(self.taskrc_location):
self.taskrc_location = '/'
+ self.task_command = task_command
+
self._config = None
self.version = self._get_version()
self.overrides = {
self._config = None
self.version = self._get_version()
self.overrides = {
self.tasks = TaskQuerySet(self)
self.tasks = TaskQuerySet(self)
+ def _get_task_command(self):
+ return self.task_command.split()
+
def _get_command_args(self, args, config_override=None):
def _get_command_args(self, args, config_override=None):
- command_args = ['task', 'rc:{0}'.format(self.taskrc_location)]
+ command_args = self._get_task_command() + ['rc:{0}'.format(self.taskrc_location)]
overrides = self.overrides.copy()
overrides.update(config_override or dict())
for item in overrides.items():
overrides = self.overrides.copy()
overrides.update(config_override or dict())
for item in overrides.items():
def _get_version(self):
p = subprocess.Popen(
def _get_version(self):
p = subprocess.Popen(
+ self._get_task_command() + ['--version'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout, stderr = [x.decode('utf-8') for x in p.communicate()]
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout, stderr = [x.decode('utf-8') for x in p.communicate()]
def convert_datetime_string(self, value):
if self.version >= self.VERSION_2_4_0:
def convert_datetime_string(self, value):
if self.version >= self.VERSION_2_4_0:
- # For strings, use 'task calc' to evaluate the string to datetime
+ # For strings, use 'calc' to evaluate the string to datetime
# available since TW 2.4.0
args = value.split()
result = self.execute_command(['calc'] + args)
# available since TW 2.4.0
args = value.split()
result = self.execute_command(['calc'] + args)
class TasklibTest(unittest.TestCase):
class TasklibTest(unittest.TestCase):
+ def get_taskwarrior(self, **kwargs):
+ tw_kwargs = dict(
+ data_location=self.tmp,
+ taskrc_location='/',
+ )
+ tw_kwargs.update(kwargs)
+ return TaskWarrior(**tw_kwargs)
+
def setUp(self):
self.tmp = tempfile.mkdtemp(dir='.')
def setUp(self):
self.tmp = tempfile.mkdtemp(dir='.')
- self.tw = TaskWarrior(data_location=self.tmp, taskrc_location='/')
+ self.tw = self.get_taskwarrior()
def tearDown(self):
shutil.rmtree(self.tmp)
def tearDown(self):
shutil.rmtree(self.tmp)
+class TaskWarriorTest(TasklibTest):
+
+ def test_custom_command(self):
+ # ensure that a custom command which contains multiple parts
+ # is properly split up
+ tw = self.get_taskwarrior(task_command='wsl task')
+ self.assertEqual(tw._get_task_command(), ['wsl', 'task'])
+
+
class TaskFilterTest(TasklibTest):
def test_all_empty(self):
class TaskFilterTest(TasklibTest):
def test_all_empty(self):