forked from puhanfmc3/tentest
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.4 KiB
45 lines
1.4 KiB
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
_hooks = {}
|
|
|
|
|
|
def register(hook_name: str, callback: callable):
|
|
"""
|
|
注册一个钩子回调。
|
|
"""
|
|
if hook_name not in _hooks:
|
|
_hooks[hook_name] = []
|
|
_hooks[hook_name].append(callback)
|
|
logger.debug(f"Registered hook '{hook_name}' with callback '{callback.__name__}'")
|
|
|
|
|
|
def run_action(hook_name: str, *args, **kwargs):
|
|
"""
|
|
执行一个 Action Hook。
|
|
它会按顺序执行所有注册到该钩子上的回调函数。
|
|
"""
|
|
if hook_name in _hooks:
|
|
logger.debug(f"Running action hook '{hook_name}'")
|
|
for callback in _hooks[hook_name]:
|
|
try:
|
|
callback(*args, **kwargs)
|
|
except Exception as e:
|
|
logger.error(f"Error running action hook '{hook_name}' callback '{callback.__name__}': {e}", exc_info=True)
|
|
|
|
|
|
def apply_filters(hook_name: str, value, *args, **kwargs):
|
|
"""
|
|
执行一个 Filter Hook。
|
|
它会把 value 依次传递给所有注册的回调函数进行处理。
|
|
"""
|
|
if hook_name in _hooks:
|
|
logger.debug(f"Applying filter hook '{hook_name}'")
|
|
for callback in _hooks[hook_name]:
|
|
try:
|
|
value = callback(value, *args, **kwargs)
|
|
except Exception as e:
|
|
logger.error(f"Error applying filter hook '{hook_name}' callback '{callback.__name__}': {e}", exc_info=True)
|
|
return value
|