deeper pass on xmlrpclib vs xmlrpc.client as well as configparser
authorThierry Parmentelat <thierry.parmentelat@inria.fr>
Thu, 31 Mar 2016 17:31:37 +0000 (19:31 +0200)
committerThierry Parmentelat <thierry.parmentelat@inria.fr>
Thu, 31 Mar 2016 17:31:37 +0000 (19:31 +0200)
19 files changed:
sfa/client/manifolduploader.py
sfa/client/sfaserverproxy.py
sfa/dummy/dummy_testbed_api_client.py
sfa/dummy/dummyshell.py
sfa/federica/fdshell.py
sfa/managers/component_manager_pl.py
sfa/nitos/nitosshell.py
sfa/openstack/shell.py
sfa/planetlab/nodemanager.py
sfa/server/sfaapi.py
sfa/server/threadedserver.py
sfa/server/xmlrpcapi.py
sfa/trust/gid.py
sfa/trust/sfaticket.py
sfa/util/config.py
sfa/util/faults.py
sfa/util/py23.py
tests/testCert.py
tools/py2depgraph.py

index 66874ba..a9dd29d 100755 (executable)
@@ -30,9 +30,10 @@ import ssl
 try:    turn_off_server_verify = { 'context' : ssl._create_unverified_context() } 
 except: turn_off_server_verify = {}
 
-import xmlrpclib
 import getpass
 
+from sfa.util.py23 import xmlrpc_client
+
 class ManifoldUploader:
     """A utility class for uploading delegated credentials to a manifold/MySlice infrastructure"""
 
@@ -79,12 +80,12 @@ class ManifoldUploader:
 #        if not self._proxy:
 #            url=self.url()
 #            self.logger.info("Connecting manifold url %s"%url)
-#            self._proxy = xmlrpclib.ServerProxy(url, allow_none = True)
+#            self._proxy = xmlrpc_client.ServerProxy(url, allow_none = True)
 #        return self._proxy
         url=self.url()
         self.logger.debug("Connecting manifold url %s"%url)
-        proxy = xmlrpclib.ServerProxy(url, allow_none = True,
-                                      **turn_off_server_verify)
+        proxy = xmlrpc_client.ServerProxy(url, allow_none = True,
+                                          **turn_off_server_verify)
 
         return proxy
 
index ca62ddf..333984c 100644 (file)
@@ -5,9 +5,10 @@ import ssl
 try:    turn_off_server_verify = { 'context' : ssl._create_unverified_context() } 
 except: turn_off_server_verify = {}
 
-import xmlrpclib
 from httplib import HTTPS, HTTPSConnection
 
+from sfa.util.py23 import xmlrpc_client
+
 try:
     from sfa.util.sfalogging import logger
 except:
@@ -23,11 +24,11 @@ except:
 class ServerException(Exception):
     pass
 
-class ExceptionUnmarshaller(xmlrpclib.Unmarshaller):
+class ExceptionUnmarshaller(xmlrpc_client.Unmarshaller):
     def close(self):
         try:
-            return xmlrpclib.Unmarshaller.close(self)
-        except xmlrpclib.Fault as e:
+            return xmlrpc_client.Unmarshaller.close(self)
+        except xmlrpc_client.Fault as e:
             raise ServerException(e.faultString)
 
 ##
@@ -37,10 +38,10 @@ class ExceptionUnmarshaller(xmlrpclib.Unmarshaller):
 
 # targetting only python-2.7 we can get rid of some older code
 
-class XMLRPCTransport(xmlrpclib.Transport):
+class XMLRPCTransport(xmlrpc_client.Transport):
     
     def __init__(self, key_file = None, cert_file = None, timeout = None):
-        xmlrpclib.Transport.__init__(self)
+        xmlrpc_client.Transport.__init__(self)
         self.timeout=timeout
         self.key_file = key_file
         self.cert_file = cert_file
@@ -74,21 +75,21 @@ class XMLRPCTransport(xmlrpclib.Transport):
 
     def getparser(self):
         unmarshaller = ExceptionUnmarshaller()
-        parser = xmlrpclib.ExpatParser(unmarshaller)
+        parser = xmlrpc_client.ExpatParser(unmarshaller)
         return parser, unmarshaller
 
-class XMLRPCServerProxy(xmlrpclib.ServerProxy):
+class XMLRPCServerProxy(xmlrpc_client.ServerProxy):
     def __init__(self, url, transport, allow_none=True, verbose=False):
         # remember url for GetVersion
         # xxx not sure this is still needed as SfaServerProxy has this too
-        self.url=url
-        xmlrpclib.ServerProxy.__init__(self, url, transport, allow_none=allow_none,
-                                       verbose=verbose,
+        self.url = url
+        xmlrpc_client.ServerProxy.__init__(self, url, transport, allow_none=allow_none,
+                                           verbose=verbose,
                                        **turn_off_server_verify)
 
     def __getattr__(self, attr):
         logger.debug ("xml-rpc %s method:%s" % (self.url, attr))
-        return xmlrpclib.ServerProxy.__getattr__(self, attr)
+        return xmlrpc_client.ServerProxy.__getattr__(self, attr)
 
 ########## the object on which we can send methods that get sent over xmlrpc
 class SfaServerProxy:
@@ -99,7 +100,7 @@ class SfaServerProxy:
         self.certfile = certfile
         self.verbose = verbose
         self.timeout = timeout
-        # an instance of xmlrpclib.ServerProxy
+        # an instance of xmlrpc_client.ServerProxy
         transport = XMLRPCTransport(keyfile, certfile, timeout)
         self.serverproxy = XMLRPCServerProxy(url, transport, allow_none=True, verbose=verbose)
 
index 4b3989e..57a0482 100644 (file)
@@ -1,11 +1,11 @@
 from __future__ import print_function
 
-import xmlrpclib
 from datetime import datetime
 import time
+from sfa.util.py23 import xmlrpc_client
 
 dummy_url = "http://localhost:8080"
-dummy_api = xmlrpclib.ServerProxy(dummy_url)
+dummy_api = xmlrpc_client.ServerProxy(dummy_url)
 
 # Add a user:
 my_user_id = dummy_api.AddUser({'email': 'john.doe@test.net', 'user_name': 'john.doe', 'keys': ['copy here your ssh-rsa public key']})
index 50e78ac..67007d7 100644 (file)
@@ -1,9 +1,9 @@
 import sys
-import xmlrpclib
 import socket
 from urlparse import urlparse
 
 from sfa.util.sfalogging import logger
+from sfa.util.py23 import xmlrpc_client
 
 class DummyShell:
     """
@@ -21,7 +21,7 @@ class DummyShell:
 
     def __init__ ( self, config ) :
         url = config.SFA_DUMMY_URL
-        self.proxy = xmlrpclib.Server(url, verbose = False, allow_none = True)
+        self.proxy = xmlrpc_client.ServerProxy(url, verbose = False, allow_none = True)
 
     def __getattr__(self, name):
         def func(*args, **kwds):
index aefbdd1..1e7349c 100644 (file)
@@ -1,6 +1,5 @@
-import xmlrpclib
-
 from sfa.util.sfalogging import logger
+from sfa.util.py23 import xmlrpc_client
 
 class FdShell:
     """
@@ -20,9 +19,9 @@ class FdShell:
     def __init__ ( self, config ) :
         url=config.SFA_FEDERICA_URL
         # xxx not sure if java xmlrpc has support for None
-        # self.proxy = xmlrpclib.Server(url, verbose = False, allow_none = True)
+        # self.proxy = xmlrpc_client.ServerProxy(url, verbose = False, allow_none = True)
         # xxx turn on verbosity
-        self.proxy = xmlrpclib.Server(url, verbose = True)
+        self.proxy = xmlrpc_client.ServerProxy(url, verbose = True)
 
     # xxx get credentials from the config ?
     # right now basic auth data goes into the URL
index 8518839..ba9b7eb 100644 (file)
@@ -1,7 +1,6 @@
-import xmlrpclib
-
 from sfa.util.faults import SliverDoesNotExist
 from sfa.util.version import version_core
+from sfa.util.py23 import xmlrpc_client
 
 from sfa.trust.sfaticket import SfaTicket
 
@@ -66,7 +65,7 @@ def redeem_ticket(api, ticket_string):
         raise SliverDoesNotExist(slicename)
 
     # convert ticket to format nm is used to
-    nm_ticket = xmlrpclib.dumps((ticket.attributes,), methodresponse=True)
+    nm_ticket = xmlrpc_client.dumps((ticket.attributes,), methodresponse=True)
     api.driver.nodemanager.AdminTicket(nm_ticket)
     
 
index 2636e6d..cf543f2 100644 (file)
@@ -1,9 +1,9 @@
 import sys
-import xmlrpclib
 import socket
 from urlparse import urlparse
 
 from sfa.util.sfalogging import logger
+from sfa.util.py23 import xmlrpc_client
 
 class NitosShell:
     """
@@ -26,7 +26,7 @@ class NitosShell:
     # use the 'capability' auth mechanism for higher performance when the PLC db is local    
     def __init__ ( self, config ) :
         url = config.SFA_NITOS_URL
-        self.proxy = xmlrpclib.Server(url, verbose = False, allow_none = True)
+        self.proxy = xmlrpc_client.ServerProxy(url, verbose = False, allow_none = True)
 
     def __getattr__(self, name):
         def func(*args, **kwds):
index acb9cff..e31be9d 100644 (file)
@@ -1,5 +1,4 @@
 import sys
-import xmlrpclib
 import socket
 import gettext
 from urlparse import urlparse
index 1671b9d..12e7f22 100644 (file)
@@ -24,6 +24,8 @@ class NodeManager:
         (fd, filename) = tempfile.mkstemp(dir=path)        
         scriptname = script_path + os.sep + filename.split(os.sep)[-1:][0]
         # define the script to execute
+        # when providing support for python3 wrt xmlrpclib
+        # looks safer to keep things as-is
         script = """
 #!%(python)s
 import xmlrpclib
index 9911e46..499e3bd 100644 (file)
@@ -19,7 +19,7 @@ from sfa.storage.alchemy import alchemy
 ####################
 class SfaApi (XmlrpcApi): 
     """
-    An SfaApi instance is a basic xmlrcp service
+    An SfaApi instance is a basic xmlrpc service
     augmented with the local cryptographic material and hrn
 
     It also has the notion of its own interface (a string describing
index daf40e4..7a26ad2 100644 (file)
@@ -11,7 +11,6 @@ import socket
 import traceback
 import threading
 from Queue import Queue
-import xmlrpclib
 import SocketServer
 import BaseHTTPServer
 import SimpleXMLRPCServer
@@ -22,6 +21,7 @@ from sfa.util.config import Config
 from sfa.util.cache import Cache 
 from sfa.trust.certificate import Certificate
 from sfa.trust.trustedroots import TrustedRoots
+from sfa.util.py23 import xmlrpc_client
 
 # don't hard code an api class anymore here
 from sfa.generic import Generic
@@ -195,7 +195,7 @@ class SecureXMLRPCServer(BaseHTTPServer.HTTPServer,SimpleXMLRPCServer.SimpleXMLR
             # can't use format_exc() as it is not available in jython yet
             # (even in trunk).
             type, value, tb = sys.exc_info()
-            raise xmlrpclib.Fault(1,''.join(traceback.format_exception(type, value, tb)))
+            raise xmlrpc_client.Fault(1,''.join(traceback.format_exception(type, value, tb)))
 
     # override this one from the python 2.7 code
     # originally defined in class TCPServer
index 167ac88..1711f88 100644 (file)
@@ -3,7 +3,6 @@
 #
 
 import string
-import xmlrpclib
 
 # SOAP support is optional
 try:
@@ -19,6 +18,7 @@ except ImportError:
 #from sfa.util.faults import SfaNotImplemented, SfaAPIError, SfaInvalidAPIMethod, SfaFault
 from sfa.util.faults import SfaInvalidAPIMethod, SfaAPIError, SfaFault
 from sfa.util.sfalogging import logger
+from sfa.util.py23 import xmlrpc_client
 
 ####################
 # See "2.2 Characters" in the XML specification:
@@ -76,7 +76,9 @@ def xmlrpclib_dump(self, value, write):
         f(*args)
 
 # You can't hide from me!
-xmlrpclib.Marshaller._Marshaller__dump = xmlrpclib_dump
+# Note: not quite  sure if this will still cause
+# the expected behaviour under python3
+xmlrpc_client.Marshaller._Marshaller__dump = xmlrpclib_dump
 
 class XmlrpcApi:
     """
@@ -131,9 +133,9 @@ class XmlrpcApi:
         """
         # Parse request into method name and arguments
         try:
-            interface = xmlrpclib
-            self.protocol = 'xmlrpclib'
-            (args, method) = xmlrpclib.loads(data)
+            interface = xmlrpc_client
+            self.protocol = 'xmlrpc'
+            (args, method) = xmlrpc_client.loads(data)
             if method_map.has_key(method):
                 method = method_map[method]
             methodresponse = True
@@ -168,10 +170,10 @@ class XmlrpcApi:
         convert result to a valid xmlrpc or soap response
         """   
  
-        if self.protocol == 'xmlrpclib':
+        if self.protocol == 'xmlrpc':
             if not isinstance(result, SfaFault):
                 result = (result,)
-            response = xmlrpclib.dumps(result, methodresponse = True, encoding = self.encoding, allow_none = 1)
+            response = xmlrpc_client.dumps(result, methodresponse = True, encoding = self.encoding, allow_none = 1)
         elif self.protocol == 'soap':
             if isinstance(result, Exception):
                 result = faultParameter(NS.ENV_T + ":Server", "Method Failed", method)
index b7fad17..3f903d9 100644 (file)
 
 from __future__ import print_function
 
-import xmlrpclib
 import uuid
 
 from sfa.trust.certificate import Certificate
 
 from sfa.util.faults import GidInvalidParentHrn, GidParentHrn
-from sfa.util.sfalogging import logger
 from sfa.util.xrn import hrn_to_urn, urn_to_hrn, hrn_authfor_hrn
+from sfa.util.sfalogging import logger
+from sfa.util.py23 import xmlrpc_client
 
 ##
 # Create a new uuid. Returns the UUID as a string.
@@ -176,7 +176,7 @@ class GID(Certificate):
         dict = {}
         if data:
             if data.lower().startswith('uri:http://<params>'):
-                dict = xmlrpclib.loads(data[11:])[0][0]
+                dict = xmlrpc_client.loads(data[11:])[0][0]
             else:
                 spl = data.split(', ')
                 for val in spl:
index 78e6d87..6d4a009 100644 (file)
 
 from __future__ import print_function
 
-import xmlrpclib
-
 from sfa.trust.certificate import Certificate
 from sfa.trust.gid import GID
 
+from sfa.util.py23 import xmlrpc_client
+
 # Ticket is tuple:
 #   (gidCaller, gidObject, attributes, rspec, delegate)
 #
@@ -99,13 +99,13 @@ class SfaTicket(Certificate):
             dict["gidCaller"] = self.gidCaller.save_to_string(save_parents=True)
         if self.gidObject:
             dict["gidObject"] = self.gidObject.save_to_string(save_parents=True)
-        str = "URI:" + xmlrpclib.dumps((dict,), allow_none=True)
+        str = "URI:" + xmlrpc_client.dumps((dict,), allow_none=True)
         self.set_data(str)
 
     def decode(self):
         data = self.get_data()
         if data:
-            dict = xmlrpclib.loads(self.get_data()[4:])[0][0]
+            dict = xmlrpc_client.loads(self.get_data()[4:])[0][0]
         else:
             dict = {}
 
index 48ccd2b..e5435a7 100644 (file)
@@ -2,11 +2,11 @@
 import sys
 import os
 import time
-import ConfigParser
 import tempfile
 import codecs
 from sfa.util.xml import XML
 from sfa.util.py23 import StringIO
+from sfa.util.py23 import ConfigParser
 
 default_config = \
 """
index 7299f27..702b685 100644 (file)
 # SFA API faults
 #
 
-try:
-    from xmlrpc.client import Fault as xmlrpcFault
-except:
-    from xmlrpclib import Fault as xmlrpcFault
-    
 from sfa.util.genicode import GENICODE
+from sfa.util.py23 import xmlrpc_client
 
-class SfaFault(xmlrpcFault):
+class SfaFault(xmlrpc_client.Fault):
     def __init__(self, faultCode, faultString, extra = None):
         if extra:
             faultString += ": " + str(extra)
-        xmlrpcFault.__init__(self, faultCode, faultString)
+        xmlrpc_client.Fault.__init__(self, faultCode, faultString)
 
 class Forbidden(SfaFault):
     def __init__(self,  extra = None):
@@ -276,10 +272,10 @@ class SliverDoesNotExist(SfaFault):
     def __str__(self):
         return repr(self.value)
 
-class BadRequestHash(xmlrpcFault):
+class BadRequestHash(xmlrpc_client.Fault):
     def __init__(self, hash = None, extra = None):
         faultString = "bad request hash: " + str(hash)
-        xmlrpcFault.__init__(self, GENICODE.ERROR, faultString)
+        xmlrpc_client.Fault.__init__(self, GENICODE.ERROR, faultString)
 
 class MissingTrustedRoots(SfaFault):
     def __init__(self, value, extra = None):
index 723a8e1..e581e7f 100644 (file)
@@ -1,3 +1,4 @@
+# our own simplistic replacement for six
 try:
     StringType = basestring
 except:
@@ -7,3 +8,13 @@ try:
     from StringIO import StringIO
 except:
     from io import StringIO
+
+try:
+    import xmlrpclib as xmlrpc_client
+except:
+    from xmlrpc import client as xmlrpc_client
+
+try:
+    import ConfigParser
+except:
+    import configparser as ConfigParser
index 0a6a90c..b2e8133 100755 (executable)
@@ -1,6 +1,6 @@
 import unittest
-import xmlrpclib
 from sfa.trust.certificate import Certificate, Keypair
+from sfa.util.py23 import xmlrpc_client
 
 class TestCert(unittest.TestCase):
    def setUp(self):
@@ -42,7 +42,7 @@ class TestCert(unittest.TestCase):
       # try something a bit more complicated, like an xmlrpc encoding of
       # some parameters
       cert = Certificate(subject="test")
-      data = xmlrpclib.dumps((1, "foo", ["a", "b"], {"c": "d", "e": "f"}, True))
+      data = xmlrpc_client.dumps((1, "foo", ["a", "b"], {"c": "d", "e": "f"}, True))
       cert.set_data(data)
       self.assertEqual(cert.get_data(), data)
 
index 022add3..ef3b6f8 100755 (executable)
@@ -23,7 +23,7 @@
 import sys, pprint
 import modulefinder
 
-focus=[ 'sfa' , 'OpenSSL', 'M2Crypto', 'xmlrpclib', 'threading' ]
+focus = [ 'sfa' , 'OpenSSL', 'M2Crypto', 'xmlrpclib', 'threading' ]
 
 class mymf(modulefinder.ModuleFinder):
     def __init__(self,*args,**kwargs):