From a18d473c98d965c7249c75363e2998117761fdb6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20K=C3=A1cha?= <ph@cesnet.cz>
Date: Tue, 13 Sep 2016 19:46:34 +0200
Subject: [PATCH] Bugfix: arguments checking haven't survived json_wrapper
 decorator

---
 warden3/warden_server/warden_server.py | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/warden3/warden_server/warden_server.py b/warden3/warden_server/warden_server.py
index e02535e..654d4fb 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
 
 
-- 
GitLab