Author: damoxc
Revision: 5641
Log:
stop the update_ui method from calling core methods when the client
isn't connected
make the current http request available to exported methods via a __request__
global that gets set before each call
Diff:
Modified: trunk/deluge/ui/web/json_api.py
===================================================================
--- trunk/deluge/ui/web/json_api.py 2009-08-10 10:24:45 UTC (rev 5640)
+++ trunk/deluge/ui/web/json_api.py 2009-08-11 15:22:59 UTC (rev 5641)
@@ -138,7 +138,7 @@
def _on_client_disconnect(self, *args):
component.get("Web.PluginManager").stop()
- def _exec_local(self, method, params):
+ def _exec_local(self, method, params, request):
"""
Handles executing all local methods.
"""
@@ -151,7 +151,9 @@
elif method in self._local_methods:
# This will eventually process methods that the server adds
# and any plugins.
- return self._local_methods[method](*params)
+ meth = self._local_methods[method]
+ meth.func_globals['__request__'] = request
+ return meth(*params)
raise JSONException("Unknown system method")
def _exec_remote(self, method, params):
@@ -169,25 +171,26 @@
"""
request_id = None
try:
- request = json.loads(request)
+ request.json = json.loads(request.json)
except ValueError:
raise JSONException("JSON not decodable")
- if "method" not in request or "id" not in request or \
- "params" not in request:
+ if "method" not in request.json or "id" not in request.json or \
+ "params" not in request.json:
raise JSONException("Invalid JSON request")
- method, params = request["method"], request["params"]
- request_id = request["id"]
+ method, params = request.json["method"], request.json["params"]
+ request_id = request.json["id"]
try:
if method.startswith("system."):
- return self._exec_local(method, params), request_id
+ return self._exec_local(method, params, request), request_id
elif method in self._local_methods:
- return self._exec_local(method, params), request_id
+ return self._exec_local(method, params, request), request_id
elif method in self._remote_methods:
return self._exec_remote(method, params), request_id
except Exception, e:
+ log.error("Error calling method `%s`", method)
log.exception(e)
d = Deferred()
d.callback(None)
@@ -215,7 +218,7 @@
"""
log.debug("json-request: %s", request.json)
response = {"result": None, "error": None, "id": None}
- d, response["id"] = self._handle_request(request.json)
+ d, response["id"] = self._handle_request(request)
d.addCallback(self._on_rpc_request_finished, response, request)
d.addErrback(self._on_rpc_request_failed, response, request)
return d
@@ -369,17 +372,17 @@
:returns: The torrent and ui information.
:rtype: dictionary
"""
+ d = Deferred()
ui_info = {
"torrents": None,
"filters": None,
"stats": None
}
-
- d = Deferred()
-
- log.info("Updating ui with keys '%r' and filters '%r'", keys,
- filter_dict)
-
+
+ if not client.connected():
+ d.callback(ui_info)
+ return d
+
def got_stats(stats):
ui_info["stats"] = stats
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"deluge-commit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/deluge-commit?hl=en
-~----------~----~----~----~------~----~------~--~---