_dispatch(): Do no re-define the resolve_dotted_atttribute() function

every time this gets called; move it out as a global helper function.
    Simplify the call to the _dispatch() method of the registered instance.
This commit is contained in:
Fred Drake 2001-09-29 04:54:33 +00:00
parent 599db7de63
commit 787fd8cdeb
1 changed files with 17 additions and 21 deletions

View File

@ -147,22 +147,6 @@ class SimpleXMLRPCRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
not be called by SimpleXMLRPCServer.
"""
def resolve_dotted_attribute(obj, attr):
"""resolve_dotted_attribute(math, 'cos.__doc__') => math.cos.__doc__
Resolves a dotted attribute name to an object. Raises
an AttributeError if any attribute in the chain starts
with a '_'.
"""
for i in attr.split('.'):
if i.startswith('_'):
raise AttributeError(
'attempt to access private attribute "%s"' % i
)
else:
obj = getattr(obj,i)
return obj
func = None
try:
# check to see if a matching function has been registered
@ -171,14 +155,11 @@ class SimpleXMLRPCRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
if self.server.instance is not None:
# check for a _dispatch method
if hasattr(self.server.instance, '_dispatch'):
return apply(
getattr(self.server.instance,'_dispatch'),
(method, params)
)
return self.server.instance._dispatch(method, params)
else:
# call instance method directly
try:
func = resolve_dotted_attribute(
func = _resolve_dotted_attribute(
self.server.instance,
method
)
@ -196,6 +177,21 @@ class SimpleXMLRPCRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
if self.server.logRequests:
BaseHTTPServer.BaseHTTPRequestHandler.log_request(self, code, size)
def _resolve_dotted_attribute(obj, attr):
"""Resolves a dotted attribute name to an object. Raises
an AttributeError if any attribute in the chain starts with a '_'.
"""
for i in attr.split('.'):
if i.startswith('_'):
raise AttributeError(
'attempt to access private attribute "%s"' % i
)
else:
obj = getattr(obj,i)
return obj
class SimpleXMLRPCServer(SocketServer.TCPServer):
"""Simple XML-RPC server.