summary refs log tree commit diff stats
path: root/plugins/python
diff options
context:
space:
mode:
authorA_D <A_D@snoonet.org>2018-07-25 21:41:05 +0200
committerPatrick Griffis <tingping@tingping.se>2018-11-09 18:36:59 -0500
commita2ff661d40bcd49a0be973b7b60583fde64e09c2 (patch)
tree6c2b32aaaa2804cb001368a5d83dd6ac93ab3425 /plugins/python
parent706f9bca82d463f6f1bd17d5dc609807e4a1e8a9 (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/python')
-rw-r--r--plugins/python/_hexchat.py11
-rw-r--r--plugins/python/python.py5
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: