Skip to content

Commit 42e9741

Browse files
committed
dt_limit changed to stop_fn (lambda function)
1 parent 22f9d39 commit 42e9741

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

vk_api/tools.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)