S3: head_bucket() now returns the region-header (#6107)

This commit is contained in:
Bert Blommers 2023-03-23 09:13:51 -01:00 committed by GitHub
parent 1570ca4e0c
commit 64abff588f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 7 additions and 3 deletions

View File

@ -1615,7 +1615,7 @@ class S3Backend(BaseBackend, CloudWatchMetricProvider):
except KeyError:
raise MissingBucket(bucket=bucket_name)
def head_bucket(self, bucket_name):
def head_bucket(self, bucket_name: str) -> FakeBucket:
return self.get_bucket(bucket_name)
def delete_bucket(self, bucket_name):

View File

@ -338,14 +338,14 @@ class S3Response(BaseResponse):
self._authenticate_and_authorize_s3_action()
try:
self.backend.head_bucket(bucket_name)
bucket = self.backend.head_bucket(bucket_name)
except MissingBucket:
# Unless we do this, boto3 does not raise ClientError on
# HEAD (which the real API responds with), and instead
# raises NoSuchBucket, leading to inconsistency in
# error response between real and mocked responses.
return 404, {}, ""
return 200, {}, ""
return 200, {"x-amz-bucket-region": bucket.region_name}, ""
def _set_cors_headers(self, headers, bucket):
"""

View File

@ -66,6 +66,10 @@ def test_s3_server_bucket_create(key_name):
content.should.be.a(dict)
content["Key"].should.equal(key_name)
res = test_client.head("http://foobaz.localhost:5000")
assert res.status_code == 200
assert res.headers.get("x-amz-bucket-region") == "us-east-1"
res = test_client.get(f"/{key_name}", "http://foobaz.localhost:5000/")
res.status_code.should.equal(200)
res.data.should.equal(b"test value")