Skip to content

Commit 16b9221

Browse files
author
catchjosh
committed
Tweaked MultiCall so it takes a 'ServerProxy' instance instead of a string (like the xmlrpclib implementation.)
git-svn-id: http://jsonrpclib.googlecode.com/svn/trunk@6 ae587032-bbab-11de-869a-473eb4776397
1 parent 1438403 commit 16b9221

File tree

1 file changed

+19
-17
lines changed

1 file changed

+19
-17
lines changed

jsonrpclib.py

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,8 @@ def __run_request(self, request, notify=None):
165165
global _last_response
166166
_last_request = request
167167

168+
print request
169+
168170
response = self.__transport.request(
169171
self.__host,
170172
self.__handler,
@@ -204,7 +206,7 @@ def __call__(self, *args, **kwargs):
204206

205207
# Batch implementation
206208

207-
class Job(object):
209+
class MultiCallMethod(object):
208210

209211
def __init__(self, method, notify=False):
210212
self.method = method
@@ -227,15 +229,15 @@ def request(self, encoding=None, rpcid=None):
227229
def __repr__(self):
228230
return '%s' % self.request()
229231

230-
class MultiCall(ServerProxy):
232+
class MultiCall(object):
231233

232-
def __init__(self, uri, *args, **kwargs):
234+
def __init__(self, server):
235+
self.__server = server
233236
self.__job_list = []
234-
ServerProxy.__init__(self, uri, *args, **kwargs)
235237

236238
def __run_request(self, request_body):
237-
run_request = getattr(ServerProxy, '_ServerProxy__run_request')
238-
return run_request(self, request_body)
239+
run_request = getattr(self.__server, '_ServerProxy__run_request')
240+
return run_request(request_body)
239241

240242
def __request(self):
241243
if len(self.__job_list) < 1:
@@ -248,15 +250,15 @@ def __request(self):
248250
return [ response['result'] for response in responses ]
249251

250252
def __notify(self, method, params=[]):
251-
new_job = Job(method, notify=True)
253+
new_job = MultiCallMethod(method, notify=True)
252254
new_job.params = params
253255
self.__job_list.append(new_job)
254256

255257
def __getattr__(self, name):
256258
if name in ('__run', '__notify'):
257259
wrapped_name = '_%s%s' % (self.__class__.__name__, name)
258260
return getattr(self, wrapped_name)
259-
new_job = Job(name)
261+
new_job = MultiCallMethod(name)
260262
self.__job_list.append(new_job)
261263
return new_job
262264

@@ -266,7 +268,7 @@ def __getattr__(self, name):
266268
# Not really sure if we should include these, but oh well.
267269
Server = ServerProxy
268270

269-
class Fault(dict):
271+
class Fault(object):
270272
# JSON-RPC error class
271273
def __init__(self, code=-32000, message='Server error'):
272274
self.faultCode = code
@@ -279,8 +281,10 @@ def response(self, rpcid=None, version=None):
279281
global _version
280282
if not version:
281283
version = _version
282-
return dumps(self, rpcid=None, methodresponse=True,
283-
version=version)
284+
return dumps(self, rpcid=rpcid, version=version)
285+
286+
def __repr__(self):
287+
return '<Fault %s: %s>' % (self.faultCode, self.faultString)
284288

285289
def random_id(length=8):
286290
import string
@@ -343,7 +347,7 @@ def dumps(params=[], methodname=None, methodresponse=None,
343347
"""
344348
global _version
345349
if not version:
346-
verion = _version
350+
version = _version
347351
valid_params = (types.TupleType, types.ListType, types.DictType)
348352
if methodname in types.StringTypes and \
349353
type(params) not in valid_params and \
@@ -354,18 +358,16 @@ def dumps(params=[], methodname=None, methodresponse=None,
354358
"""
355359
raise TypeError('Params must be a dict, list, tuple or Fault ' +
356360
'instance.')
357-
if type(methodname) not in types.StringTypes and methodresponse != True:
358-
raise ValueError('Method name must be a string, or methodresponse '+
359-
'must be set to True.')
360-
if isinstance(params, Fault) and not methodresponse:
361-
raise TypeError('You can only use a Fault for responses.')
362361
# Begin parsing object
363362
payload = Payload(rpcid=rpcid, version=version)
364363
if not encoding:
365364
encoding = 'utf-8'
366365
if type(params) is Fault:
367366
response = payload.error(params.faultCode, params.faultString)
368367
return jdumps(response, encoding=encoding)
368+
if type(methodname) not in types.StringTypes and methodresponse != True:
369+
raise ValueError('Method name must be a string, or methodresponse '+
370+
'must be set to True.')
369371
if methodresponse is True:
370372
if rpcid is None:
371373
raise ValueError('A method response must have an rpcid.')

0 commit comments

Comments
 (0)