@@ -37,17 +37,24 @@ def _prepare_domain(string):
3737 user_id , code = o .path .split ('/' )[2 :4 ]
3838 return "{0}://{1}/rest/{2}/{3}" .format (o .scheme , o .netloc , user_id , code )
3939
40- def _prepare_params (self , params ):
40+ def _prepare_params (self , params , prev = '' ):
4141 """Transforms list of params to a valid bitrix array."""
42-
43- new_params = {}
44- for index , value in params .items ():
45- if type (value ) is dict :
46- for i , v in value .items ():
47- new_params ['%s[%s]' % (index , i )] = v
48- else :
49- new_params [index ] = value
50- return new_params
42+ if isinstance (params , dict ):
43+ ret = ''
44+ for key , value in params .items ():
45+ if isinstance (value , dict ):
46+ if prev :
47+ key = "{0}[{1}]" .format (prev , key )
48+ ret += self ._prepare_params (value , key )
49+ elif (isinstance (value , list ) or isinstance (value , tuple )) and len (value ) > 0 :
50+ for offset , val in enumerate (value ):
51+ ret += "{0}[{1}][{2}]={3}&" .format (prev , key , offset , val )
52+ else :
53+ if prev :
54+ ret += "{0}[{1}]={2}&" .format (prev , key , value )
55+ else :
56+ ret += "{0}={1}&" .format (key , value )
57+ return ret
5158
5259 def callMethod (self , method , ** params ):
5360 """Calls a REST method with specified parameters.
@@ -75,9 +82,9 @@ def callMethod(self, method, **params):
7582
7683 if 'error' in r :
7784 raise BitrixError (r )
78- if 'page ' not in params :
79- params ['page ' ] = 1
80- if 'next' in r and r ['total' ] > ( r [ 'next' ] * params ['page' ]) :
81- params ['page ' ] += 1
85+ if 'start ' not in params :
86+ params ['start ' ] = 0
87+ if 'next' in r and r ['total' ] > params ['start' ] :
88+ params ['start ' ] += 50
8289 return r ['result' ] + self .callMethod (method , ** params )
8390 return r ['result' ]
0 commit comments