Index: third_party/twisted_8_1/twisted/web/soap.py |
diff --git a/third_party/twisted_8_1/twisted/web/soap.py b/third_party/twisted_8_1/twisted/web/soap.py |
deleted file mode 100644 |
index 00b0473e3196f20e8d2b408f8930371de51d0ffa..0000000000000000000000000000000000000000 |
--- a/third_party/twisted_8_1/twisted/web/soap.py |
+++ /dev/null |
@@ -1,154 +0,0 @@ |
-# -*- test-case-name: twisted.web.test.test_soap -*- |
-# Copyright (c) 2001-2004 Twisted Matrix Laboratories. |
-# See LICENSE for details. |
- |
- |
-""" |
-SOAP support for twisted.web. |
- |
-Requires SOAPpy 0.10.1 or later. |
- |
-Maintainer: U{Itamar Shtull-Trauring<mailto:twisted@itamarst.org>} |
- |
-Future plans: |
-SOAPContext support of some kind. |
-Pluggable method lookup policies. |
-""" |
- |
-# SOAPpy |
-import SOAPpy |
- |
-# twisted imports |
-from twisted.web import server, resource, client |
-from twisted.internet import defer |
- |
- |
-class SOAPPublisher(resource.Resource): |
- """Publish SOAP methods. |
- |
- By default, publish methods beginning with 'soap_'. If the method |
- has an attribute 'useKeywords', it well get the arguments passed |
- as keyword args. |
- """ |
- |
- isLeaf = 1 |
- |
- # override to change the encoding used for responses |
- encoding = "UTF-8" |
- |
- def lookupFunction(self, functionName): |
- """Lookup published SOAP function. |
- |
- Override in subclasses. Default behaviour - publish methods |
- starting with soap_. |
- |
- @return: callable or None if not found. |
- """ |
- return getattr(self, "soap_%s" % functionName, None) |
- |
- def render(self, request): |
- """Handle a SOAP command.""" |
- data = request.content.read() |
- |
- p, header, body, attrs = SOAPpy.parseSOAPRPC(data, 1, 1, 1) |
- |
- methodName, args, kwargs, ns = p._name, p._aslist, p._asdict, p._ns |
- |
- # deal with changes in SOAPpy 0.11 |
- if callable(args): |
- args = args() |
- if callable(kwargs): |
- kwargs = kwargs() |
- |
- function = self.lookupFunction(methodName) |
- |
- if not function: |
- self._methodNotFound(request, methodName) |
- return server.NOT_DONE_YET |
- else: |
- if hasattr(function, "useKeywords"): |
- keywords = {} |
- for k, v in kwargs.items(): |
- keywords[str(k)] = v |
- d = defer.maybeDeferred(function, **keywords) |
- else: |
- d = defer.maybeDeferred(function, *args) |
- |
- d.addCallback(self._gotResult, request, methodName) |
- d.addErrback(self._gotError, request, methodName) |
- return server.NOT_DONE_YET |
- |
- def _methodNotFound(self, request, methodName): |
- response = SOAPpy.buildSOAP(SOAPpy.faultType("%s:Client" % |
- SOAPpy.NS.ENV_T, "Method %s not found" % methodName), |
- encoding=self.encoding) |
- self._sendResponse(request, response, status=500) |
- |
- def _gotResult(self, result, request, methodName): |
- if not isinstance(result, SOAPpy.voidType): |
- result = {"Result": result} |
- response = SOAPpy.buildSOAP(kw={'%sResponse' % methodName: result}, |
- encoding=self.encoding) |
- self._sendResponse(request, response) |
- |
- def _gotError(self, failure, request, methodName): |
- e = failure.value |
- if isinstance(e, SOAPpy.faultType): |
- fault = e |
- else: |
- fault = SOAPpy.faultType("%s:Server" % SOAPpy.NS.ENV_T, |
- "Method %s failed." % methodName) |
- response = SOAPpy.buildSOAP(fault, encoding=self.encoding) |
- self._sendResponse(request, response, status=500) |
- |
- def _sendResponse(self, request, response, status=200): |
- request.setResponseCode(status) |
- |
- if self.encoding is not None: |
- mimeType = 'text/xml; charset="%s"' % self.encoding |
- else: |
- mimeType = "text/xml" |
- request.setHeader("Content-type", mimeType) |
- request.setHeader("Content-length", str(len(response))) |
- request.write(response) |
- request.finish() |
- |
- |
-class Proxy: |
- """A Proxy for making remote SOAP calls. |
- |
- Pass the URL of the remote SOAP server to the constructor. |
- |
- Use proxy.callRemote('foobar', 1, 2) to call remote method |
- 'foobar' with args 1 and 2, proxy.callRemote('foobar', x=1) |
- will call foobar with named argument 'x'. |
- """ |
- |
- # at some point this should have encoding etc. kwargs |
- def __init__(self, url, namespace=None, header=None): |
- self.url = url |
- self.namespace = namespace |
- self.header = header |
- |
- def _cbGotResult(self, result): |
- result = SOAPpy.parseSOAPRPC(result) |
- if hasattr(result, 'Result'): |
- return result.Result |
- elif len(result) == 1: |
- ## SOAPpy 0.11.6 wraps the return results in a containing structure. |
- ## This check added to make Proxy behaviour emulate SOAPProxy, which |
- ## flattens the structure by default. |
- ## This behaviour is OK because even singleton lists are wrapped in |
- ## another singleton structType, which is almost always useless. |
- return result[0] |
- else: |
- return result |
- |
- def callRemote(self, method, *args, **kwargs): |
- payload = SOAPpy.buildSOAP(args=args, kw=kwargs, method=method, |
- header=self.header, namespace=self.namespace) |
- return client.getPage(self.url, postdata=payload, method="POST", |
- headers={'content-type': 'text/xml', |
- 'SOAPAction': method} |
- ).addCallback(self._cbGotResult) |
- |