From bdf51bd3e2cdf89a2747d31586ebe2ab700a47bb Mon Sep 17 00:00:00 2001 From: Jeroen Oudshoorn Date: Fri, 8 Sep 2023 20:29:11 +0200 Subject: [PATCH] Version 2.3.4 Signed-off-by: Jeroen Oudshoorn Signed-off-by: Jeroen Oudshoorn --- pwnagotchi/plugins/__init__.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/pwnagotchi/plugins/__init__.py b/pwnagotchi/plugins/__init__.py index f43a4140..2606b727 100644 --- a/pwnagotchi/plugins/__init__.py +++ b/pwnagotchi/plugins/__init__.py @@ -1,17 +1,15 @@ import os import glob +import _thread import threading import importlib, importlib.util import logging -from concurrent.futures import ThreadPoolExecutor default_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "default") loaded = {} database = {} locks = {} -THREAD_POOL_SIZE = 10 -executor = ThreadPoolExecutor(max_workers=THREAD_POOL_SIZE) class Plugin: @classmethod @@ -30,6 +28,7 @@ class Plugin: if cb is not None and callable(cb): locks["%s::%s" % (plugin_name, attr_name)] = threading.Lock() + def toggle_plugin(name, enable=True): """ Load or unload a plugin @@ -68,10 +67,12 @@ def toggle_plugin(name, enable=True): return False + def on(event_name, *args, **kwargs): for plugin_name in loaded.keys(): one(plugin_name, event_name, *args, **kwargs) + def locked_cb(lock_name, cb, *args, **kwargs): global locks @@ -81,6 +82,7 @@ def locked_cb(lock_name, cb, *args, **kwargs): with locks[lock_name]: cb(*args, *kwargs) + def one(plugin_name, event_name, *args, **kwargs): global loaded @@ -92,11 +94,12 @@ def one(plugin_name, event_name, *args, **kwargs): try: lock_name = "%s::%s" % (plugin_name, cb_name) locked_cb_args = (lock_name, callback, *args, *kwargs) - executor.submit(locked_cb, *locked_cb_args) + _thread.start_new_thread(locked_cb, locked_cb_args) except Exception as e: logging.error("error while running %s.%s : %s" % (plugin_name, cb_name, e)) logging.error(e, exc_info=True) + def load_from_file(filename): logging.debug("loading %s" % filename) plugin_name = os.path.basename(filename.replace(".py", "")) @@ -105,6 +108,7 @@ def load_from_file(filename): spec.loader.exec_module(instance) return plugin_name, instance + def load_from_path(path, enabled=()): global loaded, database logging.debug("loading plugins from %s - enabled: %s" % (path, enabled)) @@ -120,6 +124,7 @@ def load_from_path(path, enabled=()): return loaded + def load(config): enabled = [name for name, options in config['main']['plugins'].items() if 'enabled' in options and options['enabled']] @@ -137,4 +142,4 @@ def load(config): plugin.options = config['main']['plugins'][name] on('loaded') - on('config_changed', config) + on('config_changed', config) \ No newline at end of file