From 47ee2ff2a334a50137255faa54504594be9eaf6d Mon Sep 17 00:00:00 2001 From: Rob Golding-Day Date: Mon, 6 May 2019 10:56:35 -0400 Subject: [PATCH] Add support for custom `task` location or command 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). --- tasklib/backends.py | 13 +++++++++---- tasklib/tests.py | 19 ++++++++++++++++++- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/tasklib/backends.py b/tasklib/backends.py index 9110e12..a5dd280 100644 --- a/tasklib/backends.py +++ b/tasklib/backends.py @@ -95,7 +95,7 @@ class TaskWarrior(Backend): 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 @@ -103,6 +103,8 @@ class TaskWarrior(Backend): 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 = { @@ -127,8 +129,11 @@ class TaskWarrior(Backend): self.tasks = TaskQuerySet(self) + def _get_task_command(self): + return self.task_command.split() + 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(): @@ -141,7 +146,7 @@ class TaskWarrior(Backend): def _get_version(self): p = subprocess.Popen( - ['task', '--version'], + self._get_task_command() + ['--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout, stderr = [x.decode('utf-8') for x in p.communicate()] @@ -222,7 +227,7 @@ class TaskWarrior(Backend): 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) diff --git a/tasklib/tests.py b/tasklib/tests.py index d53fc31..6cba1fc 100644 --- a/tasklib/tests.py +++ b/tasklib/tests.py @@ -47,14 +47,31 @@ def total_seconds_2_6(x): 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='.') - self.tw = TaskWarrior(data_location=self.tmp, taskrc_location='/') + self.tw = self.get_taskwarrior() 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): -- 2.39.5