def __init__(self, service, methodname): self.service = service self.response = None self.responsedata = None if hasattr(service, 'wsdlDocumentProxy'): self.soapCallInfo = service.wsdlDocumentProxy.methods[methodname] else: self.soapCallInfo = SOAPCallInfo(methodname) super(SOAPMethod, self).__init__(service, methodname)
class SOAPMethod(object): def __init__(self, service, methodname): self.service = service self.response = None self.responsedata = None if hasattr(service, 'wsdlDocumentProxy'): self.soapCallInfo = service.wsdlDocumentProxy.methods[methodname] else: self.soapCallInfo = SOAPCallInfo(methodname) super(SOAPMethod, self).__init__(service, methodname) def getSOAPProxy(self): return self.service.soapServiceProxy soapProxy = property(getSOAPProxy) def getNamespace(self): return self.soapCallInfo.namespace def setNamespace(self, namespace): self.soapCallInfo.namespace = namespace namespace = property(getNamespace, setNamespace) def getLocation(self): return self.soapCallInfo.location def setLocation(self, location): self.soapCallInfo.location = location location = property(getLocation, setLocation) def getSOAPAction(self): return self.soapCallInfo.soapAction def setSOAPAction(self, location): self.soapCallInfo.soapAction = soapAction soapAction = property(getSOAPAction, setSOAPAction) def getArgumentNames(self): return tuple([param.name for param in self.soapCallInfo.inparams]) def getArgumentTypes(self): return tuple([param.type for param in self.soapCallInfo.inparams]) def getArguments(self): return list(self.soapCallInfo.inparams) def getArgument(self, index): return self.soapCallInfo.inparams[index] def appendArgument(self, name, type, namespace=None, *args): return self.soapCallInfo.addInParameter(name, type, namespace, *args) def removeArgument(self, argument): self.soapCallInfo.inparams.remove(argument) def clearArguments(self): self.soapCallInfo.inparams = [] def invoke(self, *args, **kwargs): # Turn values passed in into named parameter args. arginfos = self.getArguments() argparams = tuple(map(asNamedParameter, args, arginfos[0:len(args)])) argvalues = args[len(argparams):] # Configure soap proxy with location and action of call curproxy = self.soapProxy.proxy curaction = self.soapProxy.soapaction curnamespace = self.soapProxy.namespace curtransport = self.soapProxy.transport transwrapper = TransportWrapper(curtransport) try: if self.soapCallInfo.location: self.soapProxy.proxy = SOAPAddress(self.soapCallInfo.location) if self.soapCallInfo.soapAction: self.soapProxy.soapaction = self.soapCallInfo.soapAction if self.soapCallInfo.namespace: self.soapProxy.namespace = self.soapCallInfo.namespace self.soapProxy.transport = transwrapper #self.soapProxy.config.returnAllAttrs = 1 # Grab soap proxy's dynamically genertated callable methodname = self.soapCallInfo.methodName proxycallable = self.soapProxy.__getattr__(methodname) result = proxycallable(*(argparams + argvalues), **kwargs) finally: self.soapProxy.proxy = curproxy self.soapProxy.soapaction = curaction self.soapProxy.namespace = curnamespace self.soapProxy.transport = curtransport self.response = result self.responsedata = transwrapper.responsedata def getResponse(self): return self.response def getResponseData(self): return self.responsedata def getResponsePrimitive(self): return Types.simplify(self.getResponse()) def __repr__(self): reprformat = '<bound %s.%s method %s of %s>' classname = type(self).__name__ modulename = type(self).__module__ methodname = self.soapCallInfo.methodName servicerepr = object.__repr__(self.service) return reprformat % (modulename, classname, methodname, servicerepr) def __str__(self): strformat = '<bound method %s(%s) of %s>' methodname = self.soapCallInfo.methodName argnames = self.getArgumentNames() servicestr = object.__str__(self.service) return strformat % (methodname, ', '.join(argnames), servicestr) def __call__(self, *args, **kwargs): self.invoke(*args, **kwargs) return self.getResponse()