#
import string
-import xmlrpclib
# SOAP support is optional
try:
#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:
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:
"""
"""
# Look up method
if method not in self.methods:
- raise SfaInvalidAPIMethod, method
+ raise SfaInvalidAPIMethod(method)
# Get new instance of method
try:
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):
"""
"""
# Parse request into method name and arguments
try:
- interface = xmlrpclib
- self.protocol = 'xmlrpclib'
- (args, method) = xmlrpclib.loads(data)
- if method_map.has_key(method):
+ interface = xmlrpc_client
+ self.protocol = 'xmlrpc'
+ (args, method) = xmlrpc_client.loads(data)
+ if method in method_map:
method = method_map[method]
methodresponse = True
- except Exception, e:
+ except Exception as e:
if SOAPpy is not None:
self.protocol = 'soap'
interface = SOAPpy
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)
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)