Serialization and Deserialization for DynamoDB stream with Python | TypeDeserializer not helpful

583 Views Asked by At

Thank you for all the help and support to me and community.

Trying to go throw SO and few articles over internet, and figure out that to deserializer a dynamoDB Item, once can use TypeDeserializer and it works breeze(it handles dataTypes, but not generic k,v pair)

But is there a standard library, using which a ddb stream event can be deserializer? including newImage

      {
     "eventID":"1",
     "eventName":"INSERT",
     "eventVersion":"1.0",
     "eventSource":"aws:dynamodb",
     "awsRegion":"us-east-1",
     "dynamodb":{
        "Keys":{
           "Id":{
              "N":"101"
           }
        },
        "NewImage":{
           "Message":{
              "S":"New item!"
           },
           "Id":{
              "N":"101"
           }
        },
        "SequenceNumber":"111",
        "SizeBytes":26,
        "StreamViewType":"NEW_AND_OLD_IMAGES"
     },
     "eventSourceARN":"stream-ARN"
  }
1

There are 1 best solutions below

0
On

I used this code snippet which I found in another question. It works well.

from boto3.dynamodb.types import TypeDeserializer

serializer = TypeDeserializer()

def deserialize(data):
    if isinstance(data, list):
        return [deserialize(v) for v in data]

    if isinstance(data, dict):
        try:
            return serializer.deserialize(data)
        except TypeError:
            return {k: deserialize(v) for k, v in data.items()}
    else:
        return data

deserialized your request:

{
  "eventID": "1",
  "eventName": "INSERT",
  "eventVersion": "1.0",
  "eventSource": "aws:dynamodb",
  "awsRegion": "us-east-1",
  "dynamodb": {
    "Keys": {
      "Id": "101"
    },
    "NewImage": {
      "Message": "New item!",
      "Id": "101"
    },
    "SequenceNumber": "111",
    "SizeBytes": 26,
    "StreamViewType": "NEW_AND_OLD_IMAGES"
  },
  "eventSourceARN": "stream-ARN"
}