X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fserver%2Fxmlrpcapi.py;h=1711f88531467e47ef944c0bebefbb2acf09d42c;hb=06768bd605e5d47fadfc90a35c74e30f267226a5;hp=456cd42ddd3977d121a16876b45546b3f71c7e6b;hpb=ee8a376da1107884bee1ea29248a70e4da8410c9;p=sfa.git diff --git a/sfa/server/xmlrpcapi.py b/sfa/server/xmlrpcapi.py index 456cd42d..1711f885 100644 --- a/sfa/server/xmlrpcapi.py +++ b/sfa/server/xmlrpcapi.py @@ -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: @@ -71,12 +71,14 @@ def xmlrpclib_dump(self, value, write): if isinstance(value, Type): f(*args) return - raise TypeError, "cannot marshal %s objects" % type(value) + raise TypeError("cannot marshal %s objects" % type(value)) else: 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: """ @@ -102,7 +104,7 @@ class XmlrpcApi: """ # Look up method if method not in self.methods: - raise SfaInvalidAPIMethod, method + raise SfaInvalidAPIMethod(method) # Get new instance of method try: @@ -111,7 +113,8 @@ class XmlrpcApi: callablemethod = getattr(module, classname)(self) return getattr(module, classname)(self) except (ImportError, AttributeError): - raise SfaInvalidAPIMethod, method + self.logger.log_exc("Error importing method: %s" % method) + raise SfaInvalidAPIMethod(method) def call(self, source, method, *args): """ @@ -130,14 +133,14 @@ 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 - except Exception, e: + except Exception as e: if SOAPpy is not None: self.protocol = 'soap' interface = SOAPpy @@ -150,9 +153,10 @@ class XmlrpcApi: try: result = self.call(source, method, *args) - except SfaFault, fault: - result = fault - except Exception, fault: + except SfaFault as fault: + result = fault + self.logger.log_exc("XmlrpcApi.handle has caught Exception") + except Exception as fault: self.logger.log_exc("XmlrpcApi.handle has caught Exception") result = SfaAPIError(fault) @@ -166,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)