Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(242)

Unified Diff: third_party/twisted_8_1/twisted/web/xmlrpc.py

Issue 12261012: Remove third_party/twisted_8_1 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/twisted_8_1/twisted/web/xmlrpc.py
diff --git a/third_party/twisted_8_1/twisted/web/xmlrpc.py b/third_party/twisted_8_1/twisted/web/xmlrpc.py
deleted file mode 100644
index 70be32274a4deb4de17e373905c2ed089337087b..0000000000000000000000000000000000000000
--- a/third_party/twisted_8_1/twisted/web/xmlrpc.py
+++ /dev/null
@@ -1,414 +0,0 @@
-# -*- test-case-name: twisted.web.test.test_xmlrpc -*-
-#
-# Copyright (c) 2001-2007 Twisted Matrix Laboratories.
-# See LICENSE for details.
-
-
-"""
-A generic resource for publishing objects via XML-RPC.
-
-Requires xmlrpclib (comes standard with Python 2.2 and later, otherwise can be
-downloaded from http://www.pythonware.com/products/xmlrpc/).
-
-Maintainer: U{Itamar Shtull-Trauring<mailto:twisted@itamarst.org>}
-"""
-from __future__ import nested_scopes
-
-__version__ = "$Revision: 1.32 $"[11:-2]
-
-# System Imports
-import xmlrpclib
-import urlparse
-
-# Sibling Imports
-from twisted.web import resource, server, http
-from twisted.internet import defer, protocol, reactor
-from twisted.python import log, reflect, failure
-
-# These are deprecated, use the class level definitions
-NOT_FOUND = 8001
-FAILURE = 8002
-
-
-# Useful so people don't need to import xmlrpclib directly
-Fault = xmlrpclib.Fault
-Binary = xmlrpclib.Binary
-Boolean = xmlrpclib.Boolean
-DateTime = xmlrpclib.DateTime
-
-class NoSuchFunction(Fault):
- """
- There is no function by the given name.
- """
-
-
-class Handler:
- """
- Handle a XML-RPC request and store the state for a request in progress.
-
- Override the run() method and return result using self.result,
- a Deferred.
-
- We require this class since we're not using threads, so we can't
- encapsulate state in a running function if we're going to have
- to wait for results.
-
- For example, lets say we want to authenticate against twisted.cred,
- run a LDAP query and then pass its result to a database query, all
- as a result of a single XML-RPC command. We'd use a Handler instance
- to store the state of the running command.
- """
-
- def __init__(self, resource, *args):
- self.resource = resource # the XML-RPC resource we are connected to
- self.result = defer.Deferred()
- self.run(*args)
-
- def run(self, *args):
- # event driven equivalent of 'raise UnimplementedError'
- self.result.errback(
- NotImplementedError("Implement run() in subclasses"))
-
-
-class XMLRPC(resource.Resource):
- """
- A resource that implements XML-RPC.
-
- You probably want to connect this to '/RPC2'.
-
- Methods published can return XML-RPC serializable results, Faults,
- Binary, Boolean, DateTime, Deferreds, or Handler instances.
-
- By default methods beginning with 'xmlrpc_' are published.
-
- Sub-handlers for prefixed methods (e.g., system.listMethods)
- can be added with putSubHandler. By default, prefixes are
- separated with a '.'. Override self.separator to change this.
- """
-
- # Error codes for Twisted, if they conflict with yours then
- # modify them at runtime.
- NOT_FOUND = 8001
- FAILURE = 8002
-
- isLeaf = 1
- separator = '.'
- allowedMethods = ('POST',)
-
- def __init__(self, allowNone=False):
- resource.Resource.__init__(self)
- self.subHandlers = {}
- self.allowNone = allowNone
-
- def putSubHandler(self, prefix, handler):
- self.subHandlers[prefix] = handler
-
- def getSubHandler(self, prefix):
- return self.subHandlers.get(prefix, None)
-
- def getSubHandlerPrefixes(self):
- return self.subHandlers.keys()
-
- def render_POST(self, request):
- request.content.seek(0, 0)
- request.setHeader("content-type", "text/xml")
- try:
- args, functionPath = xmlrpclib.loads(request.content.read())
- except Exception, e:
- f = Fault(self.FAILURE, "Can't deserialize input: %s" % (e,))
- self._cbRender(f, request)
- else:
- try:
- function = self._getFunction(functionPath)
- except Fault, f:
- self._cbRender(f, request)
- else:
- defer.maybeDeferred(function, *args).addErrback(
- self._ebRender
- ).addCallback(
- self._cbRender, request
- )
- return server.NOT_DONE_YET
-
- def _cbRender(self, result, request):
- if isinstance(result, Handler):
- result = result.result
- if not isinstance(result, Fault):
- result = (result,)
- try:
- s = xmlrpclib.dumps(result, methodresponse=True,
- allow_none=self.allowNone)
- except Exception, e:
- f = Fault(self.FAILURE, "Can't serialize output: %s" % (e,))
- s = xmlrpclib.dumps(f, methodresponse=True,
- allow_none=self.allowNone)
- request.setHeader("content-length", str(len(s)))
- request.write(s)
- request.finish()
-
- def _ebRender(self, failure):
- if isinstance(failure.value, Fault):
- return failure.value
- log.err(failure)
- return Fault(self.FAILURE, "error")
-
- def _getFunction(self, functionPath):
- """
- Given a string, return a function, or raise NoSuchFunction.
-
- This returned function will be called, and should return the result
- of the call, a Deferred, or a Fault instance.
-
- Override in subclasses if you want your own policy. The default
- policy is that given functionPath 'foo', return the method at
- self.xmlrpc_foo, i.e. getattr(self, "xmlrpc_" + functionPath).
- If functionPath contains self.separator, the sub-handler for
- the initial prefix is used to search for the remaining path.
- """
- if functionPath.find(self.separator) != -1:
- prefix, functionPath = functionPath.split(self.separator, 1)
- handler = self.getSubHandler(prefix)
- if handler is None:
- raise NoSuchFunction(self.NOT_FOUND,
- "no such subHandler %s" % prefix)
- return handler._getFunction(functionPath)
-
- f = getattr(self, "xmlrpc_%s" % functionPath, None)
- if not f:
- raise NoSuchFunction(self.NOT_FOUND,
- "function %s not found" % functionPath)
- elif not callable(f):
- raise NoSuchFunction(self.NOT_FOUND,
- "function %s not callable" % functionPath)
- else:
- return f
-
- def _listFunctions(self):
- """
- Return a list of the names of all xmlrpc methods.
- """
- return reflect.prefixedMethodNames(self.__class__, 'xmlrpc_')
-
-
-class XMLRPCIntrospection(XMLRPC):
- """
- Implement the XML-RPC Introspection API.
-
- By default, the methodHelp method returns the 'help' method attribute,
- if it exists, otherwise the __doc__ method attribute, if it exists,
- otherwise the empty string.
-
- To enable the methodSignature method, add a 'signature' method attribute
- containing a list of lists. See methodSignature's documentation for the
- format. Note the type strings should be XML-RPC types, not Python types.
- """
-
- def __init__(self, parent):
- """
- Implement Introspection support for an XMLRPC server.
-
- @param parent: the XMLRPC server to add Introspection support to.
- """
-
- XMLRPC.__init__(self)
- self._xmlrpc_parent = parent
-
- def xmlrpc_listMethods(self):
- """
- Return a list of the method names implemented by this server.
- """
- functions = []
- todo = [(self._xmlrpc_parent, '')]
- while todo:
- obj, prefix = todo.pop(0)
- functions.extend([prefix + name for name in obj._listFunctions()])
- todo.extend([ (obj.getSubHandler(name),
- prefix + name + obj.separator)
- for name in obj.getSubHandlerPrefixes() ])
- return functions
-
- xmlrpc_listMethods.signature = [['array']]
-
- def xmlrpc_methodHelp(self, method):
- """
- Return a documentation string describing the use of the given method.
- """
- method = self._xmlrpc_parent._getFunction(method)
- return (getattr(method, 'help', None)
- or getattr(method, '__doc__', None) or '')
-
- xmlrpc_methodHelp.signature = [['string', 'string']]
-
- def xmlrpc_methodSignature(self, method):
- """
- Return a list of type signatures.
-
- Each type signature is a list of the form [rtype, type1, type2, ...]
- where rtype is the return type and typeN is the type of the Nth
- argument. If no signature information is available, the empty
- string is returned.
- """
- method = self._xmlrpc_parent._getFunction(method)
- return getattr(method, 'signature', None) or ''
-
- xmlrpc_methodSignature.signature = [['array', 'string'],
- ['string', 'string']]
-
-
-def addIntrospection(xmlrpc):
- """
- Add Introspection support to an XMLRPC server.
-
- @param xmlrpc: The xmlrpc server to add Introspection support to.
- """
- xmlrpc.putSubHandler('system', XMLRPCIntrospection(xmlrpc))
-
-
-class QueryProtocol(http.HTTPClient):
-
- def connectionMade(self):
- self.sendCommand('POST', self.factory.path)
- self.sendHeader('User-Agent', 'Twisted/XMLRPClib')
- self.sendHeader('Host', self.factory.host)
- self.sendHeader('Content-type', 'text/xml')
- self.sendHeader('Content-length', str(len(self.factory.payload)))
- if self.factory.user:
- auth = '%s:%s' % (self.factory.user, self.factory.password)
- auth = auth.encode('base64').strip()
- self.sendHeader('Authorization', 'Basic %s' % (auth,))
- self.endHeaders()
- self.transport.write(self.factory.payload)
-
- def handleStatus(self, version, status, message):
- if status != '200':
- self.factory.badStatus(status, message)
-
- def handleResponse(self, contents):
- self.factory.parseResponse(contents)
-
-
-payloadTemplate = """<?xml version="1.0"?>
-<methodCall>
-<methodName>%s</methodName>
-%s
-</methodCall>
-"""
-
-
-class _QueryFactory(protocol.ClientFactory):
-
- deferred = None
- protocol = QueryProtocol
-
- def __init__(self, path, host, method, user=None, password=None,
- allowNone=False, args=()):
- self.path, self.host = path, host
- self.user, self.password = user, password
- self.payload = payloadTemplate % (method,
- xmlrpclib.dumps(args, allow_none=allowNone))
- self.deferred = defer.Deferred()
-
- def parseResponse(self, contents):
- if not self.deferred:
- return
- try:
- response = xmlrpclib.loads(contents)
- except:
- deferred, self.deferred = self.deferred, None
- deferred.errback(failure.Failure())
- else:
- deferred, self.deferred = self.deferred, None
- deferred.callback(response[0][0])
-
- def clientConnectionLost(self, _, reason):
- if self.deferred is not None:
- deferred, self.deferred = self.deferred, None
- deferred.errback(reason)
-
- clientConnectionFailed = clientConnectionLost
-
- def badStatus(self, status, message):
- deferred, self.deferred = self.deferred, None
- deferred.errback(ValueError(status, message))
-
-
-
-class Proxy:
- """
- A Proxy for making remote XML-RPC calls.
-
- Pass the URL of the remote XML-RPC server to the constructor.
-
- Use proxy.callRemote('foobar', *args) to call remote method
- 'foobar' with *args.
-
- @ivar queryFactory: object returning a factory for XML-RPC protocol. Mainly
- useful for tests.
- """
- queryFactory = _QueryFactory
-
- def __init__(self, url, user=None, password=None, allowNone=False):
- """
- @type url: C{str}
- @param url: The URL to which to post method calls. Calls will be made
- over SSL if the scheme is HTTPS. If netloc contains username or
- password information, these will be used to authenticate, as long as
- the C{user} and C{password} arguments are not specified.
-
- @type user: C{str} or None
- @param user: The username with which to authenticate with the server
- when making calls. If specified, overrides any username information
- embedded in C{url}. If not specified, a value may be taken from C{url}
- if present.
-
- @type password: C{str} or None
- @param password: The password with which to authenticate with the
- server when making calls. If specified, overrides any password
- information embedded in C{url}. If not specified, a value may be taken
- from C{url} if present.
-
- @type allowNone: C{bool} or None
- @param allowNone: allow the use of None values in parameters. It's
- passed to the underlying xmlrpclib implementation. Default to False.
- """
- scheme, netloc, path, params, query, fragment = urlparse.urlparse(url)
- netlocParts = netloc.split('@')
- if len(netlocParts) == 2:
- userpass = netlocParts.pop(0).split(':')
- self.user = userpass.pop(0)
- try:
- self.password = userpass.pop(0)
- except:
- self.password = None
- else:
- self.user = self.password = None
- hostport = netlocParts[0].split(':')
- self.host = hostport.pop(0)
- try:
- self.port = int(hostport.pop(0))
- except:
- self.port = None
- self.path = path
- if self.path in ['', None]:
- self.path = '/'
- self.secure = (scheme == 'https')
- if user is not None:
- self.user = user
- if password is not None:
- self.password = password
- self.allowNone = allowNone
-
- def callRemote(self, method, *args):
- factory = self.queryFactory(
- self.path, self.host, method, self.user,
- self.password, self.allowNone, args)
- if self.secure:
- from twisted.internet import ssl
- reactor.connectSSL(self.host, self.port or 443,
- factory, ssl.ClientContextFactory())
- else:
- reactor.connectTCP(self.host, self.port or 80, factory)
- return factory.deferred
-
-__all__ = ["XMLRPC", "Handler", "NoSuchFunction", "Fault", "Proxy"]
-
« no previous file with comments | « third_party/twisted_8_1/twisted/web/woven/widgets.py ('k') | third_party/twisted_8_1/twisted/words/__init__.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698