diff options
author | A_D <A_D@snoonet.org> | 2018-07-25 21:41:05 +0200 |
---|---|---|
committer | Patrick Griffis <tingping@tingping.se> | 2018-11-09 18:36:59 -0500 |
commit | a2ff661d40bcd49a0be973b7b60583fde64e09c2 (patch) | |
tree | 6c2b32aaaa2804cb001368a5d83dd6ac93ab3425 /plugins | |
parent | 706f9bca82d463f6f1bd17d5dc609807e4a1e8a9 (diff) |
python: Various cffi fixes
- fixed /py exec behaviour - fixed hexchat.unload_hook() failing when passed a hook id - fixed get_list() calls in python3
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/python/_hexchat.py | 11 | ||||
-rw-r--r-- | plugins/python/python.py | 5 |
2 files changed, 13 insertions, 3 deletions
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, '<string>', 'eval', optimize=2, dont_inherit=True) + # newline appended to solve unexpected EOF issues + return compile(string + '\n', '<string>', '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: |