Browse Source

Updates after code review

reviewable/pr1984/r1
Adam Byrtek 10 years ago committed by Markus Unterwaditzer
parent
commit
f0d3b71a94
  1. 2
      CHANGES
  2. 16
      docs/testing.rst
  3. 14
      flask/wrappers.py

2
CHANGES

@ -14,6 +14,8 @@ Version 0.12
- Added `json` keyword argument to :meth:`flask.testing.FlaskClient.open` - Added `json` keyword argument to :meth:`flask.testing.FlaskClient.open`
(and related ``get``, ``post``, etc.), which makes it more convenient to (and related ``get``, ``post``, etc.), which makes it more convenient to
send JSON requests from the test client. send JSON requests from the test client.
- Added ``is_json`` and ``get_json`` to :class:``flask.wrappers.Response``
in order to make it easier to build assertions when testing JSON responses.
Version 0.11.2 Version 0.11.2
-------------- --------------

16
docs/testing.rst

@ -360,24 +360,24 @@ Testing JSON APIs
.. versionadded:: 1.0 .. versionadded:: 1.0
Flask has a great support for JSON, and is a popular choice for building REST Flask has great support for JSON, and is a popular choice for building REST
APIs. Testing both JSON requests and responses using the test client is very APIs. Testing both JSON requests and responses using the test client is very
convenient: convenient:
from flask import json, jsonify from flask import jsonify
@app.route('/api/auth') @app.route('/api/auth')
def auth(): def auth():
email = request.json['email'] email = request.get_json()['email']
password = request.json['password'] password = request.get_json()['password']
return jsonify(token=generate_token(email, password)) return jsonify(token=generate_token(email, password))
with app.test_client() as c: with app.test_client() as c:
email = 'john@example.com' email = 'john@example.com'
password = 'secret' password = 'secret'
resp = c.post('/api/auth', json={'email': email, 'password': password}) resp = c.post('/api/auth', json={'login': email, 'password': password})
assert verify_token(email, resp.json['token']) assert verify_token(email, resp.get_json()['token'])
Note that if the ``json`` argument is provided then the test client will put Note that if the ``json`` argument is provided then the test client will put
the JSON-serialized object in the request body, and also set the JSON-serialized data in the request body, and also set the
``Content-Type: application/json`` header. ``Content-Type: application/json`` HTTP header.

14
flask/wrappers.py

@ -50,11 +50,11 @@ class JSONMixin(object):
'Use get_json() instead.'), stacklevel=2) 'Use get_json() instead.'), stacklevel=2)
return self.get_json() return self.get_json()
def _get_data_for_json(req, cache): def _get_data_for_json(self, cache):
getter = getattr(req, 'get_data', None) getter = getattr(self, 'get_data', None)
if getter is not None: if getter is not None:
return getter(cache=cache) return getter(cache=cache)
return req.data return self.data
def get_json(self, force=False, silent=False, cache=True): def get_json(self, force=False, silent=False, cache=True):
"""Parses the incoming JSON request data and returns it. By default """Parses the incoming JSON request data and returns it. By default
@ -215,9 +215,9 @@ class Response(ResponseBase, JSONMixin):
""" """
default_mimetype = 'text/html' default_mimetype = 'text/html'
def _get_data_for_json(req, cache): def _get_data_for_json(self, cache):
# Ignore the cache flag since response doesn't support it getter = getattr(self, 'get_data', None)
getter = getattr(req, 'get_data', None)
if getter is not None: if getter is not None:
# Ignore the cache flag since response doesn't support it
return getter() return getter()
return req.data return self.data

Loading…
Cancel
Save