diff --git a/moto/dynamodb2/models.py b/moto/dynamodb2/models.py index 52a757ed5..76dfbf1c3 100644 --- a/moto/dynamodb2/models.py +++ b/moto/dynamodb2/models.py @@ -182,10 +182,9 @@ class Table(object): self.created_at = datetime.datetime.now() self.items = defaultdict(dict) - @property - def describe(self): + def describe(self, base_key='TableDescription'): results = { - 'Table': { + base_key: { 'AttributeDefinitions': self.attr, 'ProvisionedThroughput': self.throughput, 'TableSizeBytes': 0, @@ -525,7 +524,6 @@ class DynamoDBBackend(BaseBackend): for key in keys: if key in table.hash_key_names: return key, None - # import pdb; pdb.set_trace() # for potential_hash, potential_range in zip(table.hash_key_names, table.range_key_names): # if set([potential_hash, potential_range]) == set(keys): # return potential_hash, potential_range diff --git a/moto/dynamodb2/responses.py b/moto/dynamodb2/responses.py index 14466a299..4c0265449 100644 --- a/moto/dynamodb2/responses.py +++ b/moto/dynamodb2/responses.py @@ -109,7 +109,7 @@ class DynamoHandler(BaseResponse): global_indexes=global_indexes, indexes=local_secondary_indexes) if table is not None: - return dynamo_json_dump(table.describe) + return dynamo_json_dump(table.describe()) else: er = 'com.amazonaws.dynamodb.v20111205#ResourceInUseException' return self.error(er) @@ -118,7 +118,7 @@ class DynamoHandler(BaseResponse): name = self.body['TableName'] table = dynamodb_backend2.delete_table(name) if table is not None: - return dynamo_json_dump(table.describe) + return dynamo_json_dump(table.describe()) else: er = 'com.amazonaws.dynamodb.v20111205#ResourceNotFoundException' return self.error(er) @@ -130,7 +130,7 @@ class DynamoHandler(BaseResponse): if 'ProvisionedThroughput' in self.body: throughput = self.body["ProvisionedThroughput"] table = dynamodb_backend2.update_table_throughput(name, throughput) - return dynamo_json_dump(table.describe) + return dynamo_json_dump(table.describe()) def describe_table(self): name = self.body['TableName'] @@ -139,7 +139,7 @@ class DynamoHandler(BaseResponse): except KeyError: er = 'com.amazonaws.dynamodb.v20111205#ResourceNotFoundException' return self.error(er) - return dynamo_json_dump(table.describe) + return dynamo_json_dump(table.describe(base_key='Table')) def put_item(self): name = self.body['TableName'] 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 d61785033..8a5c4ed42 100644 --- a/tests/test_dynamodb2/test_dynamodb_table_with_range_key.py +++ b/tests/test_dynamodb2/test_dynamodb_table_with_range_key.py @@ -1288,7 +1288,7 @@ def test_boto3_query_gsi_range_comparison(): @mock_dynamodb2 -def test_update_table_throughput(): +def test_boto3_update_table_throughput(): dynamodb = boto3.resource('dynamodb', region_name='us-east-1') # Create the DynamoDB table. @@ -1336,7 +1336,7 @@ def test_update_table_throughput(): @mock_dynamodb2 -def test_update_table_gsi_throughput(): +def test_boto3_update_table_gsi_throughput(): dynamodb = boto3.resource('dynamodb', region_name='us-east-1') # Create the DynamoDB table. diff --git a/tests/test_dynamodb2/test_dynamodb_table_without_range_key.py b/tests/test_dynamodb2/test_dynamodb_table_without_range_key.py index 5b24f7a5a..c17d66834 100644 --- a/tests/test_dynamodb2/test_dynamodb_table_without_range_key.py +++ b/tests/test_dynamodb2/test_dynamodb_table_without_range_key.py @@ -519,6 +519,31 @@ def test_conflicting_writes(): boto3 """ +@mock_dynamodb2 +def test_boto3_create_table(): + dynamodb = boto3.resource('dynamodb', region_name='us-east-1') + + table = dynamodb.create_table( + TableName='users', + KeySchema=[ + { + 'AttributeName': 'username', + 'KeyType': 'HASH' + }, + ], + AttributeDefinitions=[ + { + 'AttributeName': 'username', + 'AttributeType': 'S' + }, + ], + ProvisionedThroughput={ + 'ReadCapacityUnits': 5, + 'WriteCapacityUnits': 5 + } + ) + table.name.should.equal('users') + def _create_user_table(): dynamodb = boto3.resource('dynamodb', region_name='us-east-1')