Fix: DynamoDB:GetItem throws wrong error when table doesn't exist (#3700)

* Fix: DynamoDB:GetItem throws wrong error when table doesn't exist

* Use unique exception for table not found, per PR feedback

* Just fix the reported issue, without touching anything else...
This commit is contained in:
Brian Pandola 2021-02-17 03:22:00 -08:00 committed by GitHub
parent 6f1eae6f02
commit 613b1395b8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 0 deletions

View File

@ -349,6 +349,12 @@ class DynamoHandler(BaseResponse):
def get_item(self):
name = self.body["TableName"]
table = self.dynamodb_backend.get_table(name)
if table is None:
return self.error(
"com.amazonaws.dynamodb.v20120810#ResourceNotFoundException",
"Requested resource not found",
)
key = self.body["Key"]
projection_expression = self.body.get("ProjectionExpression")
expression_attribute_names = self.body.get("ExpressionAttributeNames", {})

View File

@ -5698,3 +5698,12 @@ def test_update_item_add_to_list_using_legacy_attribute_updates():
resp = table.get_item(Key={"id": "list_add"})
resp["Item"]["attr"].should.equal(["a", "b", "c", "d", "e"])
@mock_dynamodb2
def test_get_item_for_non_existent_table_raises_error():
client = boto3.client("dynamodb", "us-east-1")
with pytest.raises(ClientError) as ex:
client.get_item(TableName="non-existent", Key={"site-id": {"S": "foo"}})
ex.value.response["Error"]["Code"].should.equal("ResourceNotFoundException")
ex.value.response["Error"]["Message"].should.equal("Requested resource not found")