This throws an exception and crashes your DocXMLRPCServer when using registered python functions that use function annotations. Seems inconsistent to me. Or is there a reason for this?
Okey ... Consider you have a function: def fn( str:str ): pass That you register to your DocXMLRPCServer: register_function of SimpleXMLRPCDispatcher stores the function object in the dictionary self.funcs under the name of the function (as key). Then you start your server and access (with a browser) the ip and port of the machine running your xmlrpc server which calls > DocXMLRPCRequestHandler.do_GET which > generate_html_documenation() which copies the funcs dictionary into methods and hands it to > ServerHTMLDoc.docserver which calls for each function name + function object: > ServerHTMLDoc.docroutine which calls (for inspect.ismethod and inspect.isfunction): inspect.getargspec on the function object which will fail if you register an annotated function (like the above "fn") in the first place: ========================================= File "/usr/lib/python3.1/inspect.py", line 789, in getargspec raise ValueError("Function has keyword-only arguments or annotations" ValueError: Function has keyword-only arguments or annotations, use getfullargspec() API which can support them ========================================= Which most probably leads to the conclusion that you should just use the getfullargspec instead of getargspec just to avoid that the XMLRPC server crashes if someone registers a annotated function.
If you want an example: pydoc3.1 xmlrpc.server 2nd usage pattern change "SimpleXMLRPCServer" to "DocXMLRPCServer" change function signature from "pow(self, x, y)" to "pow(self, x:int, y:int)" and your good to go and have your doc xmlrpc server crashed the moment you send a get request to him (e.g. by accessing "http://ip:port" in the browser of your choice).