Flask simple call now works

This commit is contained in:
Christophe de Vienne 2013-03-25 15:52:32 +01:00
parent 5f99ad0edd
commit 4ba5ce042a

View File

@ -1,14 +1,21 @@
from __future__ import absolute_import
import functools
import logging
import sys
import wsme
import wsme.api
import wsme.rest.json
import wsme.rest.xml
from wsme.rest.args import (
args_from_params, args_from_body, combine_args
)
import flask
log = logging.getLogger(__name__)
def signature(*args, **kw):
sig = wsme.signature(*args, **kw)
@ -18,14 +25,39 @@ def signature(*args, **kw):
funcdef = wsme.api.FunctionDefinition.get(f)
@functools.wraps(f)
def wrapper(*args, **kw):
args, kwargs = combine_args(
funcdef,
args_from_params(funcdef, flask.request.args),
args_from_body(funcdef, flask.request.data, flask.request.content_type)
def wrapper(*args, **kwargs):
args, kwargs = wsme.rest.args.get_args(
funcdef, args, kwargs, flask.request.args, flask.request.data,
flask.request.content_type
)
resp = make_response(f(*args, **kw))
return resp
print args, kwargs
dataformat = None
if 'Accept' in flask.request.headers:
if 'application/json' in flask.request.headers['Accept']:
dataformat = wsme.rest.json
elif 'text/xml' in flask.request.headers['Accept']:
dataformat = wsme.rest.xml
if dataformat is None:
log.info('''Could not determine what format is wanted by the
caller, falling back to json''')
dataformat = wsme.rest.json
try:
res = flask.make_response(
dataformat.encode_result(
f(*args, **kwargs),
funcdef.return_type
)
)
res.mimetype = dataformat.content_type
except:
data = wsme.api.format_exception(sys.exc_info())
res = flask.make_response(dataformat.encode_error(data))
if data['faultcode']:
res.status = 400
else:
res.status = 500
return res
wrapper.wsme_func = f
return wrapper