Skip to content

Commit

Permalink
Stop rely on Flask-Marshmallow
Browse files Browse the repository at this point in the history
  • Loading branch information
greyli committed Jan 27, 2021
1 parent 6737eeb commit cce7a0b
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions flask_apitools/decorators.py
@@ -1,6 +1,6 @@
from functools import wraps

from flask import Response
from flask import Response, jsonify
from webargs.flaskparser import FlaskParser as BaseFlaskParser

from flask_apitools.exceptions import ValidationError
Expand Down Expand Up @@ -66,6 +66,15 @@ def response(schema, status_code=200, description=None):
def decorator(f):
_annotate(f, response=schema, status_code=status_code,
description=description)

sentinel = object()

def _jsonify(obj, many=sentinel, *args, **kwargs):
"""Copy from flask_marshmallow.schemas.Schema.jsonify"""
if many is sentinel:
many = schema.many
data = schema.dump(obj, many=many)
return jsonify(data, *args, **kwargs)

@wraps(f)
def _response(*args, **kwargs):
Expand All @@ -74,7 +83,7 @@ def _response(*args, **kwargs):
raise RuntimeError(
'The @response decorator cannot handle Response objects.')
if isinstance(rv, tuple):
json = schema.jsonify(rv[0])
json = _jsonify(rv[0])
if len(rv) == 2:
if not isinstance(rv[1], int):
rv = (json, status_code, rv[1])
Expand All @@ -86,7 +95,7 @@ def _response(*args, **kwargs):
rv = json
return rv
else:
return schema.jsonify(rv), status_code
return _jsonify(rv), status_code
return _response
return decorator

Expand Down

0 comments on commit cce7a0b

Please sign in to comment.