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