Как получить список пользователей Cognito в формате JSON - PullRequest
0 голосов
/ 12 февраля 2020

Я собираюсь сделать резервную копию моих пользователей Cognito с помощью Lambda, но не могу получить список пользователей Cognito в формате JSON с помощью boto3. Я делаю:

import boto3
import os
import json
from botocore.exceptions import ClientError

COGNITO_POOL_ID = os.getenv('POOL_ID')
S3_BUCKET = os.getenv('BACKUP_BUCKET')
ENV_NAME = os.getenv('ENV_NAME')
filename = ENV_NAME + "-cognito-backup.json"
REGION = os.getenv('REGION')

cognito = boto3.client('cognito-idp', region_name=REGION)
s3 = boto3.resource('s3')

def lambda_handler (event,context):
    try:
        response = (cognito.list_users(UserPoolId=COGNITO_POOL_ID,AttributesToGet=['email_verified','email']))['Users']
        data = json.dumps(str(response)).encode('UTF-8')
        s3object = s3.Object(S3_BUCKET, filename)
        s3object.put(Body=(bytes(data)))
    except ClientError as error:
        print(error)

Но получите одну строку, и я не уверен, что это JSON вообще:

[{'Username': 'user1', 'Attributes': [{'Name': 'email_verified', 'Value': 'true'}, {'Name': 'email', 'Value': 'user1@xxxx.com'}], 'UserCreateDate': datetime.datetime(2020, 2, 10, 13, 13, 34, 457000, tzinfo=tzlocal()), 'UserLastModifiedDate': datetime.datetime(2020, 2, 10, 13, 13, 34, 457000, tzinfo=tzlocal()), 'Enabled': True, 'UserStatus': 'FORCE_CHANGE_PASSWORD'}]

Мне нужно что-то вроде этого:

[
  {
    "Username": "user1",
    "Attributes": [
      {
        "Name": "email_verified",
        "Value": "true"
      },
      {
        "Name": "email",
        "Value": "user1@xxxx.com"
      }
    ],

    "Enabled": "true",
    "UserStatus": "CONFIRMED"
  }
]

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

Попробуйте это:

import ast
import json

print(ast.literal_eval(json.dumps(response)))

Для точного ответа из SDK?

Редактировать: Только что реализовано, поскольку list_users SDK также является объектом UserCreateDate, json .dumps будет жаловаться о преобразовании из-за значения datatime ключа UserCreateDate. Если вы отключите его, это будет работать без модуля ast -

import json
data = {'Username': 'Google_11761250', 'Attributes': [{'Name': 'email', 'Value': 'abc@gmail.com'}],'Enabled': True, 'UserStatus': 'EXTERNAL_PROVIDER'}
print((json.dumps(data)))
> {"Username": "Google_1176125910", "Attributes": [{"Name": "email", "Value": "123@gmail.com"}], "Enabled": true, "UserStatus": "EXTERNAL_PROVIDER"}
0 голосов
/ 12 февраля 2020

Вы можете проверить тип вывода, используя

type(output)

Я предполагаю, что это может быть тип list, поэтому вы можете преобразовать его в JSON и prettyprint , используя :

print(json.dumps(output, indent=4))
...