def _unwrap_query_scan(result): response = { 'Count': result.get('Count', 0), 'Items': [utils.unmarshall(i) for i in result.get('Items', [])], 'ScannedCount': result.get('ScannedCount', 0) } if 'LastEvaluatedKey' in result: response['LastEvaluatedKey'] = \ utils.unmarshall(result['LastEvaluatedKey']) if 'ConsumedCapacity' in result: response['ConsumedCapacity'] = result['ConsumedCapacity'] return response
def _unwrap_delete_put_update_item(result): response = { 'Attributes': utils.unmarshall(result['Attributes'] if result else {}) } if 'ConsumedCapacity' in result: response['ConsumedCapacity'] = result['ConsumedCapacity'] if 'ItemCollectionMetrics' in result: response['ItemCollectionMetrics'] = { 'ItemCollectionKey': utils.unmarshall( result['ItemCollectionMetrics'].get('ItemCollectionKey', {})), 'SizeEstimateRangeGB': result['ItemCollectionMetrics'].get('SizeEstimateRangeGB', [None]).pop() } return response
def _unwrap_get_item(result): response = { 'Item': utils.unmarshall(result['Item'] if result else {}) } if 'ConsumedCapacity' in result: response['ConsumedCapacity'] = result['ConsumedCapacity'] return response
def test_complex_document(self): uuid_value = str(uuid.uuid4()) dt_value = datetime.datetime.utcnow() value = { 'key1': { 'S': 'str' }, 'key2': { 'N': '10' }, 'key3': { 'M': { 'sub-key1': { 'N': '20' }, 'sub-key2': { 'BOOL': True }, 'sub-key3': { 'S': 'value' } } }, 'key4': { 'NULL': True }, 'key5': { 'L': [{ 'S': 'one' }, { 'S': 'two' }, { 'S': 'three' }, { 'N': '4' }, { 'NULL': True }, { 'BOOL': True }] }, 'key6': { 'SS': ['a', 'b', 'c'] }, 'key7': { 'NS': ['1', '2', '3', '4'] }, 'key8': { 'S': dt_value.isoformat() }, 'key9': { 'S': uuid_value }, 'key10': { 'B': base64.b64encode(b'\0x01\0x02\0x03').decode('ascii') }, 'key11': { 'BS': [ base64.b64encode(b'\0x01\0x02\0x03').decode('ascii'), base64.b64encode(b'\0x04\0x05\0x06').decode('ascii') ] } } expectation = { 'key1': 'str', 'key2': 10, 'key3': { 'sub-key1': 20, 'sub-key2': True, 'sub-key3': 'value' }, 'key4': None, 'key5': ['one', 'two', 'three', 4, None, True], 'key6': {'a', 'b', 'c'}, 'key7': {1, 2, 3, 4}, 'key8': dt_value.isoformat(), 'key9': uuid_value, 'key10': b'\0x01\0x02\0x03', 'key11': {b'\0x01\0x02\0x03', b'\0x04\0x05\0x06'} } self.assertDictEqual(expectation, utils.unmarshall(value))