|
5 | 5 | @contact: https://vk.com/python273 |
6 | 6 | @license Apache License, Version 2.0, see LICENSE file |
7 | 7 |
|
8 | | -Copyright (C) 2015 |
| 8 | +Copyright (C) 2016 |
9 | 9 | """ |
10 | 10 |
|
11 | 11 | import json |
@@ -111,21 +111,28 @@ def get_all_slow(self, method, max_count, values=None, key='items', |
111 | 111 | class VkRequestsPool(object): |
112 | 112 | """ Позволяет сделать несколько обращений к API за один запрос |
113 | 113 | за счет метода execute |
| 114 | +
|
| 115 | + Если ответ от API приходит в виде list'а (например при вызове users.get), |
| 116 | + то значение записывается с ключем list {'list': [...]} |
114 | 117 | """ |
115 | 118 |
|
116 | | - __slots__ = ('vk', 'pool', 'one_param') |
| 119 | + __slots__ = ('vk', 'pool', 'one_param', 'execute_errors') |
117 | 120 |
|
118 | 121 | def __init__(self, vk): |
119 | 122 | self.vk = vk |
120 | 123 | self.pool = [] |
121 | 124 | self.one_param = False |
| 125 | + self.execute_errors = [] |
122 | 126 |
|
123 | 127 | def __enter__(self): |
124 | 128 | return self |
125 | 129 |
|
126 | 130 | def __exit__(self, *args, **kwargs): |
127 | 131 | self.execute() |
128 | 132 |
|
| 133 | + def get_execute_errors(self): |
| 134 | + return self.execute_errors |
| 135 | + |
129 | 136 | def method(self, method, values=None): |
130 | 137 | """ Добавляет запрос в пулл |
131 | 138 |
|
@@ -169,7 +176,7 @@ def method_one_param(self, method, default_values=None, key=None, |
169 | 176 |
|
170 | 177 | def check_one_method(self, pool): |
171 | 178 | """ Возвращает True, если все запросы в пулле к одному методу """ |
172 | | - if len(pool) > 1: |
| 179 | + if pool: |
173 | 180 | first_method = pool[0][0] |
174 | 181 |
|
175 | 182 | for req in pool[1:]: |
@@ -225,22 +232,30 @@ def execute(self): |
225 | 232 |
|
226 | 233 | if self.one_param: |
227 | 234 | 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) |
228 | 237 | else: |
229 | | - one_method = self.check_one_method(cur_pool) |
| 238 | + run_code = self.gen_code_many_methods(cur_pool) |
230 | 239 |
|
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) |
235 | 241 |
|
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] |
237 | 247 |
|
238 | 248 | for x in range(len(response)): |
239 | 249 | 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] |
241 | 254 | else: |
242 | 255 | if response[x] is False: |
243 | 256 | 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]}) |
244 | 259 | else: |
245 | 260 | self.pool[i + x][2].update(response[x]) |
246 | 261 |
|
|
0 commit comments