From a2ff661d40bcd49a0be973b7b60583fde64e09c2 Mon Sep 17 00:00:00 2001 From: A_D Date: Wed, 25 Jul 2018 21:41:05 +0200 Subject: python: Various cffi fixes - fixed /py exec behaviour - fixed hexchat.unload_hook() failing when passed a hook id - fixed get_list() calls in python3 --- plugins/python/_hexchat.py | 11 ++++++++++- plugins/python/python.py | 5 +++-- 2 files changed, 13 insertions(+), 3 deletions(-) (limited to 'plugins/python') diff --git a/plugins/python/_hexchat.py b/plugins/python/_hexchat.py index 52b3ec14..50ccfb83 100644 --- a/plugins/python/_hexchat.py +++ b/plugins/python/_hexchat.py @@ -150,6 +150,15 @@ class ListItem: return '<{} list item at {}>'.format(self._listname, id(self)) +# done this way for speed +if sys.version_info[0] == 2: + def get_getter(name): + return ord(name[0]) +else: + def get_getter(name): + return name[0] + + def get_list(name): # XXX: This function is extremely inefficient and could be interators and # lazily loaded properties, but for API compat we stay slow @@ -189,7 +198,7 @@ def get_list(name): while lib.hexchat_list_next(lib.ph, list_) is 1: item = ListItem(orig_name) for field in fields: - getter = getters.get(ord(field[0])) + getter = getters.get(get_getter(field)) if getter is not None: field_name = field[1:] setattr(item, __cached_decoded_str(field_name), getter(field_name)) diff --git a/plugins/python/python.py b/plugins/python/python.py index 3845a79f..e6a61b5e 100644 --- a/plugins/python/python.py +++ b/plugins/python/python.py @@ -98,7 +98,8 @@ else: return compile(data, filename, 'exec', optimize=2, dont_inherit=True) def compile_line(string): - return compile(string, '', 'eval', optimize=2, dont_inherit=True) + # newline appended to solve unexpected EOF issues + return compile(string + '\n', '', 'single', optimize=2, dont_inherit=True) class Plugin: @@ -122,7 +123,7 @@ class Plugin: def remove_hook(self, hook): for h in self.hooks: if id(h) == hook: - ud = hook.userdata + ud = h.userdata self.hooks.remove(h) return ud else: -- cgit 1.4.1