diff --git a/moto/dynamodb2/responses.py b/moto/dynamodb2/responses.py index 952d33efa..fce321c3d 100644 --- a/moto/dynamodb2/responses.py +++ b/moto/dynamodb2/responses.py @@ -161,8 +161,7 @@ class DynamoHandler(BaseResponse): name = self.body['TableName'] item = self.body['Item'] - res = re.search('\"\"', json.dumps(item)) - if res: + if any(list(param.values())[0] == '' for param in item.values() if isinstance(param, dict)): er = 'com.amazonaws.dynamodb.v20111205#ValidationException' return (400, {'server': 'amazon.com'}, diff --git a/tests/test_dynamodb2/test_dynamodb.py b/tests/test_dynamodb2/test_dynamodb.py index 1d7fa4034..20ff80167 100644 --- a/tests/test_dynamodb2/test_dynamodb.py +++ b/tests/test_dynamodb2/test_dynamodb.py @@ -247,6 +247,33 @@ def test_scan_returns_consumed_capacity(): assert response['ConsumedCapacity']['TableName'] == name +@requires_boto_gte("2.9") +@mock_dynamodb2 +def test_put_item_with_special_chars(): + name = 'TestTable' + conn = boto3.client('dynamodb', + region_name='us-west-2', + aws_access_key_id="ak", + aws_secret_access_key="sk") + + conn.create_table(TableName=name, + KeySchema=[{'AttributeName':'forum_name','KeyType':'HASH'}], + AttributeDefinitions=[{'AttributeName':'forum_name','AttributeType':'S'}], + ProvisionedThroughput={'ReadCapacityUnits':5,'WriteCapacityUnits':5}) + + conn.put_item( + TableName=name, + Item={ + 'forum_name': { 'S': 'LOLCat Forum' }, + 'subject': { 'S': 'Check this out!' }, + 'Body': { 'S': 'http://url_to_lolcat.gif'}, + 'SentBy': { 'S': "test" }, + 'ReceivedTime': { 'S': '12/9/2011 11:36:03 PM'}, + '"': {"S": "foo"}, + } + ) + + @requires_boto_gte("2.9") @mock_dynamodb2 def test_query_returns_consumed_capacity():