Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
0527e88d46
541 changed files with 75504 additions and 51429 deletions
|
|
@ -13,15 +13,11 @@ from boto.exception import DynamoDBResponseError
|
|||
|
||||
def create_table(conn):
|
||||
message_table_schema = conn.create_schema(
|
||||
hash_key_name='forum_name',
|
||||
hash_key_proto_value=str,
|
||||
hash_key_name="forum_name", hash_key_proto_value=str
|
||||
)
|
||||
|
||||
table = conn.create_table(
|
||||
name='messages',
|
||||
schema=message_table_schema,
|
||||
read_units=10,
|
||||
write_units=10
|
||||
name="messages", schema=message_table_schema, read_units=10, write_units=10
|
||||
)
|
||||
return table
|
||||
|
||||
|
|
@ -33,25 +29,22 @@ def test_create_table():
|
|||
create_table(conn)
|
||||
|
||||
expected = {
|
||||
'Table': {
|
||||
'CreationDateTime': 1326499200.0,
|
||||
'ItemCount': 0,
|
||||
'KeySchema': {
|
||||
'HashKeyElement': {
|
||||
'AttributeName': 'forum_name',
|
||||
'AttributeType': 'S'
|
||||
},
|
||||
"Table": {
|
||||
"CreationDateTime": 1326499200.0,
|
||||
"ItemCount": 0,
|
||||
"KeySchema": {
|
||||
"HashKeyElement": {"AttributeName": "forum_name", "AttributeType": "S"}
|
||||
},
|
||||
'ProvisionedThroughput': {
|
||||
'ReadCapacityUnits': 10,
|
||||
'WriteCapacityUnits': 10
|
||||
"ProvisionedThroughput": {
|
||||
"ReadCapacityUnits": 10,
|
||||
"WriteCapacityUnits": 10,
|
||||
},
|
||||
'TableName': 'messages',
|
||||
'TableSizeBytes': 0,
|
||||
'TableStatus': 'ACTIVE',
|
||||
"TableName": "messages",
|
||||
"TableSizeBytes": 0,
|
||||
"TableStatus": "ACTIVE",
|
||||
}
|
||||
}
|
||||
conn.describe_table('messages').should.equal(expected)
|
||||
conn.describe_table("messages").should.equal(expected)
|
||||
|
||||
|
||||
@mock_dynamodb_deprecated
|
||||
|
|
@ -60,11 +53,12 @@ def test_delete_table():
|
|||
create_table(conn)
|
||||
conn.list_tables().should.have.length_of(1)
|
||||
|
||||
conn.layer1.delete_table('messages')
|
||||
conn.layer1.delete_table("messages")
|
||||
conn.list_tables().should.have.length_of(0)
|
||||
|
||||
conn.layer1.delete_table.when.called_with(
|
||||
'messages').should.throw(DynamoDBResponseError)
|
||||
conn.layer1.delete_table.when.called_with("messages").should.throw(
|
||||
DynamoDBResponseError
|
||||
)
|
||||
|
||||
|
||||
@mock_dynamodb_deprecated
|
||||
|
|
@ -87,38 +81,37 @@ def test_item_add_and_describe_and_update():
|
|||
table = create_table(conn)
|
||||
|
||||
item_data = {
|
||||
'Body': 'http://url_to_lolcat.gif',
|
||||
'SentBy': 'User A',
|
||||
'ReceivedTime': '12/9/2011 11:36:03 PM',
|
||||
"Body": "http://url_to_lolcat.gif",
|
||||
"SentBy": "User A",
|
||||
"ReceivedTime": "12/9/2011 11:36:03 PM",
|
||||
}
|
||||
item = table.new_item(
|
||||
hash_key='LOLCat Forum',
|
||||
attrs=item_data,
|
||||
)
|
||||
item = table.new_item(hash_key="LOLCat Forum", attrs=item_data)
|
||||
item.put()
|
||||
|
||||
returned_item = table.get_item(
|
||||
hash_key='LOLCat Forum',
|
||||
attributes_to_get=['Body', 'SentBy']
|
||||
hash_key="LOLCat Forum", attributes_to_get=["Body", "SentBy"]
|
||||
)
|
||||
dict(returned_item).should.equal(
|
||||
{
|
||||
"forum_name": "LOLCat Forum",
|
||||
"Body": "http://url_to_lolcat.gif",
|
||||
"SentBy": "User A",
|
||||
}
|
||||
)
|
||||
dict(returned_item).should.equal({
|
||||
'forum_name': 'LOLCat Forum',
|
||||
'Body': 'http://url_to_lolcat.gif',
|
||||
'SentBy': 'User A',
|
||||
})
|
||||
|
||||
item['SentBy'] = 'User B'
|
||||
item["SentBy"] = "User B"
|
||||
item.put()
|
||||
|
||||
returned_item = table.get_item(
|
||||
hash_key='LOLCat Forum',
|
||||
attributes_to_get=['Body', 'SentBy']
|
||||
hash_key="LOLCat Forum", attributes_to_get=["Body", "SentBy"]
|
||||
)
|
||||
dict(returned_item).should.equal(
|
||||
{
|
||||
"forum_name": "LOLCat Forum",
|
||||
"Body": "http://url_to_lolcat.gif",
|
||||
"SentBy": "User B",
|
||||
}
|
||||
)
|
||||
dict(returned_item).should.equal({
|
||||
'forum_name': 'LOLCat Forum',
|
||||
'Body': 'http://url_to_lolcat.gif',
|
||||
'SentBy': 'User B',
|
||||
})
|
||||
|
||||
|
||||
@mock_dynamodb_deprecated
|
||||
|
|
@ -126,10 +119,7 @@ def test_item_put_without_table():
|
|||
conn = boto.connect_dynamodb()
|
||||
|
||||
conn.layer1.put_item.when.called_with(
|
||||
table_name='undeclared-table',
|
||||
item=dict(
|
||||
hash_key='LOLCat Forum',
|
||||
),
|
||||
table_name="undeclared-table", item=dict(hash_key="LOLCat Forum")
|
||||
).should.throw(DynamoDBResponseError)
|
||||
|
||||
|
||||
|
|
@ -138,9 +128,9 @@ def test_get_missing_item():
|
|||
conn = boto.connect_dynamodb()
|
||||
table = create_table(conn)
|
||||
|
||||
table.get_item.when.called_with(
|
||||
hash_key='tester',
|
||||
).should.throw(DynamoDBKeyNotFoundError)
|
||||
table.get_item.when.called_with(hash_key="tester").should.throw(
|
||||
DynamoDBKeyNotFoundError
|
||||
)
|
||||
|
||||
|
||||
@mock_dynamodb_deprecated
|
||||
|
|
@ -148,10 +138,7 @@ def test_get_item_with_undeclared_table():
|
|||
conn = boto.connect_dynamodb()
|
||||
|
||||
conn.layer1.get_item.when.called_with(
|
||||
table_name='undeclared-table',
|
||||
key={
|
||||
'HashKeyElement': {'S': 'tester'},
|
||||
},
|
||||
table_name="undeclared-table", key={"HashKeyElement": {"S": "tester"}}
|
||||
).should.throw(DynamoDBKeyNotFoundError)
|
||||
|
||||
|
||||
|
|
@ -161,21 +148,18 @@ def test_delete_item():
|
|||
table = create_table(conn)
|
||||
|
||||
item_data = {
|
||||
'Body': 'http://url_to_lolcat.gif',
|
||||
'SentBy': 'User A',
|
||||
'ReceivedTime': '12/9/2011 11:36:03 PM',
|
||||
"Body": "http://url_to_lolcat.gif",
|
||||
"SentBy": "User A",
|
||||
"ReceivedTime": "12/9/2011 11:36:03 PM",
|
||||
}
|
||||
item = table.new_item(
|
||||
hash_key='LOLCat Forum',
|
||||
attrs=item_data,
|
||||
)
|
||||
item = table.new_item(hash_key="LOLCat Forum", attrs=item_data)
|
||||
item.put()
|
||||
|
||||
table.refresh()
|
||||
table.item_count.should.equal(1)
|
||||
|
||||
response = item.delete()
|
||||
response.should.equal({u'Attributes': [], u'ConsumedCapacityUnits': 0.5})
|
||||
response.should.equal({"Attributes": [], "ConsumedCapacityUnits": 0.5})
|
||||
table.refresh()
|
||||
table.item_count.should.equal(0)
|
||||
|
||||
|
|
@ -188,29 +172,28 @@ def test_delete_item_with_attribute_response():
|
|||
table = create_table(conn)
|
||||
|
||||
item_data = {
|
||||
'Body': 'http://url_to_lolcat.gif',
|
||||
'SentBy': 'User A',
|
||||
'ReceivedTime': '12/9/2011 11:36:03 PM',
|
||||
"Body": "http://url_to_lolcat.gif",
|
||||
"SentBy": "User A",
|
||||
"ReceivedTime": "12/9/2011 11:36:03 PM",
|
||||
}
|
||||
item = table.new_item(
|
||||
hash_key='LOLCat Forum',
|
||||
attrs=item_data,
|
||||
)
|
||||
item = table.new_item(hash_key="LOLCat Forum", attrs=item_data)
|
||||
item.put()
|
||||
|
||||
table.refresh()
|
||||
table.item_count.should.equal(1)
|
||||
|
||||
response = item.delete(return_values='ALL_OLD')
|
||||
response.should.equal({
|
||||
u'Attributes': {
|
||||
u'Body': u'http://url_to_lolcat.gif',
|
||||
u'forum_name': u'LOLCat Forum',
|
||||
u'ReceivedTime': u'12/9/2011 11:36:03 PM',
|
||||
u'SentBy': u'User A',
|
||||
},
|
||||
u'ConsumedCapacityUnits': 0.5
|
||||
})
|
||||
response = item.delete(return_values="ALL_OLD")
|
||||
response.should.equal(
|
||||
{
|
||||
"Attributes": {
|
||||
"Body": "http://url_to_lolcat.gif",
|
||||
"forum_name": "LOLCat Forum",
|
||||
"ReceivedTime": "12/9/2011 11:36:03 PM",
|
||||
"SentBy": "User A",
|
||||
},
|
||||
"ConsumedCapacityUnits": 0.5,
|
||||
}
|
||||
)
|
||||
table.refresh()
|
||||
table.item_count.should.equal(0)
|
||||
|
||||
|
|
@ -222,10 +205,7 @@ def test_delete_item_with_undeclared_table():
|
|||
conn = boto.connect_dynamodb()
|
||||
|
||||
conn.layer1.delete_item.when.called_with(
|
||||
table_name='undeclared-table',
|
||||
key={
|
||||
'HashKeyElement': {'S': 'tester'},
|
||||
},
|
||||
table_name="undeclared-table", key={"HashKeyElement": {"S": "tester"}}
|
||||
).should.throw(DynamoDBResponseError)
|
||||
|
||||
|
||||
|
|
@ -235,18 +215,15 @@ def test_query():
|
|||
table = create_table(conn)
|
||||
|
||||
item_data = {
|
||||
'Body': 'http://url_to_lolcat.gif',
|
||||
'SentBy': 'User A',
|
||||
'ReceivedTime': '12/9/2011 11:36:03 PM',
|
||||
"Body": "http://url_to_lolcat.gif",
|
||||
"SentBy": "User A",
|
||||
"ReceivedTime": "12/9/2011 11:36:03 PM",
|
||||
}
|
||||
item = table.new_item(
|
||||
hash_key='the-key',
|
||||
attrs=item_data,
|
||||
)
|
||||
item = table.new_item(hash_key="the-key", attrs=item_data)
|
||||
item.put()
|
||||
|
||||
results = table.query(hash_key='the-key')
|
||||
results.response['Items'].should.have.length_of(1)
|
||||
results = table.query(hash_key="the-key")
|
||||
results.response["Items"].should.have.length_of(1)
|
||||
|
||||
|
||||
@mock_dynamodb_deprecated
|
||||
|
|
@ -254,8 +231,7 @@ def test_query_with_undeclared_table():
|
|||
conn = boto.connect_dynamodb()
|
||||
|
||||
conn.layer1.query.when.called_with(
|
||||
table_name='undeclared-table',
|
||||
hash_key_value={'S': 'the-key'},
|
||||
table_name="undeclared-table", hash_key_value={"S": "the-key"}
|
||||
).should.throw(DynamoDBResponseError)
|
||||
|
||||
|
||||
|
|
@ -265,58 +241,49 @@ def test_scan():
|
|||
table = create_table(conn)
|
||||
|
||||
item_data = {
|
||||
'Body': 'http://url_to_lolcat.gif',
|
||||
'SentBy': 'User A',
|
||||
'ReceivedTime': '12/9/2011 11:36:03 PM',
|
||||
"Body": "http://url_to_lolcat.gif",
|
||||
"SentBy": "User A",
|
||||
"ReceivedTime": "12/9/2011 11:36:03 PM",
|
||||
}
|
||||
item = table.new_item(
|
||||
hash_key='the-key',
|
||||
attrs=item_data,
|
||||
)
|
||||
item = table.new_item(hash_key="the-key", attrs=item_data)
|
||||
item.put()
|
||||
|
||||
item = table.new_item(
|
||||
hash_key='the-key2',
|
||||
attrs=item_data,
|
||||
)
|
||||
item = table.new_item(hash_key="the-key2", attrs=item_data)
|
||||
item.put()
|
||||
|
||||
item_data = {
|
||||
'Body': 'http://url_to_lolcat.gif',
|
||||
'SentBy': 'User B',
|
||||
'ReceivedTime': '12/9/2011 11:36:03 PM',
|
||||
'Ids': set([1, 2, 3]),
|
||||
'PK': 7,
|
||||
"Body": "http://url_to_lolcat.gif",
|
||||
"SentBy": "User B",
|
||||
"ReceivedTime": "12/9/2011 11:36:03 PM",
|
||||
"Ids": set([1, 2, 3]),
|
||||
"PK": 7,
|
||||
}
|
||||
item = table.new_item(
|
||||
hash_key='the-key3',
|
||||
attrs=item_data,
|
||||
)
|
||||
item = table.new_item(hash_key="the-key3", attrs=item_data)
|
||||
item.put()
|
||||
|
||||
results = table.scan()
|
||||
results.response['Items'].should.have.length_of(3)
|
||||
results.response["Items"].should.have.length_of(3)
|
||||
|
||||
results = table.scan(scan_filter={'SentBy': condition.EQ('User B')})
|
||||
results.response['Items'].should.have.length_of(1)
|
||||
results = table.scan(scan_filter={"SentBy": condition.EQ("User B")})
|
||||
results.response["Items"].should.have.length_of(1)
|
||||
|
||||
results = table.scan(scan_filter={'Body': condition.BEGINS_WITH('http')})
|
||||
results.response['Items'].should.have.length_of(3)
|
||||
results = table.scan(scan_filter={"Body": condition.BEGINS_WITH("http")})
|
||||
results.response["Items"].should.have.length_of(3)
|
||||
|
||||
results = table.scan(scan_filter={'Ids': condition.CONTAINS(2)})
|
||||
results.response['Items'].should.have.length_of(1)
|
||||
results = table.scan(scan_filter={"Ids": condition.CONTAINS(2)})
|
||||
results.response["Items"].should.have.length_of(1)
|
||||
|
||||
results = table.scan(scan_filter={'Ids': condition.NOT_NULL()})
|
||||
results.response['Items'].should.have.length_of(1)
|
||||
results = table.scan(scan_filter={"Ids": condition.NOT_NULL()})
|
||||
results.response["Items"].should.have.length_of(1)
|
||||
|
||||
results = table.scan(scan_filter={'Ids': condition.NULL()})
|
||||
results.response['Items'].should.have.length_of(2)
|
||||
results = table.scan(scan_filter={"Ids": condition.NULL()})
|
||||
results.response["Items"].should.have.length_of(2)
|
||||
|
||||
results = table.scan(scan_filter={'PK': condition.BETWEEN(8, 9)})
|
||||
results.response['Items'].should.have.length_of(0)
|
||||
results = table.scan(scan_filter={"PK": condition.BETWEEN(8, 9)})
|
||||
results.response["Items"].should.have.length_of(0)
|
||||
|
||||
results = table.scan(scan_filter={'PK': condition.BETWEEN(5, 8)})
|
||||
results.response['Items'].should.have.length_of(1)
|
||||
results = table.scan(scan_filter={"PK": condition.BETWEEN(5, 8)})
|
||||
results.response["Items"].should.have.length_of(1)
|
||||
|
||||
|
||||
@mock_dynamodb_deprecated
|
||||
|
|
@ -324,13 +291,11 @@ def test_scan_with_undeclared_table():
|
|||
conn = boto.connect_dynamodb()
|
||||
|
||||
conn.layer1.scan.when.called_with(
|
||||
table_name='undeclared-table',
|
||||
table_name="undeclared-table",
|
||||
scan_filter={
|
||||
"SentBy": {
|
||||
"AttributeValueList": [{
|
||||
"S": "User B"}
|
||||
],
|
||||
"ComparisonOperator": "EQ"
|
||||
"AttributeValueList": [{"S": "User B"}],
|
||||
"ComparisonOperator": "EQ",
|
||||
}
|
||||
},
|
||||
).should.throw(DynamoDBResponseError)
|
||||
|
|
@ -342,7 +307,7 @@ def test_scan_after_has_item():
|
|||
table = create_table(conn)
|
||||
list(table.scan()).should.equal([])
|
||||
|
||||
table.has_item('the-key')
|
||||
table.has_item("the-key")
|
||||
|
||||
list(table.scan()).should.equal([])
|
||||
|
||||
|
|
@ -355,25 +320,29 @@ def test_write_batch():
|
|||
batch_list = conn.new_batch_write_list()
|
||||
|
||||
items = []
|
||||
items.append(table.new_item(
|
||||
hash_key='the-key',
|
||||
attrs={
|
||||
'Body': 'http://url_to_lolcat.gif',
|
||||
'SentBy': 'User A',
|
||||
'ReceivedTime': '12/9/2011 11:36:03 PM',
|
||||
},
|
||||
))
|
||||
items.append(
|
||||
table.new_item(
|
||||
hash_key="the-key",
|
||||
attrs={
|
||||
"Body": "http://url_to_lolcat.gif",
|
||||
"SentBy": "User A",
|
||||
"ReceivedTime": "12/9/2011 11:36:03 PM",
|
||||
},
|
||||
)
|
||||
)
|
||||
|
||||
items.append(table.new_item(
|
||||
hash_key='the-key2',
|
||||
attrs={
|
||||
'Body': 'http://url_to_lolcat.gif',
|
||||
'SentBy': 'User B',
|
||||
'ReceivedTime': '12/9/2011 11:36:03 PM',
|
||||
'Ids': set([1, 2, 3]),
|
||||
'PK': 7,
|
||||
},
|
||||
))
|
||||
items.append(
|
||||
table.new_item(
|
||||
hash_key="the-key2",
|
||||
attrs={
|
||||
"Body": "http://url_to_lolcat.gif",
|
||||
"SentBy": "User B",
|
||||
"ReceivedTime": "12/9/2011 11:36:03 PM",
|
||||
"Ids": set([1, 2, 3]),
|
||||
"PK": 7,
|
||||
},
|
||||
)
|
||||
)
|
||||
|
||||
batch_list.add_batch(table, puts=items)
|
||||
conn.batch_write_item(batch_list)
|
||||
|
|
@ -382,7 +351,7 @@ def test_write_batch():
|
|||
table.item_count.should.equal(2)
|
||||
|
||||
batch_list = conn.new_batch_write_list()
|
||||
batch_list.add_batch(table, deletes=[('the-key')])
|
||||
batch_list.add_batch(table, deletes=[("the-key")])
|
||||
conn.batch_write_item(batch_list)
|
||||
|
||||
table.refresh()
|
||||
|
|
@ -395,36 +364,27 @@ def test_batch_read():
|
|||
table = create_table(conn)
|
||||
|
||||
item_data = {
|
||||
'Body': 'http://url_to_lolcat.gif',
|
||||
'SentBy': 'User A',
|
||||
'ReceivedTime': '12/9/2011 11:36:03 PM',
|
||||
"Body": "http://url_to_lolcat.gif",
|
||||
"SentBy": "User A",
|
||||
"ReceivedTime": "12/9/2011 11:36:03 PM",
|
||||
}
|
||||
item = table.new_item(
|
||||
hash_key='the-key1',
|
||||
attrs=item_data,
|
||||
)
|
||||
item = table.new_item(hash_key="the-key1", attrs=item_data)
|
||||
item.put()
|
||||
|
||||
item = table.new_item(
|
||||
hash_key='the-key2',
|
||||
attrs=item_data,
|
||||
)
|
||||
item = table.new_item(hash_key="the-key2", attrs=item_data)
|
||||
item.put()
|
||||
|
||||
item_data = {
|
||||
'Body': 'http://url_to_lolcat.gif',
|
||||
'SentBy': 'User B',
|
||||
'ReceivedTime': '12/9/2011 11:36:03 PM',
|
||||
'Ids': set([1, 2, 3]),
|
||||
'PK': 7,
|
||||
"Body": "http://url_to_lolcat.gif",
|
||||
"SentBy": "User B",
|
||||
"ReceivedTime": "12/9/2011 11:36:03 PM",
|
||||
"Ids": set([1, 2, 3]),
|
||||
"PK": 7,
|
||||
}
|
||||
item = table.new_item(
|
||||
hash_key='another-key',
|
||||
attrs=item_data,
|
||||
)
|
||||
item = table.new_item(hash_key="another-key", attrs=item_data)
|
||||
item.put()
|
||||
|
||||
items = table.batch_get_item([('the-key1'), ('another-key')])
|
||||
items = table.batch_get_item([("the-key1"), ("another-key")])
|
||||
# Iterate through so that batch_item gets called
|
||||
count = len([x for x in items])
|
||||
count.should.have.equal(2)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue