Browse code
fixed up some of the functions
Ed L authored on 02/06/2011 02:20:41
Showing 1 changed files
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 |
|