diff --git a/warden3/warden_server/warden_server.py b/warden3/warden_server/warden_server.py index e02535ef4bc0c796b7cc8ba4e62e5274ec4f8254..654d4fbe8406b8e293e181d85aab13685a37b702 100755 --- a/warden3/warden_server/warden_server.py +++ b/warden3/warden_server/warden_server.py @@ -829,6 +829,8 @@ def expose(read=1, write=0, debug=0): meth.read = read meth.write = write meth.debug = debug + if not hasattr(meth, "arguments"): + meth.arguments = meth.func_code.co_varnames[:meth.func_code.co_argcount] return meth return expose_deco @@ -846,7 +848,7 @@ class Server(ObjectBase): return "%s(req=%s, auth=%s, handler=%s)" % (type(self).__name__, type(self.req).__name__, type(self.auth).__name__, type(self.handler).__name__) - def sanitize_args(self, path, func, args, exclude=["self"]): + def sanitize_args(self, path, func, args, exclude=["self", "post"]): # silently remove internal args, these should never be used # but if somebody does, we do not expose them by error message intargs = set(args).intersection(exclude) @@ -857,7 +859,7 @@ class Server(ObjectBase): # silently remove surplus arguments - potential forward # compatibility (unknown args will get ignored) - badargs = set(args) - set(func.func_code.co_varnames[0:func.func_code.co_argcount]) + badargs = set(args) - set(func.arguments) for a in badargs: del args[a] if badargs: @@ -953,6 +955,10 @@ def json_wrapper(method): return [('Content-type', 'application/json')], output + try: + meth_deco.arguments = method.arguments + except AttributeError: + meth_deco.arguments = method.func_code.co_varnames[:method.func_code.co_argcount] return meth_deco