diff --git a/taskwiki/cache.py b/taskwiki/cache.py index 638b6aa..a1e0e67 100644 --- a/taskwiki/cache.py +++ b/taskwiki/cache.py @@ -59,6 +59,12 @@ class TaskCache(object): default_data = vim.vars.get('taskwiki_data_location') or '~/.task' extra_warrior_defs = vim.vars.get('taskwiki_extra_warriors', {}) + # Handle bytes (vim returnes bytes for Python3) + if six.PY3: + default_rc = util.decode_bytes(default_rc) + default_data = util.decode_bytes(default_data) + extra_warrior_defs = util.decode_bytes(extra_warrior_defs) + self.buffer = BufferProxy(vim.current.buffer.number) self.task = store.TaskStore(self) self.vwtask = store.VwtaskStore(self) diff --git a/taskwiki/util.py b/taskwiki/util.py index cc6a043..a4948fc 100644 --- a/taskwiki/util.py +++ b/taskwiki/util.py @@ -372,3 +372,23 @@ def enforce_dependencies(cache): if taskwarrior_required_version > taskwarrior_installed_version: raise TaskWikiException("Taskwarrior version at least %s is required." % TASKWARRIOR_VERSION) + +def decode_bytes(var): + """ + Data structures obtained from vim under python3 will return bytestrings. + Make sure we can handle that. + """ + + if isinstance(var, bytes): + return var.decode() + + if isinstance(var, list): + return list([decode_bytes(element) for element in var]) + + if isinstance(var, dict) or 'vim.dictionary' in str(type(var)): + return { + decode_bytes(key): decode_bytes(value) + for key, value in var.items() + } + + return var