@@ -30,7 +30,7 @@ def __init__(self, vk):
3030 self .vk = vk
3131
3232 def get_all_iter (self , method , max_count , values = None , key = 'items' ,
33- limit = None , dt_limit = None ):
33+ limit = None , stop_fn = None ):
3434 """ Получить все элементы.
3535 Работает в методах, где в ответе есть count и items или users.
3636 За один запрос получает max_count * 25 элементов
@@ -52,8 +52,8 @@ def get_all_iter(self, method, max_count, values=None, key='items',
5252 но может прийти больше
5353 :type limit: int
5454
55- :param dt_limit: ограничение на время публикации элемента
56- :type dt_limit: int
55+ :param stop_fn: функция, отвечающая за выход из цикла
56+ :type stop_fn: func
5757 """
5858
5959 values = values .copy () if values else {}
@@ -83,11 +83,11 @@ def get_all_iter(self, method, max_count, values=None, key='items',
8383 if limit and items_count >= limit :
8484 break
8585
86- if dt_limit and items [ len (items ) - 1 ][ 'date' ] <= dt_limit :
86+ if stop_fn and stop_fn (items ):
8787 break
8888
8989 def get_all (self , method , max_count , values = None , key = 'items' , limit = None ,
90- dt_limit = None ):
90+ stop_fn = None ):
9191 """ Использовать только если нужно загрузить все объекты в память.
9292
9393 Eсли вы можете обрабатывать объекты по частям, то лучше
@@ -98,12 +98,12 @@ def get_all(self, method, max_count, values=None, key='items', limit=None,
9898 """
9999
100100 items = list (self .get_all_iter (method , max_count , values , key , limit ,
101- dt_limit ))
101+ stop_fn ))
102102
103103 return {'count' : len (items ), key : items }
104104
105105 def get_all_slow_iter (self , method , max_count , values = None , key = 'items' ,
106- limit = None ):
106+ limit = None , stop_fn = None ):
107107 """ Получить все элементы (без использования execute)
108108 Работает в методах, где в ответе есть count и items или users
109109
@@ -123,6 +123,9 @@ def get_all_slow_iter(self, method, max_count, values=None, key='items',
123123 :param limit: ограничение на кол-во получаемых элементов,
124124 но может прийти больше
125125 :type limit: int
126+
127+ :param stop_fn: функция, отвечающая за выход из цикла
128+ :type stop_fn: func
126129 """
127130
128131 values = values .copy () if values else {}
@@ -146,8 +149,11 @@ def get_all_slow_iter(self, method, max_count, values=None, key='items',
146149 if limit and items_count >= limit :
147150 break
148151
152+ if stop_fn and stop_fn (items ):
153+ break
154+
149155 def get_all_slow (self , method , max_count , values = None , key = 'items' ,
150- limit = None ):
156+ limit = None , stop_fn = None ):
151157 """ Использовать только если нужно загрузить все объекты в память.
152158
153159 Eсли вы можете обрабатывать объекты по частям, то лучше
@@ -158,7 +164,8 @@ def get_all_slow(self, method, max_count, values=None, key='items',
158164 """
159165
160166 items = list (
161- self .get_all_slow_iter (method , max_count , values , key , limit )
167+ self .get_all_slow_iter (method , max_count , values , key , limit ,
168+ stop_fn )
162169 )
163170 return {'count' : len (items ), key : items }
164171
0 commit comments