def validate_issue()

in bot/tools/validator.py [0:0]


def validate_issue(payload):
    """Validate an issue payload"""
    assert isinstance(payload, dict), "Issue must be a dict"

    # Check all required keys are here
    keys = set(payload.keys())
    required = {field.name for field in FIELDS if field.required is True}
    diff = required.difference(keys)
    if diff:
        raise Exception("Missing required keys {}".format(", ".join(sorted(diff))))

    # Check no extra keys is set
    diff = keys.difference(field.name for field in FIELDS)
    if diff:
        logger.warning(
            "Extra fields will not be used: {}".format(", ".join(sorted(diff)))
        )

    # Validate all fields one by one
    for field in FIELDS:
        if field.name in payload:
            logger.debug(f"Validating field {field.name}")
            for validator in field.validators:
                try:
                    validator(payload[field.name])
                except Exception as e:
                    raise Exception(f"{field.name} {e}")
        else:
            if field.required is True:
                raise Exception(f"Missing required field {field.name}")
            logger.debug(f"Missing optional field {field.name}")

    return True