git.fiddlerwoaroof.com
Browse code

fixed up some of the functions

Ed L authored on 02/06/2011 02:20:41
Showing 1 changed files
... ...
@@ -41,6 +41,7 @@ from twisted.internet import threads
41 41
 from twisted.web.resource import Resource
42 42
 
43 43
 
44
+import copy
44 45
 import UserDict, collections
45 46
 collections.Mapping.register(UserDict.DictMixin)
46 47
 
... ...
@@ -52,18 +53,19 @@ class ServerEvents(object):
52 53
 		#: A link to the JSON-RPC server instance
53 54
 		self.server = server
54 55
 
55
-	def callmethod(self, txrequest, rpcrequest):
56
+	def callmethod(self, txrequest, rpcrequest, **extra):
56 57
 		'''Finds the method and calls it with the specified args'''
57 58
 		method = self.findmethod(rpcrequest.method)
58 59
 		if method is None: raise MethodNotFound
60
+		extra.update(rpcrequest.kwargs)
59 61
 
60
-		return method(*rpcrequest.args, **rpcrequest.kwargs)
62
+		return method(*rpcrequest.args, **extra)
61 63
 
62 64
 	def findmethod(self, method):
63 65
 		'''Override to allow server to define methods'''
64 66
 		return lambda *a, **kw: 'Test Data'
65 67
 
66
-	def processrequest(self, result, args):
68
+	def processrequest(self, result, args, **kw):
67 69
 		'''Override to implement custom handling of the method result and request'''
68 70
 		return result
69 71
 
... ...
@@ -114,12 +116,12 @@ class ParseError(ServerError):
114 116
 
115 117
 class Request(object):
116 118
 	def __init__(self, content):
117
-		self.version = content.get('jsonrpc')
118
-		self.id = content.get('id')
119
+		self.version = content.pop('jsonrpc', None)
120
+		self.id = content.pop('id', None)
119 121
 
120
-		self.method = content.get('method')
122
+		self.method = content.pop('method', None)
121 123
 
122
-		kwargs = content.get('params', {})
124
+		kwargs = content.pop('params', {})
123 125
 		args = ()
124 126
 		if not isinstance(kwargs, dict):
125 127
 			args = tuple(kwargs)
... ...
@@ -129,6 +131,7 @@ class Request(object):
129 131
 
130 132
 		self.args = args
131 133
 		self.kwargs = dict( (str(k), v) for k,v in kwargs.items() )
134
+		self.extra = content
132 135
 
133 136
 	def check(self):
134 137
 		if self.version != '2.0': raise InvalidRequest
... ...
@@ -179,10 +182,6 @@ class JSON_RPC(Resource):
179 182
 
180 183
 
181 184
 	def render(self, request):
182
-		#move to emen2 event handler
183
-		#ctxid = request.getCookie("ctxid") or request.args.get("ctxid", [None])[0]
184
-		#host = request.getClientIP()
185
-
186 185
 		request.content.seek(0, 0)
187 186
 		try:
188 187
 			try:
... ...
@@ -213,7 +212,7 @@ class JSON_RPC(Resource):
213 212
 
214 213
 		return server.NOT_DONE_YET
215 214
 
216
-	def _action(self, request, contents):
215
+	def _action(self, request, contents, **kw):
217 216
 		result = []
218 217
 
219 218
 		islist = (True if isinstance(contents, list) else False)
... ...
@@ -225,8 +224,10 @@ class JSON_RPC(Resource):
225 224
 			res = None
226 225
 
227 226
 			try:
228
-				res = Response(id=rpcrequest.id, result=self.eventhandler.callmethod(request, rpcrequest))
229
-				res = self.eventhandler.processrequest(res, request.args)
227
+				add = copy.deepcopy(rpcrequest.extra)
228
+				add.update(kw)
229
+				res = Response(id=rpcrequest.id, result=self.eventhandler.callmethod(request, rpcrequest, **add))
230
+				res = self.eventhandler.processrequest(res, request.args, **kw)
230 231
 			except Exception, e:
231 232
 				res = self.render_error(e, rpcrequest.id)
232 233