Merge pull request #1334 from reinecke/fix/dynamo_projection_mutation
dynamodb2: Fix for ProjectionExpressions changing the data in storage
This commit is contained in:
commit
068417b1f2
@ -1,5 +1,6 @@
|
||||
from __future__ import unicode_literals
|
||||
from collections import defaultdict
|
||||
import copy
|
||||
import datetime
|
||||
import decimal
|
||||
import json
|
||||
@ -492,7 +493,8 @@ class Table(BaseModel):
|
||||
|
||||
if projection_expression:
|
||||
expressions = [x.strip() for x in projection_expression.split(',')]
|
||||
for result in possible_results:
|
||||
results = copy.deepcopy(results)
|
||||
for result in results:
|
||||
for attr in list(result.attrs):
|
||||
if attr not in expressions:
|
||||
result.attrs.pop(attr)
|
||||
|
@ -367,10 +367,21 @@ def test_basic_projection_expressions():
|
||||
)
|
||||
|
||||
assert 'body' in results['Items'][0]
|
||||
assert 'subject' not in results['Items'][0]
|
||||
assert results['Items'][0]['body'] == 'some test message'
|
||||
assert 'body' in results['Items'][1]
|
||||
assert 'subject' not in results['Items'][1]
|
||||
assert results['Items'][1]['body'] == 'yet another test message'
|
||||
|
||||
# The projection expression should not remove data from storage
|
||||
results = table.query(
|
||||
KeyConditionExpression=Key('forum_name').eq(
|
||||
'the-key'),
|
||||
)
|
||||
assert 'subject' in results['Items'][0]
|
||||
assert 'body' in results['Items'][1]
|
||||
assert 'forum_name' in results['Items'][1]
|
||||
|
||||
|
||||
@mock_dynamodb2
|
||||
def test_basic_projection_expressions_with_attr_expression_names():
|
||||
|
Loading…
Reference in New Issue
Block a user