Updates after code review

This commit is contained in:
Adam Byrtek 2015-04-06 13:15:07 +02:00 committed by Markus Unterwaditzer
parent f0f458e0c5
commit f0d3b71a94
3 changed files with 17 additions and 15 deletions

View file

@ -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
-------------- --------------

View file

@ -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.

View file

@ -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