"""Test helpers.""" from decimal import Decimal from boto3.dynamodb.types import TypeSerializer from src.events.dynamodb import Operation as DynamoOperation DYNAMO_SERIALIZER = TypeSerializer() def masters_active_event(operation, before, after): """Package masters registry event.""" data = { 'Keys': {'isrc': 'isrc1234'}, 'eventName': operation, 'eventID': '12345', 'ApproximateCreationDateTime': 1560614400.0 } def _format_tuids(item): if isinstance(item, list): return [{'tuid': Decimal(x)} for x in item] elif isinstance(item, int): return {'tuid': Decimal(item)} else: raise Exception(f'Unexpected type {type(item)}!') if before: data['OldImage'] = { 'territories': { k: _format_tuids(v) for k, v in before.items() } } else: data['OldImage'] = None if after: data['NewImage'] = { 'territories': { k: _format_tuids(v) for k, v in after.items() } } else: data['NewImage'] = None return data def dynamo_event(table_name, operation, keys, old_image, new_image): """Create records in DynamoDB stream connector format.""" data = { 'eventID': '12345', 'eventName': operation, 'eventVersion': '1.1', 'eventSource': 'aws:dynamodb', 'awsRegion': 'us-east-1', 'dynamodb': { 'Keys': { k: DYNAMO_SERIALIZER.serialize(v) for k, v in keys.items() }, 'ApproximateCreationDateTime': 1560614400.0 }, 'eventSourceARN': f'arn:aws:dynamodb:us-east-1:103233932089:table/{table_name}/stream/2017-05-16T18:14:44.886' # noqa:E501 } if operation.lower() in (DynamoOperation.DELETED.value, DynamoOperation.UPDATED.value): # noqa:E501 data['dynamodb']['OldImage'] = { k: DYNAMO_SERIALIZER.serialize(v) for k, v in old_image.items() } if operation.lower() in (DynamoOperation.CREATED.value, DynamoOperation.UPDATED.value): # noqa:E501 data['dynamodb']['NewImage'] = { k: DYNAMO_SERIALIZER.serialize(v) for k, v in new_image.items() } return { 'Records': [data] }