альтернатива нумерации страниц для клиентской функции aws cognito list_users () - PullRequest
0 голосов
/ 27 января 2019

Чтобы составить список всех пользователей пула Cognito, я подумал об использовании client.list_users() -функции boto3, включая нумерацию страниц.

Однако, если я вызываю print(client.can_paginate('list_users')), False возвращается, так какэта функция list_users() доступна для , а не для .

Есть ли альтернатива перечислению всех пользователей пользовательского пула cognito без фильтрации тех пользователей, которые уже были выбраны?

Мой текущий код без пагинации выглядит так:

client = boto3.client('cognito-idp',
                         region_name=aws_region,
                         aws_access_key_id=aws_access_key,
                         aws_secret_access_key=aws_secret_key,
                         config=config)

response = client.list_users(
UserPoolId=userpool_id,
AttributesToGet=[
    'email','sub'
] 
)

Большое спасибо заранее!

1 Ответ

0 голосов
/ 06 февраля 2019

Столкнулся с той же проблемой, также был удивлен, что для API Cognito list_user нет пагинатора, поэтому я построил что-то вроде этого:

import boto3


def boto3_paginate(method_to_paginate, **params_to_pass):
    response = method_to_paginate(**params_to_pass)
    yield response
    while response.get('PaginationToken', None):
        response = method_to_paginate(PaginationToken=response['PaginationToken'], **params_to_pass)
        yield response



class CognitoIDPClient:
    def __init__(self):
        self.client = boto3.client('cognito-idp', region_name=settings.COGNITO_AWS_REGION)

    ...

    def get_all_users(self):
        """
        Fetch all users from cognito
        """
        # sadly, but there is no paginator for 'list_users' which is ... weird
        # https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/cognito-idp.html?highlight=list_users#paginators
        users = []
        # if `Limit` is not provided - the api will return 60 items, which is maximum
        for page in boto3_paginate(self.client.list_users, UserPoolId=settings.COGNITO_USER_POOL):
            users += page['Users']
        return users
...