The script is for use with GenericPolling, which checks the completion condition. It uses a DT to retrieve a value from the context data and evaluates it using another DT.
import demistomock as demisto # noqa: F401
from CommonServerPython import * # noqa: F401
import urllib.parse
import base64
def decode(
value: str | None,
encoding: str,
) -> str | None:
if value is not None:
if encoding == "url":
value = urllib.parse.unquote(value)
elif encoding == "base64":
value = base64.b64decode(value.encode()).decode()
elif encoding != "raw":
raise DemistoException(f"Invalid encoding scheme - {encoding}")
return value
def evaluate(
id: str,
value_dt: str,
eval_dt: str | None,
eval_key: str | None,
context: dict[str, Any],
) -> CommandResults:
value = demisto.dt(context, value_dt)
if eval_dt:
if eval_key:
value = {eval_key: value}
value = demisto.dt(value, eval_dt)
if not value:
ok = False
elif isinstance(value, str):
ok = value.lower() != "false"
else:
ok = True
return CommandResults(
outputs_key_field="id",
outputs_prefix="EvaluateContextValue",
outputs={"id": id, "ok": ok},
readable_output=f"The conditions evaluated to {json.dumps(ok)}. id = {id}.",
)
def main():
try:
args = demisto.args()
dt_encoding = args.get("dt_encoding") or "raw"
value_dt = decode(args.get("value_dt"), dt_encoding) or ""
eval_dt = decode(args.get("eval_dt") or "", dt_encoding)
context = demisto.context()
if playbook_id := args.get("playbook_id"):
context = context.get(f"subplaybook-{playbook_id}", {})
return_results(
evaluate(
id=args.get("id"),
value_dt=value_dt,
eval_dt=eval_dt,
eval_key=args.get("eval_key"),
context=context,
)
)
except Exception as err:
demisto.error(traceback.format_exc()) # print the traceback
return_error(f"Failed to execute EvaluateContextValue script. Error: {err!s}")
""" ENTRY POINT """
if __name__ in ("__main__", "__builtin__", "builtins"):
main()
README
The script is for use with GenericPolling, which checks the completion condition. It uses a DT to retrieve a value from the context data and evaluates it using another DT.
Script Data
Name
Description
Script Type
python3
Tags
evaluation, polling
Inputs
Argument Name
Description
id
The ID to identify the output value.
dt_encoding
The encoding scheme for the value_dt and eval_dt parameters. This can be useful for those parameters that contain special characters and require complex escaping.
value_dt
The DT expression for retrieving a value from the context data.
eval_dt
The DT expression for retrieving data for the evaluation from the value.
eval_key
The key name that is associated with the value before it’s passed to eval_dt. If this parameter is provided, eval_dt receives a key-value pair (the key name and the value for the evaluation) in a dictionary.
playbook_id
The sub-playbook ID to get its local context from the context data.