diff options
author | Fred Drake <fdrake@acm.org> | 2001-09-29 04:54:33 (GMT) |
---|---|---|
committer | Fred Drake <fdrake@acm.org> | 2001-09-29 04:54:33 (GMT) |
commit | 787fd8cdeb72bea74a79e5acf61debfd11683502 (patch) | |
tree | 942d417061bb829b7a09ae8eaac7f0e64585bbfe /Lib/SimpleXMLRPCServer.py | |
parent | 599db7de6382179155c54dcf675b7af160df395f (diff) | |
download | cpython-787fd8cdeb72bea74a79e5acf61debfd11683502.zip cpython-787fd8cdeb72bea74a79e5acf61debfd11683502.tar.gz cpython-787fd8cdeb72bea74a79e5acf61debfd11683502.tar.bz2 |
_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.
Diffstat (limited to 'Lib/SimpleXMLRPCServer.py')
-rw-r--r-- | Lib/SimpleXMLRPCServer.py | 38 |
1 files changed, 17 insertions, 21 deletions
diff --git a/Lib/SimpleXMLRPCServer.py b/Lib/SimpleXMLRPCServer.py index 89900bd..0a91683 100644 --- a/Lib/SimpleXMLRPCServer.py +++ b/Lib/SimpleXMLRPCServer.py @@ -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. |