ChangeHistory
python · Content Testing
Source
from typing import Any import demistomock as demisto # noqa: F401 from CommonServerPython import * # noqa: F401 vcuris = [ "/vc/history/list/all/-1", "/vc/history/playbook/all/-1", "/vc/history/automation/all/-1", "/vc/history/incidenttype/all/-1", "/vc/history/incidentfield/all/-1", "/vc/history/layoutscontainer/all/-1", "/vc/history/reputation/all/-1", "/vc/history/generictype/all/-1", "/vc/history/integration/all/-1", "/vc/history/preprocessrule/all/-1", ] def main(): try: # Get the local, uncommitted changed objects changes = demisto.executeCommand("core-api-get", {"uri": "/vc/changes/uncommitted"})[0]["Contents"]["response"] # Build the changed object dictionary itypes: dict[str, dict[str, dict[str, Any]]] itypes = {} if changes is not None: for item in changes: msg = item.get("message", "no message") if item["type"] not in itypes: itypes[item["type"]] = {} itypes[item["type"]][item["name"]] = {"action": item["action"], "message": msg, "history": []} # Get all the commit histories commits = [] for uri in vcuris: commits.append(demisto.executeCommand("core-api-get", {"uri": uri})[0]["Contents"]["response"]["commits"]) # Add commit histories to the changed objects for ctype in commits: for c in ctype: # Skip commit history if no changed objects of same type if c["type"] not in itypes: continue # Skip commit history if no changed object of same name if c["name"] not in itypes[c["type"]]: continue if c["commitMessage"] == "": c["commitMessage"] = "no message" a = {"action": c["action"], "message": c["commitMessage"]} itypes[c["type"]][c["name"]]["history"].append(a) # Generate output output = "## Current Local Changes History\n" for typekey, value in itypes.items(): output += f"### {typekey}\n" for key, _value in value.items(): output += f"#### {key}:\n" # If no commit history found (that includes the most recent action), use the most recent action if len(itypes[typekey][key]["history"]) == 0: a = {"action": itypes[typekey][key]["action"], "message": itypes[typekey][key]["message"]} itypes[typekey][key]["history"].append(a) for entry in itypes[typekey][key]["history"]: output += f"{entry['action']}, {entry['message']}\n" demisto.executeCommand("setIncident", {"customFields": json.dumps({"contenttestingcommithistory": output})}) except Exception as ex: demisto.error(traceback.format_exc()) return_error(f"ChangeHistory: Exception failed to execute. Error: {ex!s}") if __name__ in ("__main__", "__builtin__", "builtins"): main()