Browse Source

Removed incorrect JSON exception subclasses

pull/741/head
Armin Ronacher 12 years ago
parent
commit
4c27f7a8c4
  1. 3
      CHANGES
  2. 48
      flask/exceptions.py
  3. 14
      flask/testsuite/helpers.py
  4. 19
      flask/wrappers.py

3
CHANGES

@ -54,6 +54,9 @@ Release date to be decided.
- Added `message_flashed` signal that simplifies flashing testing. - Added `message_flashed` signal that simplifies flashing testing.
- Added support for copying of request contexts for better working with - Added support for copying of request contexts for better working with
greenlets. greenlets.
- Removed custom JSON HTTP exception subclasses. If you were relying on them
you can reintroduce them again yourself trivially. Using them however is
strongly discouraged as the interface was flawed.
Version 0.9 Version 0.9
----------- -----------

48
flask/exceptions.py

@ -1,48 +0,0 @@
# -*- coding: utf-8 -*-
"""
flask.exceptions
~~~~~~~~~~~~
Flask specific additions to :class:`~werkzeug.exceptions.HTTPException`
:copyright: (c) 2011 by Armin Ronacher.
:license: BSD, see LICENSE for more details.
"""
from werkzeug.exceptions import HTTPException, BadRequest
from . import json
class JSONHTTPException(HTTPException):
"""A base class for HTTP exceptions with ``Content-Type:
application/json``.
The ``description`` attribute of this class must set to a string (*not* an
HTML string) which describes the error.
"""
def get_body(self, environ):
"""Overrides :meth:`werkzeug.exceptions.HTTPException.get_body` to
return the description of this error in JSON format instead of HTML.
"""
return json.dumps(dict(description=self.get_description(environ)))
def get_headers(self, environ):
"""Returns a list of headers including ``Content-Type:
application/json``.
"""
return [('Content-Type', 'application/json')]
class JSONBadRequest(JSONHTTPException, BadRequest):
"""Represents an HTTP ``400 Bad Request`` error whose body contains an
error message in JSON format instead of HTML format (as in the superclass).
"""
#: The description of the error which occurred as a string.
description = (
'The browser (or proxy) sent a request that this server could not '
'understand.'
)

14
flask/testsuite/helpers.py

@ -35,23 +35,11 @@ class JSONTestCase(FlaskTestCase):
app = flask.Flask(__name__) app = flask.Flask(__name__)
@app.route('/json', methods=['POST']) @app.route('/json', methods=['POST'])
def return_json(): def return_json():
return unicode(flask.request.json) return flask.jsonify(foo=unicode(flask.request.json))
c = app.test_client() c = app.test_client()
rv = c.post('/json', data='malformed', content_type='application/json') rv = c.post('/json', data='malformed', content_type='application/json')
self.assert_equal(rv.status_code, 400) self.assert_equal(rv.status_code, 400)
def test_json_bad_requests_content_type(self):
app = flask.Flask(__name__)
@app.route('/json', methods=['POST'])
def return_json():
return unicode(flask.request.json)
c = app.test_client()
rv = c.post('/json', data='malformed', content_type='application/json')
self.assert_equal(rv.status_code, 400)
self.assert_equal(rv.mimetype, 'application/json')
self.assert_('description' in flask.json.loads(rv.data))
self.assert_('<p>' not in flask.json.loads(rv.data)['description'])
def test_json_body_encoding(self): def test_json_body_encoding(self):
app = flask.Flask(__name__) app = flask.Flask(__name__)
app.testing = True app.testing = True

19
flask/wrappers.py

@ -11,8 +11,8 @@
from werkzeug.wrappers import Request as RequestBase, Response as ResponseBase from werkzeug.wrappers import Request as RequestBase, Response as ResponseBase
from werkzeug.utils import cached_property from werkzeug.utils import cached_property
from werkzeug.exceptions import BadRequest
from .exceptions import JSONBadRequest
from .debughelpers import attach_enctype_error_multidict from .debughelpers import attach_enctype_error_multidict
from . import json from . import json
from .globals import _request_ctx_stack from .globals import _request_ctx_stack
@ -107,21 +107,16 @@ class Request(RequestBase):
def on_json_loading_failed(self, e): def on_json_loading_failed(self, e):
"""Called if decoding of the JSON data failed. The return value of """Called if decoding of the JSON data failed. The return value of
this method is used by :attr:`json` when an error occurred. The default this method is used by :attr:`json` when an error occurred. The default
implementation raises a :class:`JSONBadRequest`, which is a subclass of implementation just raises a :class:`BadRequest` exception.
:class:`~werkzeug.exceptions.BadRequest` which sets the
``Content-Type`` to ``application/json`` and provides a JSON-formatted
error description::
{"description": "The browser (or proxy) sent a request that \ .. versionchanged:: 0.10
this server could not understand."} Removed buggy previous behavior of generating a random JSON
response. If you want that behavior back you can trivially
.. versionchanged:: 0.9 add it by subclassing.
Return a :class:`JSONBadRequest` instead of a
:class:`~werkzeug.exceptions.BadRequest` by default.
.. versionadded:: 0.8 .. versionadded:: 0.8
""" """
raise JSONBadRequest() raise BadRequest()
def _load_form_data(self): def _load_form_data(self):
RequestBase._load_form_data(self) RequestBase._load_form_data(self)

Loading…
Cancel
Save