Merge pull request #925 from JackDanger/idempotent-dynamodb2-deletes
Idempotent Dynamodb2 deletes
This commit is contained in:
commit
15b811901b
@ -677,7 +677,7 @@ class DynamoDBBackend(BaseBackend):
|
|||||||
return item
|
return item
|
||||||
|
|
||||||
def delete_item(self, table_name, keys):
|
def delete_item(self, table_name, keys):
|
||||||
table = self.tables.get(table_name)
|
table = self.get_table(table_name)
|
||||||
if not table:
|
if not table:
|
||||||
return None
|
return None
|
||||||
hash_key, range_key = self.get_keys_value(table, keys)
|
hash_key, range_key = self.get_keys_value(table, keys)
|
||||||
|
@ -450,17 +450,18 @@ class DynamoHandler(BaseResponse):
|
|||||||
name = self.body['TableName']
|
name = self.body['TableName']
|
||||||
keys = self.body['Key']
|
keys = self.body['Key']
|
||||||
return_values = self.body.get('ReturnValues', '')
|
return_values = self.body.get('ReturnValues', '')
|
||||||
|
table = dynamodb_backend2.get_table(name)
|
||||||
|
if not table:
|
||||||
|
er = 'com.amazonaws.dynamodb.v20120810#ConditionalCheckFailedException'
|
||||||
|
return self.error(er)
|
||||||
|
|
||||||
item = dynamodb_backend2.delete_item(name, keys)
|
item = dynamodb_backend2.delete_item(name, keys)
|
||||||
if item:
|
if item and return_values == 'ALL_OLD':
|
||||||
if return_values == 'ALL_OLD':
|
|
||||||
item_dict = item.to_json()
|
item_dict = item.to_json()
|
||||||
else:
|
else:
|
||||||
item_dict = {'Attributes': {}}
|
item_dict = {'Attributes': {}}
|
||||||
item_dict['ConsumedCapacityUnits'] = 0.5
|
item_dict['ConsumedCapacityUnits'] = 0.5
|
||||||
return dynamo_json_dump(item_dict)
|
return dynamo_json_dump(item_dict)
|
||||||
else:
|
|
||||||
er = 'com.amazonaws.dynamodb.v20120810#ConditionalCheckFailedException'
|
|
||||||
return self.error(er)
|
|
||||||
|
|
||||||
def update_item(self):
|
def update_item(self):
|
||||||
name = self.body['TableName']
|
name = self.body['TableName']
|
||||||
|
@ -316,7 +316,8 @@ def test_delete_item():
|
|||||||
response.should.equal(True)
|
response.should.equal(True)
|
||||||
|
|
||||||
table.count().should.equal(0)
|
table.count().should.equal(0)
|
||||||
item.delete().should.equal(False)
|
# Deletes are idempotent
|
||||||
|
item.delete().should.equal(True)
|
||||||
|
|
||||||
|
|
||||||
@requires_boto_gte("2.9")
|
@requires_boto_gte("2.9")
|
||||||
|
@ -200,7 +200,8 @@ def test_delete_item():
|
|||||||
|
|
||||||
table.count().should.equal(0)
|
table.count().should.equal(0)
|
||||||
|
|
||||||
item.delete().should.equal(False)
|
# Deletes are idempotent and 'False' here would imply an error condition
|
||||||
|
item.delete().should.equal(True)
|
||||||
|
|
||||||
|
|
||||||
@requires_boto_gte("2.9")
|
@requires_boto_gte("2.9")
|
||||||
|
Loading…
Reference in New Issue
Block a user