From 8a0b7b1a7bebcb33929f2f4e0235e79bc5913323 Mon Sep 17 00:00:00 2001 From: Max Goodman Date: Fri, 6 Sep 2013 17:18:51 -0700 Subject: [PATCH] Generalize strict validation error abort method. --- r2/r2/controllers/multi.py | 18 ++++-------------- r2/r2/controllers/reddit_base.py | 13 +++++++++++++ 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/r2/r2/controllers/multi.py b/r2/r2/controllers/multi.py index 6a5999ec3..c8bd81702 100644 --- a/r2/r2/controllers/multi.py +++ b/r2/r2/controllers/multi.py @@ -25,7 +25,7 @@ from pylons.i18n import _ from r2.config.extensions import set_extension from r2.controllers.api_docs import api_doc, api_section -from r2.controllers.reddit_base import RedditController +from r2.controllers.reddit_base import RedditController, abort_with_error from r2.controllers.oauth2 import ( OAuth2ResourceController, require_oauth2_scope, @@ -56,8 +56,7 @@ from r2.lib.jsontemplates import ( LabeledMultiJsonTemplate, LabeledMultiDescriptionJsonTemplate, ) -from r2.lib.errors import errors, reddit_http_error, RedditError -from r2.lib.base import abort +from r2.lib.errors import errors, RedditError multi_sr_data_json_spec = VValidatedJSON.Object({ @@ -77,22 +76,13 @@ multi_description_json_spec = VValidatedJSON.Object({ class MultiApiController(RedditController, OAuth2ResourceController): + on_validation_error = staticmethod(abort_with_error) + def pre(self): set_extension(request.environ, "json") self.check_for_bearer_token() RedditController.pre(self) - def on_validation_error(self, error): - if not error.code: - raise ValueError('Error %r missing status code' % error) - - abort(reddit_http_error( - code=error.code, - error_name=error.name, - explanation=error.message, - fields=error.fields, - )) - @require_oauth2_scope("read") @validate(VUser()) @api_doc(api_section.multis, uri="/api/multi/mine") diff --git a/r2/r2/controllers/reddit_base.py b/r2/r2/controllers/reddit_base.py index 4153f5222..b82bc253b 100644 --- a/r2/r2/controllers/reddit_base.py +++ b/r2/r2/controllers/reddit_base.py @@ -54,6 +54,7 @@ from r2.lib.errors import ( BadRequestError, ForbiddenError, errors, + reddit_http_error, ) from r2.lib.filters import _force_utf8 from r2.lib.strings import strings @@ -697,6 +698,18 @@ def flatten_response(content): return "".join(_force_utf8(x) for x in tup(content) if x) +def abort_with_error(error): + if not error.code: + raise ValueError('Error %r missing status code' % error) + + abort(reddit_http_error( + code=error.code, + error_name=error.name, + explanation=error.message, + fields=error.fields, + )) + + class MinimalController(BaseController): allow_stylesheets = False