Skip to content

Commit a8b97ac

Browse files
committed
Update VkRequestsPool: fix getting lists; ability to get errors;
1 parent 77f53c1 commit a8b97ac

1 file changed

Lines changed: 24 additions & 9 deletions

File tree

vk_api/vk_tools.py

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -111,21 +111,28 @@ def get_all_slow(self, method, max_count, values=None, key='items',
111111
class 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

Comments
 (0)