1616
1717
1818class VkTools (object ):
19+ """ Содержит некоторые воспомогательные функции, которые могут понадобиться
20+ при использовании API
21+ """
22+
23+ __slots__ = ('vk' ,)
24+
1925 def __init__ (self , vk ):
2026 """
21-
2227 :param vk: объект VkApi
2328 """
24-
2529 self .vk = vk
2630
27- def get_all (self , method , max_count , values = None , key = 'items' ,
28- limit = None ):
31+ def get_all (self , method , max_count , values = None , key = 'items' , limit = None ):
2932 """ Получить все элементы
3033 Работает в методах, где в ответе есть count и items или users
3134 За один запрос получает max_count * 25 элементов
@@ -56,18 +59,18 @@ def get_all(self, method, max_count, values=None, key='items',
5659 response = self .vk .method ('execute' , {'code' : run_code })
5760
5861 items += response ['items' ]
62+ offset = response ['offset' ]
5963
60- if response [ ' offset' ] >= response ['count' ]:
64+ if offset >= response ['count' ]:
6165 break
6266
6367 if limit and len (items ) >= limit :
6468 break
6569
66- offset = response ['offset' ]
67-
6870 return {'count' : len (items ), key : items }
6971
70- def get_all_slow (self , method , values = None , max_count = 200 , key = 'items' ):
72+ def get_all_slow (self , method , max_count , values = None , key = 'items' ,
73+ limit = None ):
7174 """ Получить все элементы
7275 Работает в методах, где в ответе есть count и items или users
7376
@@ -76,6 +79,8 @@ def get_all_slow(self, method, values=None, max_count=200, key='items'):
7679 :param max_count: максимальное количество элементов,
7780 которое можно получить за один раз
7881 :param key: ключ элементов, которые нужно получить
82+ :param limit: ограничение на кол-во получаемых элементов,
83+ но может прийти больше
7984 """
8085
8186 if not values :
@@ -97,8 +102,12 @@ def get_all_slow(self, method, values=None, max_count=200, key='items'):
97102 response = self .vk .method (method , values )
98103 items += response [key ]
99104
105+ if limit and len (items ) >= limit :
106+ break
107+
100108 return {'count' : len (items ), key : items }
101109
110+
102111# Полный код в файле vk_procedures
103112code_get_all_items = """
104113var m=%s,n=%s,b="%s",v=n;var c={count:m,offset:v}+%s;var r=API.%s(c),k=r.count,
0 commit comments