12cf2e8247
Add IsEvadedOffense to EFPenalty Fix remote log reading in not Windows
30 lines
1.2 KiB
Python
30 lines
1.2 KiB
Python
from flask_restful.utils.crypto import decrypt, encrypt
|
|
DEFAULT_PAGE_SIZE = 50
|
|
|
|
|
|
def retrieve_next_page(key, seed, args, callback, initial_bookmark=None):
|
|
"""
|
|
A helper for the bookmark pager.
|
|
|
|
:param key: the private key of you API
|
|
:param seed: the crypo seed for this session
|
|
:param args: the verbatim filtering+paging arguments
|
|
:param callback: a function that takes (a dictionary of filters, the current bookmark, the page size)
|
|
and return a tuple (next_results, dictionary_ready_for_next_iteration, approx_number_of_element_left)
|
|
:param initial_bookmark: pass here an optional initial bookmark for the first request
|
|
:return: the tuple result_list and new encrypted bookmark
|
|
"""
|
|
filter = dict(args)
|
|
if 'pager_info' in filter:
|
|
initial_bookmark = decrypt(filter.pop('pager_info'), key, seed)
|
|
|
|
page_size = filter.pop('page_size', DEFAULT_PAGE_SIZE)
|
|
|
|
result_list, new_bookmark, approx_result_size = callback(filter, initial_bookmark, page_size)
|
|
|
|
# restore for the next iteration
|
|
filter['pager_info'] = encrypt(new_bookmark, key, seed)
|
|
filter['page_size'] = page_size
|
|
|
|
return result_list, filter, approx_result_size
|