in src/olympia/abuse/serializers.py [0:0]
def validate(self, data):
if not data.get('reason'):
# If reason is not provided, message is required and can not be
# null or blank.
message = data.get('message')
if not message:
if 'message' not in data:
msg = serializers.Field.default_error_messages['required']
elif message is None:
msg = serializers.Field.default_error_messages['null']
else:
msg = serializers.CharField.default_error_messages['blank']
raise serializers.ValidationError({'message': [msg]})
# When the reason is "illegal", the `illegal_category` field is
# required.
if data.get('reason') == AbuseReport.REASONS.ILLEGAL:
if 'illegal_category' not in data:
msg = serializers.Field.default_error_messages['required']
raise serializers.ValidationError({'illegal_category': [msg]})
elif data.get('illegal_category') is None:
msg = serializers.Field.default_error_messages['null']
raise serializers.ValidationError({'illegal_category': [msg]})
elif data.get('illegal_category') is not None:
msg = (
'This value must be omitted or set to "null" when the `reason` is not '
'"illegal".'
)
raise serializers.ValidationError({'illegal_category': [msg]})
# When the reason is "illegal", the `illegal_subcategory` field is also
# required. In addition, the subcategory depends on the category set.
if data.get('reason') == AbuseReport.REASONS.ILLEGAL:
subcategory = data.get('illegal_subcategory')
valid_subcategories = ILLEGAL_SUBCATEGORIES_BY_CATEGORY.get(
data.get('illegal_category'), []
)
if 'illegal_subcategory' not in data:
msg = serializers.Field.default_error_messages['required']
raise serializers.ValidationError({'illegal_subcategory': [msg]})
elif subcategory is None:
msg = serializers.Field.default_error_messages['null']
raise serializers.ValidationError({'illegal_subcategory': [msg]})
elif subcategory not in valid_subcategories:
msg = (
'This value cannot be used in combination with the '
'supplied `illegal_category`.'
)
raise serializers.ValidationError({'illegal_subcategory': [msg]})
elif data.get('illegal_subcategory') is not None:
msg = (
'This value must be omitted or set to "null" when the `reason` is not '
'"illegal".'
)
raise serializers.ValidationError({'illegal_subcategory': [msg]})
return data