From 814e87ea72e2d6062118aa4bd34ef52a1951e0bb Mon Sep 17 00:00:00 2001 From: Christophe de Vienne Date: Wed, 17 Apr 2013 16:03:56 +0200 Subject: [PATCH] wsmeext.cornice.signature can now decorate resource class methods --- wsmeext/cornice.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/wsmeext/cornice.py b/wsmeext/cornice.py index d095a09..0e8a72f 100644 --- a/wsmeext/cornice.py +++ b/wsmeext/cornice.py @@ -16,6 +16,8 @@ And use it:: """ from __future__ import absolute_import +import inspect + import wsme from wsme.rest import json as restjson from wsme.rest import xml as restxml @@ -66,12 +68,24 @@ def signature(*args, **kwargs): sig = wsme.signature(*args, **kwargs) def decorate(f): - sig(f) + args = inspect.getargspec(f)[0] + with_self = args[0] == 'self' if args else False + f = sig(f) funcdef = wsme.api.FunctionDefinition.get(f) funcdef.resolve_types(wsme.types.registry) @functools.wraps(f) - def callfunction(request): + def callfunction(*args): + if with_self: + if len(args) == 1: + self = args[0] + request = self.request + elif len(args) == 2: + self, request = args + else: + raise ValueError("Cannot do anything with these arguments") + else: + request = args[0] args, kwargs = combine_args( funcdef, (args_from_args(funcdef, (), request.matchdict), @@ -82,6 +96,8 @@ def signature(*args, **kwargs): request.override_renderer = 'wsme' + get_outputformat(request) if funcdef.pass_request: kwargs[funcdef.pass_request] = request + if with_self: + args.insert(0, self) return { 'datatype': funcdef.return_type, 'result': f(*args, **kwargs)