<html><head></head><body>Hello all,<div><br>Spyne newbie here.  I am trying to find a way to limit HttpRpc requests to use POST request method only.  We have a web service that according to a spec, should be accessible via HTTP POST only.  I have made a decorator to check for the REQUEST_METHOD value like so:</div><div><br></div><div>class OurWebService(ServiceBase):</div><div>    @rpc(Unicode, _returns=Iterable(String))</div><div>    @require_methods(['POST'])</div><div>    def say_hello(ctx, name):</div><div>         yield "Hello %s." % name      #from the example</div><div><br></div><div><br></div><div><br></div><div><br></div><div>Here's the code for the require_methods decorator:</div><div><br></div><div><div>class require_methods(object):</div><div>    def __init__(self, methods):</div><div>        assert isinstance(methods, list), "Methods should be in list form."</div><div>        self.methods = methods</div><div><br></div><div>    def __call__(self, f):</div><div><br></div><div>        def wrapped_f(*args, **kwargs):</div><div>            assert args[0], "No context param"</div><div>            assert getattr(args[0], 'in_document'), "No context info"</div><div>            if args[0].in_document.get('REQUEST_METHOD') not in self.methods:</div><div>                raise InvalidMethodError()</div><div>            pprint(args)</div><div>            f(*args, **kwargs)</div><div><br></div><div>        wrapped_f.__doc__ = f.__doc__</div><div>        return wrapped</div><div><br></div></div><div><br></div><div>When I access the web service via GET, I get an Error 500 and I see the InvalidMethodError stack trace logged on my console - which is to be expected.</div><div>When I use POST (using a REST Console), it says these on the debug output:</div><div><br></div><div><div>DEBUG:spyne.protocol.http:<span class="Apple-tab-span" style="white-space:pre">      </span>body   : {'name': ['Dave']}</div><div>DEBUG:spyne.protocol.dictdoc:discarding field 'name'</div></div><div>... (Stack trace here with lines coming from the decorator code)</div><div><br></div><div>TypeError: say_hello() takes exactly 2 arguments (1 given)</div><div><br></div><div>It seems to me, the rpc decorator didn't recognize the name parameter now that the service method is wrapped by another decorator.  Am I doing the correct approach?  Any advice is appreciated. </div><div><br>Thanks,<br><br></div><div>Rodolfo N. Duldulao, Jr.<div>Chikka Philippines, Inc. Penthouse,</div><div>23 ADB Avenue, Ortigas Center,</div><div>Pasig City 1605 Metro Manila, </div><div>Philippines </div><div><br></div><div>Email: rduldulao@chikka.com </div><div>Mobile: 09209515026 Tel: 029889629</div></div></body></html>