Source code for lakeformation.boto_utils
# -*- coding: utf-8 -*-
from typing import Callable, List
[docs]def list_recursively(
method: Callable,
default_kwargs: dict,
next_token_arg_name: str,
next_token_value_field: str,
collection_value_field: str,
):
"""
Given an paginator API like this::
response = client.get_databases(
CatalogId='string',
NextToken='string',
MaxResults=123,
ResourceShareType='FOREIGN'|'ALL'
)
Response schema like this::
{
'DatabaseList': [
{},
{},
...
],
'NextToken': 'string'
}
This api will retrieve the database list recursively in one api call::
list_recursively(
method=client.get_database,
default_kwargs=dict(
CatalogId="111122223333",
MaxResults=1,
ResourceShareType="ALL",
),
next_token_arg_name="NextToken",
next_token_value_field="NextToken",
collection_value_field="DatabaseList",
)
:param method:
:param default_kwargs:
:param next_token_arg_name:
:param next_token_value_field:
:param collection_value_field:
:return:
"""
next_token = None
lst: List[dict] = list()
while 1:
kwargs = default_kwargs.copy()
if next_token is not None:
kwargs[next_token_arg_name] = next_token
response = method(**kwargs)
next_token = response.get(next_token_value_field)
lst.extend(response.get(collection_value_field, list()))
if next_token is None:
break
return lst