python3: Data structures accesed from vim return bytes

This commit is contained in:
Tomas Babej 2016-12-16 03:46:37 +01:00
parent d0014a47a2
commit edb148cad4
2 changed files with 26 additions and 0 deletions

View file

@ -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)

View file

@ -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