bpo-29615: SimpleXMLRPCDispatcher no longer chains KeyError (#260)

(or any other exception) to exception(s) raised in the dispatched methods.
Patch by Petr Motejlek.
This commit is contained in:
Petr Motejlek 2017-03-01 18:21:28 +01:00 committed by Serhiy Storchaka
parent da62373b0d
commit 3c6314c08d
3 changed files with 117 additions and 20 deletions

View file

@ -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.