localstack-core 4.13.2.dev95__py3-none-any.whl → 4.13.2.dev97__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- localstack/aws/api/s3/__init__.py +5 -2
- localstack/aws/spec-patches.json +0 -26
- localstack/services/s3/provider.py +20 -8
- localstack/services/s3/utils.py +0 -1
- localstack/services/s3/validation.py +0 -4
- localstack/version.py +2 -2
- {localstack_core-4.13.2.dev95.dist-info → localstack_core-4.13.2.dev97.dist-info}/METADATA +1 -1
- {localstack_core-4.13.2.dev95.dist-info → localstack_core-4.13.2.dev97.dist-info}/RECORD +13 -13
- {localstack_core-4.13.2.dev95.data → localstack_core-4.13.2.dev97.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.13.2.dev95.dist-info → localstack_core-4.13.2.dev97.dist-info}/WHEEL +0 -0
- {localstack_core-4.13.2.dev95.dist-info → localstack_core-4.13.2.dev97.dist-info}/entry_points.txt +0 -0
- {localstack_core-4.13.2.dev95.dist-info → localstack_core-4.13.2.dev97.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.13.2.dev95.dist-info → localstack_core-4.13.2.dev97.dist-info}/top_level.txt +0 -0
|
@@ -2679,8 +2679,11 @@ class GlacierJobParameters(TypedDict, total=False):
|
|
|
2679
2679
|
|
|
2680
2680
|
|
|
2681
2681
|
class HeadBucketOutput(TypedDict, total=False):
|
|
2682
|
-
|
|
2683
|
-
|
|
2682
|
+
BucketArn: S3RegionalOrS3ExpressBucketArnString | None
|
|
2683
|
+
BucketLocationType: LocationType | None
|
|
2684
|
+
BucketLocationName: BucketLocationName | None
|
|
2685
|
+
BucketRegion: Region | None
|
|
2686
|
+
AccessPointAlias: AccessPointAlias | None
|
|
2684
2687
|
|
|
2685
2688
|
|
|
2686
2689
|
class HeadBucketRequest(ServiceRequest):
|
localstack/aws/spec-patches.json
CHANGED
|
@@ -62,32 +62,6 @@
|
|
|
62
62
|
"type": "string"
|
|
63
63
|
}
|
|
64
64
|
},
|
|
65
|
-
{
|
|
66
|
-
"op": "add",
|
|
67
|
-
"path": "/shapes/HeadBucketOutput",
|
|
68
|
-
"value": {
|
|
69
|
-
"type": "structure",
|
|
70
|
-
"members": {
|
|
71
|
-
"BucketRegion": {
|
|
72
|
-
"shape": "BucketRegion",
|
|
73
|
-
"location": "header",
|
|
74
|
-
"locationName": "x-amz-bucket-region"
|
|
75
|
-
},
|
|
76
|
-
"BucketContentType": {
|
|
77
|
-
"shape": "BucketContentType",
|
|
78
|
-
"location": "header",
|
|
79
|
-
"locationName": "content-type"
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
"op": "add",
|
|
86
|
-
"path": "/operations/HeadBucket/output",
|
|
87
|
-
"value": {
|
|
88
|
-
"shape": "HeadBucketOutput"
|
|
89
|
-
}
|
|
90
|
-
},
|
|
91
65
|
{
|
|
92
66
|
"op": "add",
|
|
93
67
|
"path": "/operations/PutBucketPolicy/http/responseCode",
|
|
@@ -558,8 +558,12 @@ class S3Provider(S3Api, ServiceLifecycleHook):
|
|
|
558
558
|
BucketName=bucket_name,
|
|
559
559
|
)
|
|
560
560
|
else:
|
|
561
|
+
existing_bucket = store.buckets[bucket_name]
|
|
561
562
|
# CreateBucket is idempotent in us-east-1
|
|
562
|
-
return CreateBucketOutput(
|
|
563
|
+
return CreateBucketOutput(
|
|
564
|
+
Location=f"/{bucket_name}",
|
|
565
|
+
BucketArn=existing_bucket.bucket_arn,
|
|
566
|
+
)
|
|
563
567
|
|
|
564
568
|
if (
|
|
565
569
|
object_ownership := request.get("ObjectOwnership")
|
|
@@ -596,7 +600,7 @@ class S3Provider(S3Api, ServiceLifecycleHook):
|
|
|
596
600
|
if bucket_region == "us-east-1"
|
|
597
601
|
else get_full_default_bucket_location(bucket_name)
|
|
598
602
|
)
|
|
599
|
-
response = CreateBucketOutput(Location=location)
|
|
603
|
+
response = CreateBucketOutput(Location=location, BucketArn=s3_bucket.bucket_arn)
|
|
600
604
|
return response
|
|
601
605
|
|
|
602
606
|
def delete_bucket(
|
|
@@ -675,6 +679,7 @@ class S3Provider(S3Api, ServiceLifecycleHook):
|
|
|
675
679
|
Name=bucket.name,
|
|
676
680
|
CreationDate=bucket.creation_date,
|
|
677
681
|
BucketRegion=bucket.bucket_region,
|
|
682
|
+
BucketArn=bucket.bucket_arn,
|
|
678
683
|
)
|
|
679
684
|
buckets.append(output_bucket)
|
|
680
685
|
count += 1
|
|
@@ -713,7 +718,9 @@ class S3Provider(S3Api, ServiceLifecycleHook):
|
|
|
713
718
|
|
|
714
719
|
# TODO: this call is also used to check if the user has access/authorization for the bucket
|
|
715
720
|
# it can return 403
|
|
716
|
-
return HeadBucketOutput(
|
|
721
|
+
return HeadBucketOutput(
|
|
722
|
+
BucketRegion=s3_bucket.bucket_region, BucketArn=s3_bucket.bucket_arn
|
|
723
|
+
)
|
|
717
724
|
|
|
718
725
|
def get_bucket_location(
|
|
719
726
|
self,
|
|
@@ -1734,6 +1741,7 @@ class S3Provider(S3Api, ServiceLifecycleHook):
|
|
|
1734
1741
|
copy_object_result[f"Checksum{s3_object.checksum_algorithm.upper()}"] = (
|
|
1735
1742
|
s3_object.checksum_value
|
|
1736
1743
|
)
|
|
1744
|
+
copy_object_result["ChecksumType"] = s3_object.checksum_type
|
|
1737
1745
|
|
|
1738
1746
|
response = CopyObjectOutput(
|
|
1739
1747
|
CopyObjectResult=copy_object_result,
|
|
@@ -2356,7 +2364,7 @@ class S3Provider(S3Api, ServiceLifecycleHook):
|
|
|
2356
2364
|
checksum_algorithm = request.get("ChecksumAlgorithm")
|
|
2357
2365
|
if checksum_algorithm and checksum_algorithm not in CHECKSUM_ALGORITHMS:
|
|
2358
2366
|
raise InvalidRequest(
|
|
2359
|
-
"Checksum algorithm provided is unsupported. Please try again with any of the valid types: [CRC32, CRC32C, SHA1, SHA256]"
|
|
2367
|
+
"Checksum algorithm provided is unsupported. Please try again with any of the valid types: [CRC32, CRC32C, CRC64NVME, SHA1, SHA256]"
|
|
2360
2368
|
)
|
|
2361
2369
|
|
|
2362
2370
|
if not (checksum_type := request.get("ChecksumType")) and checksum_algorithm:
|
|
@@ -2401,7 +2409,11 @@ class S3Provider(S3Api, ServiceLifecycleHook):
|
|
|
2401
2409
|
|
|
2402
2410
|
acl = get_access_control_policy_for_new_resource_request(request, owner=s3_bucket.owner)
|
|
2403
2411
|
|
|
2404
|
-
|
|
2412
|
+
initiator = get_owner_for_account_id(context.account_id)
|
|
2413
|
+
# This is weird, but for all other operations, AWS does not return a DisplayName anymore except for the
|
|
2414
|
+
# `initiator` field in Multipart related operation. We will probably remove this soon once AWS changes that
|
|
2415
|
+
initiator["DisplayName"] = "webfile"
|
|
2416
|
+
|
|
2405
2417
|
s3_multipart = S3Multipart(
|
|
2406
2418
|
key=key,
|
|
2407
2419
|
storage_class=storage_class,
|
|
@@ -2420,7 +2432,7 @@ class S3Provider(S3Api, ServiceLifecycleHook):
|
|
|
2420
2432
|
website_redirect_location=request.get("WebsiteRedirectLocation"),
|
|
2421
2433
|
expiration=None, # TODO, from lifecycle, or should it be updated with config?
|
|
2422
2434
|
acl=acl,
|
|
2423
|
-
initiator=
|
|
2435
|
+
initiator=initiator,
|
|
2424
2436
|
tagging=tagging,
|
|
2425
2437
|
owner=s3_bucket.owner,
|
|
2426
2438
|
precondition=object_exists_for_precondition_write(s3_bucket, key),
|
|
@@ -2987,7 +2999,7 @@ class S3Provider(S3Api, ServiceLifecycleHook):
|
|
|
2987
2999
|
Key=key,
|
|
2988
3000
|
UploadId=upload_id,
|
|
2989
3001
|
Initiator=s3_multipart.initiator,
|
|
2990
|
-
Owner=s3_multipart.
|
|
3002
|
+
Owner=s3_multipart.object.owner,
|
|
2991
3003
|
StorageClass=s3_multipart.object.storage_class,
|
|
2992
3004
|
IsTruncated=is_truncated,
|
|
2993
3005
|
MaxParts=max_parts,
|
|
@@ -3103,7 +3115,7 @@ class S3Provider(S3Api, ServiceLifecycleHook):
|
|
|
3103
3115
|
Key=multipart.object.key,
|
|
3104
3116
|
Initiated=multipart.initiated,
|
|
3105
3117
|
StorageClass=multipart.object.storage_class,
|
|
3106
|
-
Owner=multipart.
|
|
3118
|
+
Owner=multipart.object.owner,
|
|
3107
3119
|
Initiator=multipart.initiator,
|
|
3108
3120
|
)
|
|
3109
3121
|
if multipart.checksum_algorithm:
|
localstack/services/s3/utils.py
CHANGED
|
@@ -146,7 +146,6 @@ def get_owner_for_account_id(account_id: str):
|
|
|
146
146
|
:return: the Owner object containing the DisplayName and owner ID
|
|
147
147
|
"""
|
|
148
148
|
return Owner(
|
|
149
|
-
DisplayName="webfile", # only in certain regions, see above
|
|
150
149
|
ID="75aa57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a",
|
|
151
150
|
)
|
|
152
151
|
|
|
@@ -468,13 +468,11 @@ def validate_sse_c(
|
|
|
468
468
|
raise InvalidArgument(
|
|
469
469
|
"Requests specifying Server Side Encryption with Customer provided keys must provide a valid encryption algorithm.",
|
|
470
470
|
ArgumentName="x-amz-server-side-encryption",
|
|
471
|
-
ArgumentValue="null",
|
|
472
471
|
)
|
|
473
472
|
elif not encryption_key and algorithm:
|
|
474
473
|
raise InvalidArgument(
|
|
475
474
|
"Requests specifying Server Side Encryption with Customer provided keys must provide an appropriate secret key.",
|
|
476
475
|
ArgumentName="x-amz-server-side-encryption",
|
|
477
|
-
ArgumentValue="null",
|
|
478
476
|
)
|
|
479
477
|
|
|
480
478
|
if algorithm != "AES256":
|
|
@@ -489,7 +487,6 @@ def validate_sse_c(
|
|
|
489
487
|
raise InvalidArgument(
|
|
490
488
|
"The secret key was invalid for the specified algorithm.",
|
|
491
489
|
ArgumentName="x-amz-server-side-encryption",
|
|
492
|
-
ArgumentValue="null",
|
|
493
490
|
)
|
|
494
491
|
|
|
495
492
|
sse_customer_key_md5 = base64.b64encode(hashlib.md5(sse_customer_key).digest()).decode("utf-8")
|
|
@@ -498,7 +495,6 @@ def validate_sse_c(
|
|
|
498
495
|
"The calculated MD5 hash of the key did not match the hash that was provided.",
|
|
499
496
|
# weirdly, the argument name is wrong, it should be `x-amz-server-side-encryption-customer-key-MD5`
|
|
500
497
|
ArgumentName="x-amz-server-side-encryption",
|
|
501
|
-
ArgumentValue="null",
|
|
502
498
|
)
|
|
503
499
|
|
|
504
500
|
|
localstack/version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '4.13.2.
|
|
32
|
-
__version_tuple__ = version_tuple = (4, 13, 2, '
|
|
31
|
+
__version__ = version = '4.13.2.dev97'
|
|
32
|
+
__version_tuple__ = version_tuple = (4, 13, 2, 'dev97')
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -4,7 +4,7 @@ localstack/deprecations.py,sha256=-3IYgCd6LEC3PjO7hbr3Dg-p0PIS6phjmv1qZnj1uo0,15
|
|
|
4
4
|
localstack/openapi.yaml,sha256=jFUzv-NKkJttxb8HRrmKiNYOmJD-zVfPxG3DDMrRwfg,30865
|
|
5
5
|
localstack/plugins.py,sha256=BIJC9dlo0WbP7lLKkCiGtd_2q5oeqiHZohvoRTcejXM,2457
|
|
6
6
|
localstack/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
-
localstack/version.py,sha256=
|
|
7
|
+
localstack/version.py,sha256=EN8kOekf5kMEONoKGSDAI50IbkwtW4Ha1D-WS99STs8,721
|
|
8
8
|
localstack/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
9
|
localstack/aws/accounts.py,sha256=102zpGowOxo0S6UGMpfjw14QW7WCLVAGsnFK5xFMLoo,3043
|
|
10
10
|
localstack/aws/app.py,sha256=n9bJCfJRuMz_gLGAH430c3bIQXgUXeWO5NPfcdL2MV8,5145
|
|
@@ -19,7 +19,7 @@ localstack/aws/mocking.py,sha256=JZZ7ZyAmlCGzywTF8jH4IelPGIiLqyz_ltDtO046a3E,136
|
|
|
19
19
|
localstack/aws/patches.py,sha256=r5EDhDE_OL25fQzT6oEhV7LvpBzTisOqxdn-JD_ZfrI,1883
|
|
20
20
|
localstack/aws/scaffold.py,sha256=bHxaAyWF2-E5Fh6gRte0_1oX8jnCepChKUicfkb7lQg,20602
|
|
21
21
|
localstack/aws/skeleton.py,sha256=7R0M8X5hnoPxdZ1sy0oaBOu_gWAFS4ZrIYUx5617VZs,8832
|
|
22
|
-
localstack/aws/spec-patches.json,sha256=
|
|
22
|
+
localstack/aws/spec-patches.json,sha256=_zbeWyJy1uB1jtkE6CzDqfVwYvJwxIuomUU-WBUyRhc,42833
|
|
23
23
|
localstack/aws/spec.py,sha256=WT_sqIIKjWjrD-lBfJFgbvmrfhAbcqak5cfOQdnBJZo,14976
|
|
24
24
|
localstack/aws/api/__init__.py,sha256=JspwCauxfTTdLNVAr7AkQaPu1lELdBQ1miB9B9sndOo,297
|
|
25
25
|
localstack/aws/api/core.py,sha256=7qi_hFySJTnOSh1Kv-FCAp2JNpK5jP8sucoG-VTyH4k,6913
|
|
@@ -47,7 +47,7 @@ localstack/aws/api/resource_groups/__init__.py,sha256=eilEP-LAkxzC8GiOlYfFNxHLZg
|
|
|
47
47
|
localstack/aws/api/resourcegroupstaggingapi/__init__.py,sha256=tlfCHtScE373jJNTnRprpB-4t4anDOKGt24aLYXUBAE,9662
|
|
48
48
|
localstack/aws/api/route53/__init__.py,sha256=7i5ABGde2cnREs7kAR1uti7hQ5Shu9IG6Tn0YhEXX2A,72165
|
|
49
49
|
localstack/aws/api/route53resolver/__init__.py,sha256=9AJUZOY7qBu4L19XS6UI1uElgeVJAM4z6uEgZnW7qH0,60642
|
|
50
|
-
localstack/aws/api/s3/__init__.py,sha256=
|
|
50
|
+
localstack/aws/api/s3/__init__.py,sha256=4TbbQpi2GwcZDkvtiwhWnwog_sRuRbeq-0HOVpS39Gc,165048
|
|
51
51
|
localstack/aws/api/s3control/__init__.py,sha256=fBtuowABO2w0qc-Lw_E5Dv7bwcHx9x_GbTwgkv2QlAw,96176
|
|
52
52
|
localstack/aws/api/scheduler/__init__.py,sha256=dgx7bSPUyNnMzV1frLgwKOJN_UFdMcnucd1hdxhRmNM,15390
|
|
53
53
|
localstack/aws/api/secretsmanager/__init__.py,sha256=lpwKUpWzcH4efRKrqifufamTOG6dn4dM3Lye4f4zvXo,24001
|
|
@@ -690,9 +690,9 @@ localstack/services/s3/headers.py,sha256=jh0R2vhdnB5pWiVCoV26kqup53dBWz3iQIE3mhP
|
|
|
690
690
|
localstack/services/s3/models.py,sha256=moQL38yVh3Bk5tgMIzW2yiIF1E2GdgO56ahOiTY5GTc,31239
|
|
691
691
|
localstack/services/s3/notifications.py,sha256=JRvZTs3YpEXX-tPdliarVKjKsp42fdzrTNOC51y2-8I,32568
|
|
692
692
|
localstack/services/s3/presigned_url.py,sha256=rAp8JdscT8ND4qxaHjSsfibEjEvPJ3CIVI0hwHDyJcA,38868
|
|
693
|
-
localstack/services/s3/provider.py,sha256=
|
|
694
|
-
localstack/services/s3/utils.py,sha256=
|
|
695
|
-
localstack/services/s3/validation.py,sha256=
|
|
693
|
+
localstack/services/s3/provider.py,sha256=YlqkZQpCgFw7pwOOV8NF2KHXRkT1lvFVUQfHdAmIf4A,204671
|
|
694
|
+
localstack/services/s3/utils.py,sha256=CKx6DuarUxxQ2d6gLciqoKY95Q5hfzj4wzgg8n91j1U,44363
|
|
695
|
+
localstack/services/s3/validation.py,sha256=wMTShZu48Xpjdc6Y_nkztvjja9Rv4JWXkD8CLyAbBSo,20403
|
|
696
696
|
localstack/services/s3/website_hosting.py,sha256=I4cE7omiN7EBQjdlvueSb_DaD8cwEZxeh7K-H_We30k,16672
|
|
697
697
|
localstack/services/s3/resource_providers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
698
698
|
localstack/services/s3/resource_providers/aws_s3_bucket.py,sha256=usTd16U_pw5MG3DBCLNNFQfwWiW5iAPvsT-OGQRjm9k,22770
|
|
@@ -1311,10 +1311,10 @@ localstack/utils/server/tcp_proxy.py,sha256=y2NJAmvftTiAYsLU_8qe4W5LGqwUw21i90Pu
|
|
|
1311
1311
|
localstack/utils/xray/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1312
1312
|
localstack/utils/xray/trace_header.py,sha256=ahXk9eonq7LpeENwlqUEPj3jDOCiVRixhntQuxNor-Q,6209
|
|
1313
1313
|
localstack/utils/xray/traceid.py,sha256=GKO-R2sMMjlrH2UaLPXlQlZ6flbE7ZKb6IZMtMu_M5U,1110
|
|
1314
|
-
localstack_core-4.13.2.
|
|
1315
|
-
localstack_core-4.13.2.
|
|
1316
|
-
localstack_core-4.13.2.
|
|
1317
|
-
localstack_core-4.13.2.
|
|
1318
|
-
localstack_core-4.13.2.
|
|
1319
|
-
localstack_core-4.13.2.
|
|
1320
|
-
localstack_core-4.13.2.
|
|
1314
|
+
localstack_core-4.13.2.dev97.data/scripts/localstack-supervisor,sha256=nm1Il2d6ASyOB6Vo4CRHd90w7TK9FdRl9VPp0NN6hUk,6378
|
|
1315
|
+
localstack_core-4.13.2.dev97.dist-info/licenses/LICENSE.txt,sha256=3PC-9Z69UsNARuQ980gNR_JsLx8uvMjdG6C7cc4LBYs,606
|
|
1316
|
+
localstack_core-4.13.2.dev97.dist-info/METADATA,sha256=Jv6TQ87HJfC6yUWPpHMOu75bxGr7dGsa0l0MuRbKhXI,5867
|
|
1317
|
+
localstack_core-4.13.2.dev97.dist-info/WHEEL,sha256=YCfwYGOYMi5Jhw2fU4yNgwErybb2IX5PEwBKV4ZbdBo,91
|
|
1318
|
+
localstack_core-4.13.2.dev97.dist-info/entry_points.txt,sha256=59aAnn8KVHWAHkMg2dOgmgYtRZ-xTX9T4UiIchWgK6k,20975
|
|
1319
|
+
localstack_core-4.13.2.dev97.dist-info/top_level.txt,sha256=3sqmK2lGac8nCy8nwsbS5SpIY_izmtWtgaTFKHYVHbI,11
|
|
1320
|
+
localstack_core-4.13.2.dev97.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
{localstack_core-4.13.2.dev95.dist-info → localstack_core-4.13.2.dev97.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
{localstack_core-4.13.2.dev95.dist-info → localstack_core-4.13.2.dev97.dist-info}/top_level.txt
RENAMED
|
File without changes
|