Any movement on this? I can't seem to get jsonrpclib to force parameterized 
queries. Replicating this is fairly simple:

1. Create a new app, in default.py add a function. Replace t_test with auth or 
whatever:

@service.jsonrpc
def list():
    data = db(db.t_test.ALL).select()
    return dict(data=data)

2. Drop to a python shell:

>>> import jsonrpclib
>>> j = 
>>> jsonrpclib.Server(uri='http://localhost:8000/appname/default/call/jsonrpc')
>>> j.list()
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File 
"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/jsonrpclib/jsonrpc.py",
 line 276, in __call__
    return self.__send(self.__name, kwargs)
  File 
"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/jsonrpclib/jsonrpc.py",
 line 225, in _request
    check_for_errors(response)
  File 
"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/jsonrpclib/jsonrpc.py",
 line 529, in check_for_errors
    raise ProtocolError((code, message))
ProtocolError: (100, u'TypeError: list() argument after ** must be a mapping, 
not str')

Same problem with simplejsonrpc in gluon/contrib...


Niphlod wrote:
> uhm. The "problem" is that even though every jsonrpc interface I
> worked with was parameter-based, for jsonrpc2 position-based and
> parameter-based are both valid.
>
> On Tuesday, December 11, 2012 10:42:06 PM UTC+1, Jonathan Lundell wrote:
>
>     On 11 Dec 2012, at 1:09 PM, Niphlod <[email protected]
>     <javascript:>> wrote:
>>     I took some time to watch at the jsonrpc specs. Right now I had
>>     experience with jsonrpc only in the "named parameters" format. I
>>     thought it was the standard, my bad.
>>     However, I found out that 2.0 introduced "named parameters" that
>>     were not supported - explicitely - in 1.0
>>
>>     --> {"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1}
>>     <-- {"jsonrpc": "2.0", "result": 19, "id": 1}
>>
>>     --> {"jsonrpc": "2.0", "method": "subtract", "params": {"subtrahend": 
>> 23, "minuend": 42}, "id": 3}
>>     <-- {"jsonrpc": "2.0", "result": 19, "id": 3}
>>
>>     are both valid.
>>
>>     Maybe revert this and make a jsonrpc2 decorator to support named
>>     parameters explicitely would be a better solution?
>
>     How about both jsonrpc1 and jsonrpc2, and then jsonrpc = jsonrpc2?
>     (I think it'd be better to make v2 the default.)
>
>>
>>     On Tuesday, December 11, 2012 9:57:50 PM UTC+1, Kurt Grutzmacher
>>     wrote:
>>
>>         I don't think this is a good JSON-RPC example as the change
>>         broke our app that uses simplejsonrpc or jsonrpclib to make
>>         API calls.
>>
>>         Based on the jsonrpclib python module
>>         @ https://code.google.com/p/jsonrpclib/
>>         <https://code.google.com/p/jsonrpclib/> requests look like:
>>
>>         >>> import jsonrpclib
>>         >>> server = jsonrpclib.Server('http://localhost:8080 
>> <http://localhost:8080/>')
>>         >>> server.add(5,6)
>>         11
>>         >>> print jsonrpclib.history.request
>>         {"jsonrpc": "2.0", "params": [5, 6], "id": "gb3c9g37", "method": 
>> "add"}
>>         >>> print jsonrpclib.history.response
>>         {'jsonrpc': '2.0', 'result': 11, 'id': 'gb3c9g37'}
>>
>>
>>         And the JSON-RPC spec states params should be "An Array of
>>         objects to pass as arguments to the method."
>>         -- http://json-rpc.org/wiki/specification
>>         <http://json-rpc.org/wiki/specification>
>>
>>         However the actual spec doesn't specify array, dict or
>>         whatever as it tries to be universal: "A Structured value
>>         that holds the parameter values to be used during the
>>         invocation of the method. This member MAY be omitted."
>>          http://www.jsonrpc.org/specification#request_object
>>         <http://www.jsonrpc.org/specification#request_object>
>>
>>         For simplejsonrpc and jsonrpclib to work we have to undo this
>>         change in gluon/tools.py
>>
>>
>>         On Wednesday, November 14, 2012 1:25:22 PM UTC-8, Mike Anson
>>         wrote:
>>
>>             Thanks very much for your help Niphlod.
>>
>>             On Wednesday, 14 November 2012 16:10:35 UTC-5, Niphlod wrote:
>>
>>
>>                     Yes I understand your point. The reason it is
>>                     currently like this is because if I use your
>>                     suggestion (which I obviously had originally)
>>
>>                     {"id": 1, "method": "savemessage", "params": {
>>                     "*message*": "variableholdingmessage", "*uid*" :
>>                     "variableholdingmail"}}
>>
>>                     I get message and uid as the values in the DB. So
>>                     I switched them.
>>
>>                     {"id": 1, "method": "savemessage", "params": {
>>                     "variableholdingmessage": "mymessage",
>>                     "variableholdinguid" : "myemail@localhost"}}
>>
>>                     The result means that variableholdingmessage is
>>                     saved as the message and not the expected
>>                     "mymessage". Exactly the same for uid.
>>
>>                 Unfortunately jsonrpc call method has a bug. in
>>                 web2py 2.2.1, in gluon/tools.py, line 4231 should be
>>
>>                 s = methods[method](**params)
>>
>>                 instead of
>>
>>                 s = methods[method](*params)
>>
>>
>>                 sending a patch to Massimo right now!
>>                  
>>
>>
>>                     re: PS -- haha yes I know. I did try it with
>>                     single quotes and it crapped out?? So just kept
>>                     the doubles. It's not that bad!
>>
>>                     re: PS2 -- have you any recommendations to solve
>>                     this special character potential problem?
>>
>>                  
>>                 Normally with jsonrpc you use something that is not
>>                 curl, e.g. a programming language that supports json
>>                 (python?!)
>>                 Escaping on bash without awk, sed, etc is always
>>                 problematic.... but if you're willing to have as only
>>                 limitation the " character that is less frequent to
>>                 use within a message, why don't you use one of the
>>                 methods not requiring a json body to be posted ? e.g.
>>                 @service.xml, @service.csv or @service.json....
>>
>>                 curl -v --get --data-urlencode \"uid=$uid\"
>>                 --data-urlencode \"message=$message\" $url
>>
>>                 here curl takes care of urlencoding the message and
>>                 the uid parameters.
>>
>>
>>                  
>>
>>
>>     -- 
>>      
>>      
>>      
>
>
> -- 
>  
>  
>

-- 



Reply via email to