MissingElements

Returns the list of missing elements from an input list of integers. e.g. [12,14,16] -> [13,15].

python · Community Common Scripts

Source

import demistomock as demisto  # noqa: F401
from CommonServerPython import *  # noqa: F401


def sanitize_input(value: Any, start: Optional[Any], end: Optional[Any]) -> tuple[list[int], Optional[int], Optional[int]]:
    """
    Sanitizes and validates the input values.
    """
    if value is None:
        return_error("Missing 'value' argument.")

    if isinstance(value, str):
        try:
            value = [int(item.strip().strip("\"'")) for item in value.strip("[]").split(",") if item.strip()]
        except ValueError:
            return_error("Input list contains non-integer values.")

    elif isinstance(value, list):
        try:
            value = [int(item) for item in value]
        except ValueError:
            return_error("Input list contains non-integer values.")
    else:
        return_error("Invalid input type for 'value'. Expected list or comma-separated string.")

    # Convert start and end to integers if provided
    try:
        start = int(start) if start else None
    except ValueError:
        return_error("Start value must be an integer.")

    try:
        end = int(end) if end else None
    except ValueError:
        return_error("End value must be an integer.")

    return value, start, end


def missing_elements(value: list[int], start: Optional[int], end: Optional[int]) -> CommandResults:
    """
    Returns missing elements in a range.
    """
    if not value:
        return_error("The input list is empty.")

    if start is None:
        start = min(value)
    if end is None:
        end = max(value)

    if start > end:
        return_error("Start value cannot be greater than End value.")
    if end < start:
        return_error("End value cannot be lesser than Start value.")

    expected_range = set(range(start, end + 1))
    input_set = set(value)
    missing: Optional[list[int]] = sorted(expected_range - input_set)

    if not missing:
        missing = None

    return CommandResults(
        outputs={"output": missing},
        outputs_prefix="MissingElements",
        readable_output=f"Missing elements: {missing}",
    )


def main():
    try:
        args = demisto.args()
        value = args.get("value")
        start = args.get("start")
        end = args.get("end")

        sanitized_value, sanitized_start, sanitized_end = sanitize_input(value, start, end)
        results = missing_elements(sanitized_value, sanitized_start, sanitized_end)
        return_results(results)

    except Exception as e:
        return_error(f"Failed to execute 'MissingElements'. Error: {str(e)}")


if __name__ in ("__main__", "__builtin__", "builtins"):
    main()

README

Returns the list of missing elements from an input list of integers.

e.g. [12,14,16] -> [13,15]

Script Data


Name Description
Script Type python3
Tags Utilities

Inputs


Argument Name Description
value An input list of integers.
start Start of the range.
end End of the range.

Outputs


Path Description
MissingElements.output The missing elements from the input list of integers.