X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Futil%2Fxmlrpcprotocol.py;h=b5e9c01f88fa769fcd11acf1befd34d9db730af8;hb=3eea82897aba845da0d12c1ba56012e599f58853;hp=d1fbe1e441e2a439de9f2b9b92758e5b377d62da;hpb=eababa96fb603cdd552bc03091813544b099befd;p=sfa.git diff --git a/sfa/util/xmlrpcprotocol.py b/sfa/util/xmlrpcprotocol.py index d1fbe1e4..b5e9c01f 100644 --- a/sfa/util/xmlrpcprotocol.py +++ b/sfa/util/xmlrpcprotocol.py @@ -1,9 +1,9 @@ # XMLRPC-specific code for SFA Client +import httplib import xmlrpclib -from sfa.util.sfalogging import sfa_logger, console_logger - +from sfa.util.sfalogging import logger ## # ServerException, ExceptionUnmarshaller # @@ -25,20 +25,23 @@ class ExceptionUnmarshaller(xmlrpclib.Unmarshaller): # # A transport for XMLRPC that works on top of HTTPS +# python 2.7 xmlrpclib has changed its internal code +# it now calls 'getresponse' on the obj returned by make_connection +# while it used to call 'getreply' +# regardless of the version, httplib.HTTPS does implement getreply, +# while httplib.HTTPSConnection has getresponse +# so we create a dummy instance to check what's expected +need_HTTPSConnection=hasattr(xmlrpclib.Transport().make_connection('localhost'),'getresponse') + class XMLRPCTransport(xmlrpclib.Transport): key_file = None cert_file = None def make_connection(self, host): # create a HTTPS connection object from a host descriptor # host may be a string, or a (host, x509-dict) tuple - import httplib host, extra_headers, x509 = self.get_host_info(host) - try: - HTTPS = httplib.HTTPS() - except AttributeError: - raise NotImplementedError( - "your version of httplib doesn't support HTTPS" - ) + if need_HTTPSConnection: + return httplib.HTTPSConnection(host, None, key_file=self.key_file, cert_file=self.cert_file) #**(x509 or {})) else: return httplib.HTTPS(host, None, key_file=self.key_file, cert_file=self.cert_file) #**(x509 or {})) @@ -49,18 +52,15 @@ class XMLRPCTransport(xmlrpclib.Transport): class XMLRPCServerProxy(xmlrpclib.ServerProxy): def __init__(self, url, transport, allow_none=True, options=None): - self.options = options + # remember url for GetVersion + self.url=url verbose = False - if self.options and self.options.debug: + if options and options.debug: verbose = True - if self.options and hasattr(self.options,'client'): - XMLRPCServerProxy.logger=console_logger - else: - XMLRPCServerProxy.logger=sfa_logger xmlrpclib.ServerProxy.__init__(self, url, transport, allow_none=allow_none, verbose=verbose) def __getattr__(self, attr): - XMLRPCServerProxy.logger.debug("Calling xml-rpc method:%s"%attr) + logger.debug ("xml-rpc %s method:%s"%(self.url,attr)) return xmlrpclib.ServerProxy.__getattr__(self, attr)