1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 import xmlrpclib
16
17
19 """Indicates an HTTP protocol error."""
20 - def __init__(self, url, errcode, errmsg, headers):
21 xmlrpclib.Error.__init__(self)
22
23 if "@" in url:
24 url = url.split('@')[1]
25 self.url = url
26 self.errcode = errcode
27 self.errmsg = errmsg
28 self.headers = headers
30 return (
31 "<ProtocolError for %s: %s %s>" %
32 (self.url, self.errcode, self.errmsg)
33 )
34
36 """uri [,options] -> a logical connection to an XML-RPC server
37
38 uri is the connection point on the server, given as
39 scheme://host/target.
40
41 The standard implementation always supports the "http" scheme. If
42 SSL socket support is available (Python 2.0), it also supports
43 "https".
44
45 If the target part and the slash preceding it are both omitted,
46 "/RPC2" is assumed.
47
48 The following options can be given as keyword arguments:
49
50 transport: a transport factory
51 encoding: the request encoding (default is UTF-8)
52
53 All 8-bit strings passed to the server proxy are assumed to use
54 the given encoding.
55 """
56
57 - def __init__(self, uri, transport=None, encoding=None, verbose=0,
58 allow_none=0, use_datetime=0):
59
60
61
62 import urllib
63 type, uri = urllib.splittype(uri)
64 if type not in ("http", "https"):
65 raise IOError, "unsupported XML-RPC protocol"
66
67
68 user, uri = urllib.splituser(uri)
69 if user:
70 self.__host, self.__handler = urllib.splithost('//'+uri)
71 self.__host = user[user.index('//')+2:] + '@' + self.__host
72 else:
73 self.__host, self.__handler = urllib.splithost(uri)
74
75 if not self.__handler:
76 self.__handler = "/RPC2"
77
78 if transport is None:
79 if type == "https":
80 transport = xmlrpclib.SafeTransport(use_datetime=use_datetime)
81 else:
82 transport = xmlrpclib.Transport(use_datetime=use_datetime)
83 self.__transport = transport
84
85 self.__encoding = encoding
86 self.__verbose = verbose
87 self.__allow_none = allow_none
88
90
91
92 request = xmlrpclib.dumps(params, methodname, encoding=self.__encoding,
93 allow_none=self.__allow_none)
94
95 response = self.__transport.request(
96 self.__host,
97 self.__handler,
98 request,
99 verbose=self.__verbose
100 )
101
102 if len(response) == 1:
103 response = response[0]
104
105 return response
106
108 return (
109 "<ServerProxy for %s%s>" %
110 (self.__host, self.__handler)
111 )
112
113 __str__ = __repr__
114
116
117 return xmlrpclib._Method(self.__request, name)
118
119 xmlrpclib.ProtocolError = ProtocolError
120