mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
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:
parent
da62373b0d
commit
3c6314c08d
3 changed files with 117 additions and 20 deletions
|
@ -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.
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue