def test_flatten(self): s = http.serialize_flatten('p1', ['v1', 'v2', 'v3']) self.assertEqual(s, (('p1[]', 'v1'), ('p1[]', 'v2'), ('p1[]', 'v3'))) s = http.serialize_flatten('p1', [{'k1': 'v1', 'k2': True}, {'k1': 'v2', 'k2': False}]) # can't predict the order in which the dictionaries be processed, so # just make sure all the tuples are in place self.assertEquals(len(s), 4) self.assertEquals(tuple(sorted(s[:2])), (('p1[][k1]', 'v1'), ('p1[][k2]', 'true'))) self.assertEquals(tuple(sorted(s[2:])), (('p1[][k1]', 'v2'), ('p1[][k2]', 'false')))
def test_flatten(self): s = http.serialize_flatten('p1', ['v1', 'v2', 'v3']) self.assertEqual(s, (('p1[0]', 'v1'), ('p1[1]', 'v2'), ('p1[2]', 'v3'))) s = http.serialize_flatten('p1', ['v1', 'v2', 'v3'], False) self.assertEqual(s, (('p1[]', 'v1'), ('p1[]', 'v2'), ('p1[]', 'v3'))) s = http.serialize_flatten('p1', [{ 'k1': 'v1', 'k2': True }, { 'k1': 'v2', 'k2': False }]) # can't predict the order in which the dictionaries be processed, so # just make sure all the tuples are in place self.assertEquals(len(s), 4) self.assertEquals(tuple(sorted(s[:2])), (('p1[0][k1]', 'v1'), ('p1[0][k2]', 'true'))) self.assertEquals(tuple(sorted(s[2:])), (('p1[1][k1]', 'v2'), ('p1[1][k2]', 'false')))
def method_call(self, params): # a trick - get the method name from the stack frame preceding the # current one method = inspect.stack()[1][3] # serialize the parameters serialized = () for name, value in params.items(): if name == 'self': continue if value is None: continue serialized += http.serialize_flatten(name, value) request = http.Request('POST', self.get_url(method), serialized) return request, parsers.parse_json
def serialize_flatten(self, request): # use serialize_flatten to flatten params serialized = () for name, value in request.params.items(): serialized += http.serialize_flatten(name, value, False) request.params = serialized