Add more verbose JSON validation errors.

This commit is contained in:
Max Goodman
2013-07-17 15:53:44 -07:00
parent e994fa6a8a
commit 737384513c
2 changed files with 9 additions and 3 deletions

View File

@@ -129,6 +129,8 @@ error_list = dict((
('MULTI_TOO_MANY_SUBREDDITS', _('no more space for subreddits in that multireddit')),
('MULTI_SPECIAL_SUBREDDIT', _("can't add special subreddit %(path)s")),
('JSON_PARSE_ERROR', _('unable to parse JSON data')),
('JSON_INVALID', _('unexpected JSON structure')),
('JSON_MISSING_KEY', _('JSON missing key: "%(key)s"')),
))
errors = Storage([(e, e) for e in error_list.keys()])

View File

@@ -2205,7 +2205,7 @@ class VValidatedJSON(VJSON):
def run(self, data):
if not isinstance(data, list):
raise ValueError
raise RedditError('JSON_INVALID', code=400)
validated_data = []
for item in data:
@@ -2230,11 +2230,15 @@ class VValidatedJSON(VJSON):
def run(self, data):
if not isinstance(data, dict):
raise ValueError
raise RedditError('JSON_INVALID', code=400)
validated_data = {}
for key, validator in self.spec.iteritems():
validated_data[key] = validator.run(data[key])
try:
validated_data[key] = validator.run(data[key])
except KeyError:
raise RedditError('JSON_MISSING_KEY', code=400,
msg_params={'key': key})
return validated_data
def spec_docs(self):