Merge pull request #757 from nfvs/dynamodb_putitem_conditional

Attempt to parse simple ConditionExpressions in DynamoDB put_item().
This commit is contained in:
Steve Pulec 2016-11-06 09:53:45 -05:00 committed by GitHub
commit 3b98566f20
2 changed files with 87 additions and 0 deletions

View file

@ -1016,6 +1016,72 @@ def test_boto3_conditions():
results['Count'].should.equal(1)
@mock_dynamodb2
def test_boto3_put_item_with_conditions():
import botocore
dynamodb = boto3.resource('dynamodb', region_name='us-east-1')
# Create the DynamoDB table.
table = dynamodb.create_table(
TableName='users',
KeySchema=[
{
'AttributeName': 'forum_name',
'KeyType': 'HASH'
},
{
'AttributeName': 'subject',
'KeyType': 'RANGE'
},
],
AttributeDefinitions=[
{
'AttributeName': 'forum_name',
'AttributeType': 'S'
},
{
'AttributeName': 'subject',
'AttributeType': 'S'
},
],
ProvisionedThroughput={
'ReadCapacityUnits': 5,
'WriteCapacityUnits': 5
}
)
table = dynamodb.Table('users')
table.put_item(Item={
'forum_name': 'the-key',
'subject': '123'
})
table.put_item(
Item={
'forum_name': 'the-key-2',
'subject': '1234',
},
ConditionExpression='attribute_not_exists(forum_name) AND attribute_not_exists(subject)'
)
table.put_item.when.called_with(
Item={
'forum_name': 'the-key',
'subject': '123'
},
ConditionExpression='attribute_not_exists(forum_name) AND attribute_not_exists(subject)'
).should.throw(botocore.exceptions.ClientError)
table.put_item.when.called_with(
Item={
'forum_name': 'bogus-key',
'subject': 'bogus',
'test': '123'
},
ConditionExpression='attribute_exists(forum_name) AND attribute_exists(subject)'
).should.throw(botocore.exceptions.ClientError)
def _create_table_with_range_key():
dynamodb = boto3.resource('dynamodb', region_name='us-east-1')