Fixed Bug

This commit is contained in:
Terry Cain 2017-11-10 21:00:21 +00:00
parent 6e199d35b3
commit 5858289596
No known key found for this signature in database
GPG Key ID: 14D90844E4E9B9F3
2 changed files with 32 additions and 3 deletions

View File

@ -308,7 +308,7 @@ class DynamoHandler(BaseResponse):
filter_kwargs = {}
if key_condition_expression:
value_alias_map = self.body['ExpressionAttributeValues']
value_alias_map = self.body.get('ExpressionAttributeValues', {})
table = self.dynamodb_backend.get_table(name)
@ -333,7 +333,7 @@ class DynamoHandler(BaseResponse):
index = table.schema
reverse_attribute_lookup = dict((v, k) for k, v in
six.iteritems(self.body['ExpressionAttributeNames']))
six.iteritems(self.body.get('ExpressionAttributeNames', {})))
if " AND " in key_condition_expression:
expressions = key_condition_expression.split(" AND ", 1)
@ -372,7 +372,8 @@ class DynamoHandler(BaseResponse):
range_values = []
hash_key_value_alias = hash_key_expression.split("=")[1].strip()
hash_key = value_alias_map[hash_key_value_alias]
# Temporary fix until we get proper KeyConditionExpression function
hash_key = value_alias_map.get(hash_key_value_alias, {'S': hash_key_value_alias})
else:
# 'KeyConditions': {u'forum_name': {u'ComparisonOperator': u'EQ', u'AttributeValueList': [{u'S': u'the-key'}]}}
key_conditions = self.body.get('KeyConditions')

View File

@ -926,3 +926,31 @@ def test_set_ttl():
resp = client.describe_time_to_live(TableName='test1')
resp['TimeToLiveDescription']['TimeToLiveStatus'].should.equal('DISABLED')
# https://github.com/spulec/moto/issues/1043
@mock_dynamodb2
def test_query_missing_expr_names():
client = boto3.client('dynamodb', region_name='us-east-1')
# Create the DynamoDB table.
client.create_table(
TableName='test1',
AttributeDefinitions=[{'AttributeName': 'client', 'AttributeType': 'S'}, {'AttributeName': 'app', 'AttributeType': 'S'}],
KeySchema=[{'AttributeName': 'client', 'KeyType': 'HASH'}, {'AttributeName': 'app', 'KeyType': 'RANGE'}],
ProvisionedThroughput={'ReadCapacityUnits': 123, 'WriteCapacityUnits': 123}
)
client.put_item(TableName='test1', Item={'client': {'S': 'test1'}, 'app': {'S': 'test1'}})
client.put_item(TableName='test1', Item={'client': {'S': 'test2'}, 'app': {'S': 'test2'}})
resp = client.query(TableName='test1', KeyConditionExpression='client=:client',
ExpressionAttributeValues={':client': {'S': 'test1'}})
resp['Count'].should.equal(1)
resp['Items'][0]['client']['S'].should.equal('test1')
resp = client.query(TableName='test1', KeyConditionExpression=':name=test2',
ExpressionAttributeNames={':name': 'client'})
resp['Count'].should.equal(1)
resp['Items'][0]['client']['S'].should.equal('test2')