[Checkins] SVN: z3c.jsonrpc/trunk/src/z3c/jsonrpc/ Make progress
with JSON-RPC 2.0 sepcification implementation
Roger Ineichen
roger at projekt01.ch
Fri Jun 13 20:04:46 EDT 2008
Log message for revision 87380:
Make progress with JSON-RPC 2.0 sepcification implementation
Changed:
U z3c.jsonrpc/trunk/src/z3c/jsonrpc/interfaces.py
U z3c.jsonrpc/trunk/src/z3c/jsonrpc/publisher.py
U z3c.jsonrpc/trunk/src/z3c/jsonrpc/tests/test_request.py
-=-
Modified: z3c.jsonrpc/trunk/src/z3c/jsonrpc/interfaces.py
===================================================================
--- z3c.jsonrpc/trunk/src/z3c/jsonrpc/interfaces.py 2008-06-13 21:19:15 UTC (rev 87379)
+++ z3c.jsonrpc/trunk/src/z3c/jsonrpc/interfaces.py 2008-06-14 00:04:45 UTC (rev 87380)
@@ -27,7 +27,6 @@
from zope.publisher.interfaces.http import IHTTPRequest
JSON_CHARSETS = ('utf-8','utf-16', 'utf-32')
-PYTHON_KW_MARKER = "pythonKwMaRkEr"
class IMethodPublisher(zope.interface.Interface):
Modified: z3c.jsonrpc/trunk/src/z3c/jsonrpc/publisher.py
===================================================================
--- z3c.jsonrpc/trunk/src/z3c/jsonrpc/publisher.py 2008-06-13 21:19:15 UTC (rev 87379)
+++ z3c.jsonrpc/trunk/src/z3c/jsonrpc/publisher.py 2008-06-14 00:04:45 UTC (rev 87380)
@@ -16,6 +16,7 @@
"""
__docformat__ = "reStructuredText"
+import re
import traceback
import logging
@@ -33,7 +34,6 @@
from z3c.json.converter import premarshal
from z3c.jsonrpc import interfaces
from z3c.jsonrpc.interfaces import JSON_CHARSETS
-from z3c.jsonrpc.interfaces import PYTHON_KW_MARKER
DEBUG = logging.DEBUG
logger = logging.getLogger()
@@ -106,6 +106,8 @@
pass
return text
+ _typeFormat = re.compile('([a-zA-Z][a-zA-Z0-9_]+|\\.[xy])$')
+
def processInputs(self):
"""take the converted request and make useful args of it."""
json = zope.component.getUtility(IJSONReader)
@@ -130,24 +132,34 @@
# now, look for keyword parameters, the old way
kwargs = None
notPositional = []
- for k in args:
- if isinstance(k, dict):
- if k.has_key(PYTHON_KW_MARKER):
- if isinstance(k[PYTHON_KW_MARKER], dict):
- j = k[PYTHON_KW_MARKER]
- kwargs = j
- notPositional.append(k)
- if notPositional:
- for k in notPositional:
- args.remove(k)
- if kwargs:
- for m in kwargs.keys():
- self.form[str(m)] = kwargs[m]
+ for arg in args:
+ if isinstance(arg, dict):
+ # set every dict key value as form items and support at
+ # least ``:list`` and ``:tuple`` input field name postifx
+ # conversion.
+ for key, d in arg.items():
+ key = str(key)
+ pos = key.rfind(":")
+ if pos > 0:
+ match = self._typeFormat.match(key, pos + 1)
+ if match is not None:
+ key, type_name = key[:pos], key[pos + 1:]
+ if type_name == 'list':
+ d = [d]
+ if type_name == 'tuple':
+ d = tuple(d)
+ self.form[key] = d
elif isinstance(params, dict):
+ # json-rpc 1.2
# Note: the JSONRPCProxy uses allways a dict for params. This means
# we only use this part for extract the data.
- # json-rpc 1.1 (to be proposed)
- # get the numeric params for positional params
+
+ # Get the numeric params for positional params
+ # This was proposed for json-rpc 1.1 but seems not get accepted.
+ # The new 2.0 proposal only defines named paramters if they get
+ # applied as key/value pair.
+
+ # review and check this implementation after JSON-RPC 2.0 final
temp_positional = []
for key in params:
if str(key).isdigit():
Modified: z3c.jsonrpc/trunk/src/z3c/jsonrpc/tests/test_request.py
===================================================================
--- z3c.jsonrpc/trunk/src/z3c/jsonrpc/tests/test_request.py 2008-06-13 21:19:15 UTC (rev 87379)
+++ z3c.jsonrpc/trunk/src/z3c/jsonrpc/tests/test_request.py 2008-06-14 00:04:45 UTC (rev 87380)
@@ -58,7 +58,7 @@
class ParamTestCall:
def __init__(self):
- self.body = '{"id":"httpReq","method":"keyworded","params":[1,{"pythonKwMaRkEr":{"kw1":"aaa"}}]}'
+ self.body = '{"id":"httpReq","method":"keyworded","params":[{"kw1":"aaa"}]}'
self.headers = []
More information about the Checkins
mailing list