summaryrefslogtreecommitdiff
path: root/python/workflow.py
diff options
context:
space:
mode:
authorBrian Potchik <brian@vector35.com>2025-01-22 10:48:44 -0500
committerBrian Potchik <brian@vector35.com>2025-01-22 10:48:44 -0500
commit8ba7106948272275534309d10a5a444f26df01ee (patch)
tree557da11f907b4f05d024c0e5d63a5580bd124130 /python/workflow.py
parentf1eccb70c2f23fc6665733d8c911b21eb36cbcf5 (diff)
Support eligibility callbacks through the API for Workflow actions.
Diffstat (limited to 'python/workflow.py')
-rw-r--r--python/workflow.py11
1 files changed, 8 insertions, 3 deletions
diff --git a/python/workflow.py b/python/workflow.py
index 8e97ee59..f1cbe99c 100644
--- a/python/workflow.py
+++ b/python/workflow.py
@@ -152,12 +152,17 @@ class Activity(object):
"""
_action_callbacks = {}
+ _eligibility_callbacks = {}
- def __init__(self, configuration: str = "", handle: Optional[core.BNActivityHandle] = None, action: Optional[Callable[[Any], None]] = None):
+ def __init__(self, configuration: str = "", handle: Optional[core.BNActivityHandle] = None, action: Optional[Callable[[Any], None]] = None, eligibility: Optional[Callable[[Any], bool]] = None):
if handle is None:
- #cls._notify(ac, callback)
action_callback = ctypes.CFUNCTYPE(None, ctypes.c_void_p, ctypes.POINTER(core.BNAnalysisContext))(lambda ctxt, ac: self._action(ac))
- _handle = core.BNCreateActivity(configuration, None, action_callback)
+ if eligibility:
+ eligibility_callback = ctypes.CFUNCTYPE(ctypes.c_bool, ctypes.c_void_p, ctypes.POINTER(core.BNActivity), ctypes.POINTER(core.BNAnalysisContext))(lambda ctxt, act, ac: eligibility(act, ac))
+ _handle = core.BNCreateActivityWithEligibility(configuration, None, action_callback, eligibility_callback)
+ self.__class__._eligibility_callbacks[len(self.__class__._eligibility_callbacks)] = eligibility_callback
+ else:
+ _handle = core.BNCreateActivity(configuration, None, action_callback)
self.action = action
self.__class__._action_callbacks[len(self.__class__._action_callbacks)] = action_callback
else: