From 33f31652eaec7f3e441a596172884663b2faf7c4 Mon Sep 17 00:00:00 2001 From: Joshua Inkenbrandt Date: Sat, 9 Jan 2016 17:58:06 -0800 Subject: [PATCH 1/2] Reverse before limit --- moto/dynamodb2/responses.py | 8 +++---- .../test_dynamodb_table_with_range_key.py | 24 +++++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/moto/dynamodb2/responses.py b/moto/dynamodb2/responses.py index 20c45560..0c2890dd 100644 --- a/moto/dynamodb2/responses.py +++ b/moto/dynamodb2/responses.py @@ -320,14 +320,14 @@ class DynamoHandler(BaseResponse): er = 'com.amazonaws.dynamodb.v20111205#ResourceNotFoundException' return self.error(er) - limit = self.body.get("Limit") - if limit: - items = items[:limit] - reversed = self.body.get("ScanIndexForward") if reversed is False: items.reverse() + limit = self.body.get("Limit") + if limit: + items = items[:limit] + result = { "Count": len(items), "Items": [item.attrs for item in items], diff --git a/tests/test_dynamodb2/test_dynamodb_table_with_range_key.py b/tests/test_dynamodb2/test_dynamodb_table_with_range_key.py index 282599ba..5700b684 100644 --- a/tests/test_dynamodb2/test_dynamodb_table_with_range_key.py +++ b/tests/test_dynamodb2/test_dynamodb_table_with_range_key.py @@ -570,6 +570,30 @@ def test_query_with_global_indexes(): list(results).should.have.length_of(0) +@mock_dynamodb2 +def test_reverse_query(): + conn = boto.dynamodb2.layer1.DynamoDBConnection() + + table = Table.create('messages', schema=[ + HashKey('subject'), + RangeKey('created_at', data_type='N') + ]) + + for i in range(10): + table.put_item({ + 'subject': "Hi", + 'created_at': i + }) + + results = table.query_2(subject__eq="Hi", + created_at__lt=6, + limit=4, + reverse=True) + + expected = map(Decimal, [5, 4, 3, 2]) + [r['created_at'] for r in results].should.equal(expected) + + @mock_dynamodb2 def test_lookup(): from decimal import Decimal From 72bda6d901bd343edefafa144474cae090629bbe Mon Sep 17 00:00:00 2001 From: Joshua Inkenbrandt Date: Sat, 9 Jan 2016 18:29:21 -0800 Subject: [PATCH 2/2] Don't do python 2 things in python 3 --- tests/test_dynamodb2/test_dynamodb_table_with_range_key.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_dynamodb2/test_dynamodb_table_with_range_key.py b/tests/test_dynamodb2/test_dynamodb_table_with_range_key.py index 5700b684..37e41963 100644 --- a/tests/test_dynamodb2/test_dynamodb_table_with_range_key.py +++ b/tests/test_dynamodb2/test_dynamodb_table_with_range_key.py @@ -590,7 +590,7 @@ def test_reverse_query(): limit=4, reverse=True) - expected = map(Decimal, [5, 4, 3, 2]) + expected = [Decimal(5), Decimal(4), Decimal(3), Decimal(2)] [r['created_at'] for r in results].should.equal(expected)