AddKeyToList
Adds/Replaces a key in key/value store backed by an XSOAR list.
- Type
- python
- Pack
- CommonScripts
Source
import demistomock as demisto # noqa: F401
from CommonServerPython import * # noqa: F401
"""AddKeyToList
Adds/Updates a Key to a JSON-backed List
"""
from CommonServerUserPython import * # noqa
from typing import Any
import traceback
""" STANDALONE FUNCTION """
def add_key_to_list(list_name: str, key_name: str, value: str, append: bool = False, allow_dups: bool = False) -> str:
res = demisto.executeCommand("getList", {"listName": list_name})
if (
not isinstance(res, list)
or "Contents" not in res[0]
or not isinstance(res[0]["Contents"], str)
or res[0]["Contents"] == "Item not found (8)"
):
raise ValueError(f"Cannot retrieve list {list_name}")
list_data: dict = {}
data: str = res[0]["Contents"]
if data and len(data) > 0:
try:
list_data = json.loads(data)
except json.decoder.JSONDecodeError as e:
raise ValueError(f"List does not contain valid JSON data: {e}")
if append and key_name in list_data:
entries: List = []
if isinstance(list_data[key_name], list):
entries = list_data[key_name]
else:
entries = [list_data[key_name]]
if value in entries and allow_dups is False:
return f"Value already present in key {key_name} of list {list_name}: not appending."
entries.append(value)
list_data[key_name] = entries
else:
list_data[key_name] = value
demisto.executeCommand("setList", {"listName": list_name, "listData": json.dumps(list_data)})
return f"Successfully updated list {list_name}."
""" COMMAND FUNCTION """
def add_key_to_list_command(args: dict[str, Any]) -> CommandResults:
list_name = args.get("listName", None)
if not list_name:
raise ValueError("listName must be specified")
key_name = args.get("keyName", None)
if not key_name:
raise ValueError("keyName must be specified")
value = args.get("value", None)
if not value:
raise ValueError("value must be specified")
append = argToBoolean(args.get("append"))
allow_dups = argToBoolean(args.get("allowDups"))
# Call the standalone function and get the raw response
result = add_key_to_list(list_name, key_name, value, append, allow_dups)
return CommandResults(readable_output=result)
""" MAIN FUNCTION """
def main():
try:
return_results(add_key_to_list_command(demisto.args()))
except Exception as ex:
demisto.error(traceback.format_exc()) # print the traceback
return_error(f"Failed to execute AddKeyToList. Error: {ex!s}")
""" ENTRY POINT """
if __name__ in ("__main__", "__builtin__", "builtins"):
main()
README
Adds/Replaces a key in key/value store backed by an XSOAR list.
Script Data
| Name | Description |
|---|---|
| Script Type | python3 |
| Tags | |
| Cortex XSOAR Version | 5.0.0 |
Inputs
| Argument Name | Description |
|---|---|
| listName | List name. |
| keyName | Key. |
| value | Key Value. |
| append | Append to key. |
| allowDups | Allow duplicates in array keys. |
Outputs
There are no outputs for this script.
Script Example
!AddKeyToList listName="NewList" keyName="SomeKey" value="TestValue"
Context Example
{}
Human Readable Output
Successfully updated list NewList.