S3: typing: FakeKey should always have an account_id (#7022)
This commit is contained in:
parent
447710c6a6
commit
c14df137d5
@ -89,7 +89,7 @@ class FakeKey(BaseModel, ManagedState):
|
|||||||
self,
|
self,
|
||||||
name: str,
|
name: str,
|
||||||
value: bytes,
|
value: bytes,
|
||||||
account_id: Optional[str] = None,
|
account_id: str,
|
||||||
storage: Optional[str] = "STANDARD",
|
storage: Optional[str] = "STANDARD",
|
||||||
etag: Optional[str] = None,
|
etag: Optional[str] = None,
|
||||||
is_versioned: bool = False,
|
is_versioned: bool = False,
|
||||||
@ -363,6 +363,7 @@ class FakeMultipart(BaseModel):
|
|||||||
self,
|
self,
|
||||||
key_name: str,
|
key_name: str,
|
||||||
metadata: CaseInsensitiveDict, # type: ignore
|
metadata: CaseInsensitiveDict, # type: ignore
|
||||||
|
account_id: str,
|
||||||
storage: Optional[str] = None,
|
storage: Optional[str] = None,
|
||||||
tags: Optional[Dict[str, str]] = None,
|
tags: Optional[Dict[str, str]] = None,
|
||||||
acl: Optional["FakeAcl"] = None,
|
acl: Optional["FakeAcl"] = None,
|
||||||
@ -371,6 +372,7 @@ class FakeMultipart(BaseModel):
|
|||||||
):
|
):
|
||||||
self.key_name = key_name
|
self.key_name = key_name
|
||||||
self.metadata = metadata
|
self.metadata = metadata
|
||||||
|
self.account_id = account_id
|
||||||
self.storage = storage
|
self.storage = storage
|
||||||
self.tags = tags
|
self.tags = tags
|
||||||
self.acl = acl
|
self.acl = acl
|
||||||
@ -417,7 +419,7 @@ class FakeMultipart(BaseModel):
|
|||||||
raise NoSuchUpload(upload_id=part_id)
|
raise NoSuchUpload(upload_id=part_id)
|
||||||
|
|
||||||
key = FakeKey(
|
key = FakeKey(
|
||||||
part_id, value, encryption=self.sse_encryption, kms_key_id=self.kms_key_id # type: ignore
|
part_id, value, account_id=self.account_id, encryption=self.sse_encryption, kms_key_id=self.kms_key_id # type: ignore
|
||||||
)
|
)
|
||||||
if part_id in self.parts:
|
if part_id in self.parts:
|
||||||
# We're overwriting the current part - dispose of it first
|
# We're overwriting the current part - dispose of it first
|
||||||
@ -2289,6 +2291,7 @@ class S3Backend(BaseBackend, CloudWatchMetricProvider):
|
|||||||
multipart = FakeMultipart(
|
multipart = FakeMultipart(
|
||||||
key_name,
|
key_name,
|
||||||
metadata,
|
metadata,
|
||||||
|
account_id=self.account_id,
|
||||||
storage=storage_type,
|
storage=storage_type,
|
||||||
tags=tags,
|
tags=tags,
|
||||||
acl=acl,
|
acl=acl,
|
||||||
|
@ -25,6 +25,7 @@ from moto import moto_proxy
|
|||||||
from moto.s3.responses import DEFAULT_REGION_NAME
|
from moto.s3.responses import DEFAULT_REGION_NAME
|
||||||
import moto.s3.models as s3model
|
import moto.s3.models as s3model
|
||||||
|
|
||||||
|
from tests import DEFAULT_ACCOUNT_ID
|
||||||
from . import s3_aws_verified
|
from . import s3_aws_verified
|
||||||
|
|
||||||
|
|
||||||
@ -44,12 +45,13 @@ class MyModel:
|
|||||||
@mock_s3
|
@mock_s3
|
||||||
def test_keys_are_pickleable():
|
def test_keys_are_pickleable():
|
||||||
"""Keys must be pickleable due to boto3 implementation details."""
|
"""Keys must be pickleable due to boto3 implementation details."""
|
||||||
key = s3model.FakeKey("name", b"data!")
|
key = s3model.FakeKey("name", b"data!", account_id=DEFAULT_ACCOUNT_ID)
|
||||||
assert key.value == b"data!"
|
assert key.value == b"data!"
|
||||||
|
|
||||||
pickled = pickle.dumps(key)
|
pickled = pickle.dumps(key)
|
||||||
loaded = pickle.loads(pickled)
|
loaded = pickle.loads(pickled)
|
||||||
assert loaded.value == key.value
|
assert loaded.value == key.value
|
||||||
|
assert loaded.account_id == key.account_id
|
||||||
|
|
||||||
|
|
||||||
@mock_s3
|
@mock_s3
|
||||||
|
@ -324,7 +324,9 @@ def test_verify_key_can_be_copied_after_disposing():
|
|||||||
#
|
#
|
||||||
# This test verifies the copy-operation succeeds, it will just not
|
# This test verifies the copy-operation succeeds, it will just not
|
||||||
# have any data.
|
# have any data.
|
||||||
key = s3model.FakeKey(name="test", bucket_name="bucket", value="sth")
|
key = s3model.FakeKey(
|
||||||
|
name="test", bucket_name="bucket", value="sth", account_id=DEFAULT_ACCOUNT_ID
|
||||||
|
)
|
||||||
assert not key._value_buffer.closed
|
assert not key._value_buffer.closed
|
||||||
key.dispose()
|
key.dispose()
|
||||||
assert key._value_buffer.closed
|
assert key._value_buffer.closed
|
||||||
|
@ -17,6 +17,7 @@ from moto.settings import (
|
|||||||
S3_UPLOAD_PART_MIN_SIZE,
|
S3_UPLOAD_PART_MIN_SIZE,
|
||||||
test_proxy_mode,
|
test_proxy_mode,
|
||||||
)
|
)
|
||||||
|
from tests import DEFAULT_ACCOUNT_ID
|
||||||
from .test_s3 import add_proxy_details
|
from .test_s3 import add_proxy_details
|
||||||
|
|
||||||
if settings.TEST_DECORATOR_MODE:
|
if settings.TEST_DECORATOR_MODE:
|
||||||
@ -51,12 +52,12 @@ def test_default_key_buffer_size():
|
|||||||
|
|
||||||
os.environ["MOTO_S3_DEFAULT_KEY_BUFFER_SIZE"] = "2" # 2 bytes
|
os.environ["MOTO_S3_DEFAULT_KEY_BUFFER_SIZE"] = "2" # 2 bytes
|
||||||
assert get_s3_default_key_buffer_size() == 2
|
assert get_s3_default_key_buffer_size() == 2
|
||||||
fake_key = s3model.FakeKey("a", os.urandom(1)) # 1 byte string
|
fake_key = s3model.FakeKey("a", os.urandom(1), account_id=DEFAULT_ACCOUNT_ID)
|
||||||
assert fake_key._value_buffer._rolled is False
|
assert fake_key._value_buffer._rolled is False
|
||||||
|
|
||||||
os.environ["MOTO_S3_DEFAULT_KEY_BUFFER_SIZE"] = "1" # 1 byte
|
os.environ["MOTO_S3_DEFAULT_KEY_BUFFER_SIZE"] = "1" # 1 byte
|
||||||
assert get_s3_default_key_buffer_size() == 1
|
assert get_s3_default_key_buffer_size() == 1
|
||||||
fake_key = s3model.FakeKey("a", os.urandom(3)) # 3 byte string
|
fake_key = s3model.FakeKey("a", os.urandom(3), account_id=DEFAULT_ACCOUNT_ID)
|
||||||
assert fake_key._value_buffer._rolled is True
|
assert fake_key._value_buffer._rolled is True
|
||||||
|
|
||||||
# if no MOTO_S3_DEFAULT_KEY_BUFFER_SIZE env variable is present the
|
# if no MOTO_S3_DEFAULT_KEY_BUFFER_SIZE env variable is present the
|
||||||
|
Loading…
x
Reference in New Issue
Block a user