mirror of
https://github.com/jayofelony/pwnagotchi.git
synced 2025-07-01 18:37:27 -04:00
Version 2.3.4
Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com> Signed-off-by: Jeroen Oudshoorn <oudshoorn.jeroen@gmail.com>
This commit is contained in:
@ -1,17 +1,15 @@
|
|||||||
import os
|
import os
|
||||||
import glob
|
import glob
|
||||||
|
import _thread
|
||||||
import threading
|
import threading
|
||||||
import importlib, importlib.util
|
import importlib, importlib.util
|
||||||
import logging
|
import logging
|
||||||
from concurrent.futures import ThreadPoolExecutor
|
|
||||||
|
|
||||||
default_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "default")
|
default_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "default")
|
||||||
loaded = {}
|
loaded = {}
|
||||||
database = {}
|
database = {}
|
||||||
locks = {}
|
locks = {}
|
||||||
|
|
||||||
THREAD_POOL_SIZE = 10
|
|
||||||
executor = ThreadPoolExecutor(max_workers=THREAD_POOL_SIZE)
|
|
||||||
|
|
||||||
class Plugin:
|
class Plugin:
|
||||||
@classmethod
|
@classmethod
|
||||||
@ -30,6 +28,7 @@ class Plugin:
|
|||||||
if cb is not None and callable(cb):
|
if cb is not None and callable(cb):
|
||||||
locks["%s::%s" % (plugin_name, attr_name)] = threading.Lock()
|
locks["%s::%s" % (plugin_name, attr_name)] = threading.Lock()
|
||||||
|
|
||||||
|
|
||||||
def toggle_plugin(name, enable=True):
|
def toggle_plugin(name, enable=True):
|
||||||
"""
|
"""
|
||||||
Load or unload a plugin
|
Load or unload a plugin
|
||||||
@ -68,10 +67,12 @@ def toggle_plugin(name, enable=True):
|
|||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def on(event_name, *args, **kwargs):
|
def on(event_name, *args, **kwargs):
|
||||||
for plugin_name in loaded.keys():
|
for plugin_name in loaded.keys():
|
||||||
one(plugin_name, event_name, *args, **kwargs)
|
one(plugin_name, event_name, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
def locked_cb(lock_name, cb, *args, **kwargs):
|
def locked_cb(lock_name, cb, *args, **kwargs):
|
||||||
global locks
|
global locks
|
||||||
|
|
||||||
@ -81,6 +82,7 @@ def locked_cb(lock_name, cb, *args, **kwargs):
|
|||||||
with locks[lock_name]:
|
with locks[lock_name]:
|
||||||
cb(*args, *kwargs)
|
cb(*args, *kwargs)
|
||||||
|
|
||||||
|
|
||||||
def one(plugin_name, event_name, *args, **kwargs):
|
def one(plugin_name, event_name, *args, **kwargs):
|
||||||
global loaded
|
global loaded
|
||||||
|
|
||||||
@ -92,11 +94,12 @@ def one(plugin_name, event_name, *args, **kwargs):
|
|||||||
try:
|
try:
|
||||||
lock_name = "%s::%s" % (plugin_name, cb_name)
|
lock_name = "%s::%s" % (plugin_name, cb_name)
|
||||||
locked_cb_args = (lock_name, callback, *args, *kwargs)
|
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:
|
except Exception as e:
|
||||||
logging.error("error while running %s.%s : %s" % (plugin_name, cb_name, e))
|
logging.error("error while running %s.%s : %s" % (plugin_name, cb_name, e))
|
||||||
logging.error(e, exc_info=True)
|
logging.error(e, exc_info=True)
|
||||||
|
|
||||||
|
|
||||||
def load_from_file(filename):
|
def load_from_file(filename):
|
||||||
logging.debug("loading %s" % filename)
|
logging.debug("loading %s" % filename)
|
||||||
plugin_name = os.path.basename(filename.replace(".py", ""))
|
plugin_name = os.path.basename(filename.replace(".py", ""))
|
||||||
@ -105,6 +108,7 @@ def load_from_file(filename):
|
|||||||
spec.loader.exec_module(instance)
|
spec.loader.exec_module(instance)
|
||||||
return plugin_name, instance
|
return plugin_name, instance
|
||||||
|
|
||||||
|
|
||||||
def load_from_path(path, enabled=()):
|
def load_from_path(path, enabled=()):
|
||||||
global loaded, database
|
global loaded, database
|
||||||
logging.debug("loading plugins from %s - enabled: %s" % (path, enabled))
|
logging.debug("loading plugins from %s - enabled: %s" % (path, enabled))
|
||||||
@ -120,6 +124,7 @@ def load_from_path(path, enabled=()):
|
|||||||
|
|
||||||
return loaded
|
return loaded
|
||||||
|
|
||||||
|
|
||||||
def load(config):
|
def load(config):
|
||||||
enabled = [name for name, options in config['main']['plugins'].items() if
|
enabled = [name for name, options in config['main']['plugins'].items() if
|
||||||
'enabled' in options and options['enabled']]
|
'enabled' in options and options['enabled']]
|
||||||
@ -137,4 +142,4 @@ def load(config):
|
|||||||
plugin.options = config['main']['plugins'][name]
|
plugin.options = config['main']['plugins'][name]
|
||||||
|
|
||||||
on('loaded')
|
on('loaded')
|
||||||
on('config_changed', config)
|
on('config_changed', config)
|
Reference in New Issue
Block a user