@@ -111,21 +111,28 @@ def get_all_slow(self, method, max_count, values=None, key='items',
111111class VkRequestsPool (object ):
112112 """ Позволяет сделать несколько обращений к API за один запрос
113113 за счет метода execute
114+
115+ Если ответ от API приходит в виде list'а (например при вызове users.get),
116+ то значение записывается с ключем list {'list': [...]}
114117 """
115118
116- __slots__ = ('vk' , 'pool' , 'one_param' )
119+ __slots__ = ('vk' , 'pool' , 'one_param' , 'execute_errors' )
117120
118121 def __init__ (self , vk ):
119122 self .vk = vk
120123 self .pool = []
121124 self .one_param = False
125+ self .execute_errors = []
122126
123127 def __enter__ (self ):
124128 return self
125129
126130 def __exit__ (self , * args , ** kwargs ):
127131 self .execute ()
128132
133+ def get_execute_errors (self ):
134+ return self .execute_errors
135+
129136 def method (self , method , values = None ):
130137 """ Добавляет запрос в пулл
131138
@@ -169,7 +176,7 @@ def method_one_param(self, method, default_values=None, key=None,
169176
170177 def check_one_method (self , pool ):
171178 """ Возвращает True, если все запросы в пулле к одному методу """
172- if len ( pool ) > 1 :
179+ if pool :
173180 first_method = pool [0 ][0 ]
174181
175182 for req in pool [1 :]:
@@ -225,22 +232,30 @@ def execute(self):
225232
226233 if self .one_param :
227234 run_code = self .gen_code_one_param (cur_pool )
235+ elif self .check_one_method (cur_pool ):
236+ run_code = self .gen_code_one_method (cur_pool )
228237 else :
229- one_method = self .check_one_method (cur_pool )
238+ run_code = self .gen_code_many_methods (cur_pool )
230239
231- if one_method :
232- run_code = self .gen_code_one_method (cur_pool )
233- else :
234- run_code = self .gen_code_many_methods (cur_pool )
240+ response_raw = self .vk .method ('execute' , {'code' : run_code }, raw = True )
235241
236- response = self .vk .method ('execute' , {'code' : run_code })
242+ response = response_raw ['response' ]
243+ response_errors = response_raw .get ('execute_errors' )
244+
245+ if response_errors :
246+ self .execute_errors += response_errors [:- 1 ]
237247
238248 for x in range (len (response )):
239249 if self .one_param :
240- self .one_param ['return' ][cur_pool [x ]] = response [x ]
250+ if response [x ] is False :
251+ self .one_param ['return' ][cur_pool [x ]] = {'_error' : True }
252+ else :
253+ self .one_param ['return' ][cur_pool [x ]] = response [x ]
241254 else :
242255 if response [x ] is False :
243256 self .pool [i + x ][2 ].update ({'_error' : True })
257+ elif type (response [x ]) is list :
258+ self .pool [i + x ][2 ].update ({'list' : response [x ]})
244259 else :
245260 self .pool [i + x ][2 ].update (response [x ])
246261
0 commit comments