Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 19 additions & 10 deletions pyjswidgets/pyjamas/JSONService.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class JSONService(object):
content_type = 'application/json-rpc'
accept = 'application/json-rpc'

def __init__(self, url, handler=None, headers=None):
def __init__(self, url, handler=None, headers=None, return_object=False):
"""
Create a JSON remote service object. The url is the URL that will
receive POST data with the JSON request. See the JSON-RPC spec for
Expand Down Expand Up @@ -73,6 +73,7 @@ def __init__(self, url, handler=None, headers=None):
self.headers = headers if headers is not None else {}
if not self.headers.get("Accept"):
self.headers["Accept"] = self.accept
self.return_object = return_object

def callMethod(self, method, params, handler = None):
if handler is None:
Expand Down Expand Up @@ -119,9 +120,12 @@ def sendNotify(self, method, params):
"params": params
}
msg_data = dumps(msg)
if not HTTPRequest().asyncPost(self.url, msg_data, self,
request_object = HTTPRequest().asyncPost(self.url, msg_data, self,
False, self.content_type,
self.headers):
self.headers)
if self.return_object:
return id, request_object
if not request_object:
return -1
return 1

Expand All @@ -135,10 +139,13 @@ def sendRequest(self, method, params, handler):
msg_data = dumps(msg)

request_info = JSONRequestInfo(id, method, handler)
if not HTTPRequest().asyncPost(self.url, msg_data,
request_object = HTTPRequest().asyncPost(self.url, msg_data,
JSONResponseTextHandler(request_info),
False, self.content_type,
self.headers):
self.headers)
if self.return_object:
return id, request_object
if not request_object:
return -1
return id

Expand Down Expand Up @@ -234,8 +241,8 @@ def onError(self, error_str, error_code):
self.request.handler.onRemoteError(error_code, error, self.request)

class ServiceProxy(JSONService):
def __init__(self, serviceURL, serviceName=None, headers=None):
JSONService.__init__(self, serviceURL, headers=headers)
def __init__(self, serviceURL, serviceName=None, headers=None, return_object=False):
JSONService.__init__(self, serviceURL, headers=headers, return_object=return_object)
self.__serviceName = serviceName

def __call__(self, *params, **kwargs):
Expand All @@ -262,12 +269,13 @@ def __call__(self, *params, **kwargs):

# reserved names: callMethod, onCompletion
class JSONProxy(JSONService):
def __init__(self, url, methods=None, headers=None):
def __init__(self, url, methods=None, headers=None, return_object=False):
self._serviceURL = url
self.methods = methods
self.headers = {} if headers is None else headers
self.return_object = return_object
# Init with JSONService, for the use of callMethod
JSONService.__init__(self, url, headers=self.headers)
JSONService.__init__(self, url, headers=self.headers, return_object=self.return_object)
self._registerMethods(methods)

def _registerMethods(self, methods):
Expand All @@ -276,7 +284,8 @@ def _registerMethods(self, methods):
setattr(self,
method,
getattr(ServiceProxy(self._serviceURL, method,
headers=self.headers),
headers=self.headers,
return_object=self.return_object),
'__call__')
)

Expand Down