From 3c6314c08d8ab1cfefbf6c2e27c095a7d4ba5f6e Mon Sep 17 00:00:00 2001 From: Petr Motejlek Date: Wed, 1 Mar 2017 18:21:28 +0100 Subject: bpo-29615: SimpleXMLRPCDispatcher no longer chains KeyError (#260) (or any other exception) to exception(s) raised in the dispatched methods. Patch by Petr Motejlek. --- Lib/xmlrpc/server.py | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) (limited to 'Lib/xmlrpc/server.py') diff --git a/Lib/xmlrpc/server.py b/Lib/xmlrpc/server.py index a6275a1b74..bb86fe6872 100644 --- a/Lib/xmlrpc/server.py +++ b/Lib/xmlrpc/server.py @@ -392,31 +392,36 @@ class SimpleXMLRPCDispatcher: not be called. """ - func = None try: - # check to see if a matching function has been registered + # call the matching registered function func = self.funcs[method] except KeyError: - if self.instance is not None: - # check for a _dispatch method - if hasattr(self.instance, '_dispatch'): - return self.instance._dispatch(method, params) - else: - # call instance method directly - try: - func = resolve_dotted_attribute( - self.instance, - method, - self.allow_dotted_names - ) - except AttributeError: - pass - - if func is not None: - return func(*params) + pass else: + if func is not None: + return func(*params) raise Exception('method "%s" is not supported' % method) + if self.instance is not None: + if hasattr(self.instance, '_dispatch'): + # call the `_dispatch` method on the instance + return self.instance._dispatch(method, params) + + # call the instance's method directly + try: + func = resolve_dotted_attribute( + self.instance, + method, + self.allow_dotted_names + ) + except AttributeError: + pass + else: + if func is not None: + return func(*params) + + raise Exception('method "%s" is not supported' % method) + class SimpleXMLRPCRequestHandler(BaseHTTPRequestHandler): """Simple XML-RPC request handler class. -- cgit v1.2.1