# HG changeset patch
# User Ewan Mellor <ewan@xxxxxxxxxxxxx>
# Date 1175031262 -3600
# Node ID b13a95fc0e2febd6acd4a2761b0afae9cb818b46
# Parent ea68ae90fc105bb343261e4499fbae256af61af4
Move the client-specific parts of xmlrpclib2 into xmlrpcclient.py. This means
that clients do not need to import swathes of server code.
Signed-off-by: Ewan Mellor <ewan@xxxxxxxxxxxxx>
---
tools/python/xen/util/xmlrpcclient.py | 94 ++++++++++++++++++++++++++++++++++
tools/python/xen/util/xmlrpclib2.py | 70 -------------------------
tools/python/xen/xend/XendClient.py | 2
tools/python/xen/xm/XenAPI.py | 13 ++--
tools/python/xen/xm/main.py | 2
5 files changed, 102 insertions(+), 79 deletions(-)
diff -r ea68ae90fc10 -r b13a95fc0e2f tools/python/xen/util/xmlrpcclient.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/python/xen/util/xmlrpcclient.py Tue Mar 27 22:34:22 2007 +0100
@@ -0,0 +1,94 @@
+#============================================================================
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of version 2.1 of the GNU Lesser General Public
+# License as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#============================================================================
+# Copyright (C) 2006 Anthony Liguori <aliguori@xxxxxxxxxx>
+# Copyright (C) 2007 XenSource Inc.
+#============================================================================
+
+
+from httplib import FakeSocket, HTTPConnection, HTTP
+import socket
+import xmlrpclib
+from types import StringTypes
+
+
+try:
+ import SSHTransport
+ ssh_enabled = True
+except ImportError:
+ # SSHTransport is disabled on Python <2.4, because it uses the subprocess
+ # package.
+ ssh_enabled = False
+
+
+
+# A new ServerProxy that also supports httpu urls. An http URL comes in the
+# form:
+#
+# httpu:///absolute/path/to/socket.sock
+#
+# It assumes that the RPC handler is /RPC2. This probably needs to be improved
+
+class HTTPUnixConnection(HTTPConnection):
+ def connect(self):
+ self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+ self.sock.connect(self.host)
+
+class HTTPUnix(HTTP):
+ _connection_class = HTTPUnixConnection
+
+class UnixTransport(xmlrpclib.Transport):
+ def request(self, host, handler, request_body, verbose=0):
+ self.__handler = handler
+ return xmlrpclib.Transport.request(self, host, '/RPC2',
+ request_body, verbose)
+ def make_connection(self, host):
+ return HTTPUnix(self.__handler)
+
+
+# See xmlrpclib2.TCPXMLRPCServer._marshalled_dispatch.
+def conv_string(x):
+ if isinstance(x, StringTypes):
+ s = string.replace(x, "'", r"\047")
+ exec "s = '" + s + "'"
+ return s
+ else:
+ return x
+
+
+class ServerProxy(xmlrpclib.ServerProxy):
+ def __init__(self, uri, transport=None, encoding=None, verbose=0,
+ allow_none=1):
+ if transport == None:
+ (protocol, rest) = uri.split(':', 1)
+ if protocol == 'httpu':
+ uri = 'http:' + rest
+ transport = UnixTransport()
+ elif protocol == 'ssh':
+ global ssh_enabled
+ if ssh_enabled:
+ (transport, uri) = SSHTransport.getHTTPURI(uri)
+ else:
+ raise ValueError(
+ "SSH transport not supported on Python <2.4.")
+ xmlrpclib.ServerProxy.__init__(self, uri, transport, encoding,
+ verbose, allow_none)
+
+ def __request(self, methodname, params):
+ response = xmlrpclib.ServerProxy.__request(self, methodname, params)
+
+ if isinstance(response, tuple):
+ return tuple([conv_string(x) for x in response])
+ else:
+ return conv_string(response)
diff -r ea68ae90fc10 -r b13a95fc0e2f tools/python/xen/util/xmlrpclib2.py
--- a/tools/python/xen/util/xmlrpclib2.py Tue Mar 27 16:52:56 2007 +0100
+++ b/tools/python/xen/util/xmlrpclib2.py Tue Mar 27 22:34:22 2007 +0100
@@ -26,7 +26,6 @@ from types import *
from types import *
-from httplib import HTTPConnection, HTTP
from SimpleXMLRPCServer import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler
import SocketServer
import xmlrpclib, socket, os, stat
@@ -35,14 +34,6 @@ import mkdir
from xen.web import connection
from xen.xend.XendLogging import log
-
-try:
- import SSHTransport
- ssh_enabled = True
-except ImportError:
- # SSHTransport is disabled on Python <2.4, because it uses the subprocess
- # package.
- ssh_enabled = False
#
# Convert all integers to strings as described in the Xen API
@@ -64,13 +55,6 @@ def stringify(value):
return value
-# A new ServerProxy that also supports httpu urls. An http URL comes in the
-# form:
-#
-# httpu:///absolute/path/to/socket.sock
-#
-# It assumes that the RPC handler is /RPC2. This probably needs to be improved
-
# We're forced to subclass the RequestHandler class so that we can work around
# some bugs in Keep-Alive handling and also enabled it by default
class XMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
@@ -105,60 +89,6 @@ class XMLRPCRequestHandler(SimpleXMLRPCR
self.wfile.flush()
if self.close_connection == 1:
self.connection.shutdown(1)
-
-class HTTPUnixConnection(HTTPConnection):
- def connect(self):
- self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
- self.sock.connect(self.host)
-
-class HTTPUnix(HTTP):
- _connection_class = HTTPUnixConnection
-
-class UnixTransport(xmlrpclib.Transport):
- def request(self, host, handler, request_body, verbose=0):
- self.__handler = handler
- return xmlrpclib.Transport.request(self, host, '/RPC2',
- request_body, verbose)
- def make_connection(self, host):
- return HTTPUnix(self.__handler)
-
-
-# See _marshalled_dispatch below.
-def conv_string(x):
- if isinstance(x, StringTypes):
- s = string.replace(x, "'", r"\047")
- exec "s = '" + s + "'"
- return s
- else:
- return x
-
-
-class ServerProxy(xmlrpclib.ServerProxy):
- def __init__(self, uri, transport=None, encoding=None, verbose=0,
- allow_none=1):
- if transport == None:
- (protocol, rest) = uri.split(':', 1)
- if protocol == 'httpu':
- uri = 'http:' + rest
- transport = UnixTransport()
- elif protocol == 'ssh':
- global ssh_enabled
- if ssh_enabled:
- (transport, uri) = SSHTransport.getHTTPURI(uri)
- else:
- raise ValueError(
- "SSH transport not supported on Python <2.4.")
- xmlrpclib.ServerProxy.__init__(self, uri, transport, encoding,
- verbose, allow_none)
-
- def __request(self, methodname, params):
- response = xmlrpclib.ServerProxy.__request(self, methodname, params)
-
- if isinstance(response, tuple):
- return tuple([conv_string(x) for x in response])
- else:
- return conv_string(response)
-
# This is a base XML-RPC server for TCP. It sets allow_reuse_address to
# true, and has an improved marshaller that logs and serializes exceptions.
diff -r ea68ae90fc10 -r b13a95fc0e2f tools/python/xen/xend/XendClient.py
--- a/tools/python/xen/xend/XendClient.py Tue Mar 27 16:52:56 2007 +0100
+++ b/tools/python/xen/xend/XendClient.py Tue Mar 27 22:34:22 2007 +0100
@@ -17,7 +17,7 @@
# Copyright (C) 2006 Anthony Liguori <aliguori@xxxxxxxxxx>
#============================================================================
-from xen.util.xmlrpclib2 import ServerProxy
+from xen.util.xmlrpcclient import ServerProxy
import os
import sys
diff -r ea68ae90fc10 -r b13a95fc0e2f tools/python/xen/xm/XenAPI.py
--- a/tools/python/xen/xm/XenAPI.py Tue Mar 27 16:52:56 2007 +0100
+++ b/tools/python/xen/xm/XenAPI.py Tue Mar 27 22:34:22 2007 +0100
@@ -12,7 +12,7 @@
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#============================================================================
-# Copyright (C) 2006 XenSource Inc.
+# Copyright (C) 2006-2007 XenSource Inc.
#============================================================================
#
# Parts of this file are based upon xmlrpclib.py, the XML-RPC client
@@ -47,7 +47,7 @@ import gettext
import gettext
import xmlrpclib
-import xen.util.xmlrpclib2
+import xen.util.xmlrpcclient as xmlrpcclient
translation = gettext.translation('xen-xm', fallback = True)
@@ -85,7 +85,7 @@ _RECONNECT_AND_RETRY = (lambda _ : ())
_RECONNECT_AND_RETRY = (lambda _ : ())
-class Session(xen.util.xmlrpclib2.ServerProxy):
+class Session(xmlrpcclient.ServerProxy):
"""A server proxy and session manager for communicating with Xend using
the Xen-API.
@@ -104,9 +104,8 @@ class Session(xen.util.xmlrpclib2.Server
def __init__(self, uri, transport=None, encoding=None, verbose=0,
allow_none=1):
- xen.util.xmlrpclib2.ServerProxy.__init__(self, uri, transport,
- encoding, verbose,
- allow_none)
+ xmlrpcclient.ServerProxy.__init__(self, uri, transport, encoding,
+ verbose, allow_none)
self._session = None
self.last_login_method = None
self.last_login_params = None
@@ -153,7 +152,7 @@ class Session(xen.util.xmlrpclib2.Server
elif name.startswith('login'):
return lambda *params: self._login(name, params)
else:
- return xen.util.xmlrpclib2.ServerProxy.__getattr__(self, name)
+ return xmlrpcclient.ServerProxy.__getattr__(self, name)
def _parse_result(result):
diff -r ea68ae90fc10 -r b13a95fc0e2f tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py Tue Mar 27 16:52:56 2007 +0100
+++ b/tools/python/xen/xm/main.py Tue Mar 27 22:34:22 2007 +0100
@@ -49,7 +49,7 @@ from xen.xend.XendConstants import *
from xen.xm.opts import OptionError, Opts, wrap, set_true
from xen.xm import console
-from xen.util.xmlrpclib2 import ServerProxy
+from xen.util.xmlrpcclient import ServerProxy
import XenAPI
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|