localstack-core 4.3.1.dev6__py3-none-any.whl → 4.3.1.dev28__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/ec2/__init__.py +597 -0
- localstack/aws/api/events/__init__.py +18 -12
- localstack/aws/api/route53/__init__.py +2 -0
- localstack/aws/api/s3control/__init__.py +89 -0
- localstack/aws/api/transcribe/__init__.py +1 -0
- localstack/services/cloudformation/engine/entities.py +18 -1
- localstack/services/cloudformation/engine/template_deployer.py +0 -9
- localstack/services/cloudformation/engine/v2/change_set_model.py +164 -35
- localstack/services/cloudformation/engine/v2/change_set_model_describer.py +143 -69
- localstack/services/cloudformation/engine/v2/change_set_model_executor.py +170 -0
- localstack/services/cloudformation/engine/v2/change_set_model_visitor.py +8 -0
- localstack/services/cloudformation/v2/provider.py +72 -6
- localstack/services/ec2/patches.py +31 -3
- localstack/services/events/provider.py +6 -1
- localstack/services/kms/models.py +1 -1
- localstack/services/lambda_/event_source_mapping/pollers/dynamodb_poller.py +2 -0
- localstack/services/lambda_/event_source_mapping/pollers/kinesis_poller.py +2 -0
- localstack/services/lambda_/event_source_mapping/pollers/stream_poller.py +4 -2
- localstack/services/lambda_/invocation/assignment.py +4 -2
- localstack/services/lambda_/invocation/execution_environment.py +16 -4
- localstack/services/lambda_/invocation/logs.py +28 -4
- localstack/services/lambda_/provider.py +18 -3
- localstack/services/lambda_/runtimes.py +15 -2
- localstack/services/s3/presigned_url.py +15 -11
- localstack/services/secretsmanager/provider.py +13 -4
- localstack/services/sqs/models.py +22 -3
- localstack/services/sqs/utils.py +16 -7
- localstack/services/ssm/resource_providers/aws_ssm_parameter.py +1 -5
- localstack/services/stepfunctions/asl/utils/json_path.py +9 -0
- localstack/testing/snapshots/transformer_utility.py +13 -0
- localstack/utils/aws/client_types.py +8 -0
- localstack/utils/docker_utils.py +2 -2
- localstack/version.py +2 -2
- {localstack_core-4.3.1.dev6.dist-info → localstack_core-4.3.1.dev28.dist-info}/METADATA +5 -5
- {localstack_core-4.3.1.dev6.dist-info → localstack_core-4.3.1.dev28.dist-info}/RECORD +43 -42
- localstack_core-4.3.1.dev28.dist-info/plux.json +1 -0
- localstack_core-4.3.1.dev6.dist-info/plux.json +0 -1
- {localstack_core-4.3.1.dev6.data → localstack_core-4.3.1.dev28.data}/scripts/localstack +0 -0
- {localstack_core-4.3.1.dev6.data → localstack_core-4.3.1.dev28.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.3.1.dev6.data → localstack_core-4.3.1.dev28.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.3.1.dev6.dist-info → localstack_core-4.3.1.dev28.dist-info}/WHEEL +0 -0
- {localstack_core-4.3.1.dev6.dist-info → localstack_core-4.3.1.dev28.dist-info}/entry_points.txt +0 -0
- {localstack_core-4.3.1.dev6.dist-info → localstack_core-4.3.1.dev28.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.3.1.dev6.dist-info → localstack_core-4.3.1.dev28.dist-info}/top_level.txt +0 -0
@@ -36,6 +36,7 @@ EndpointStateReason = str
|
|
36
36
|
EndpointUrl = str
|
37
37
|
ErrorCode = str
|
38
38
|
ErrorMessage = str
|
39
|
+
EventBusArn = str
|
39
40
|
EventBusDescription = str
|
40
41
|
EventBusName = str
|
41
42
|
EventBusNameOrArn = str
|
@@ -329,7 +330,7 @@ Long = int
|
|
329
330
|
|
330
331
|
class Archive(TypedDict, total=False):
|
331
332
|
ArchiveName: Optional[ArchiveName]
|
332
|
-
EventSourceArn: Optional[
|
333
|
+
EventSourceArn: Optional[EventBusArn]
|
333
334
|
State: Optional[ArchiveState]
|
334
335
|
StateReason: Optional[ArchiveStateReason]
|
335
336
|
RetentionDays: Optional[RetentionDays]
|
@@ -497,10 +498,11 @@ class CreateApiDestinationResponse(TypedDict, total=False):
|
|
497
498
|
|
498
499
|
class CreateArchiveRequest(ServiceRequest):
|
499
500
|
ArchiveName: ArchiveName
|
500
|
-
EventSourceArn:
|
501
|
+
EventSourceArn: EventBusArn
|
501
502
|
Description: Optional[ArchiveDescription]
|
502
503
|
EventPattern: Optional[EventPattern]
|
503
504
|
RetentionDays: Optional[RetentionDays]
|
505
|
+
KmsKeyIdentifier: Optional[KmsKeyIdentifier]
|
504
506
|
|
505
507
|
|
506
508
|
class CreateArchiveResponse(TypedDict, total=False):
|
@@ -730,11 +732,12 @@ class DescribeArchiveRequest(ServiceRequest):
|
|
730
732
|
class DescribeArchiveResponse(TypedDict, total=False):
|
731
733
|
ArchiveArn: Optional[ArchiveArn]
|
732
734
|
ArchiveName: Optional[ArchiveName]
|
733
|
-
EventSourceArn: Optional[
|
735
|
+
EventSourceArn: Optional[EventBusArn]
|
734
736
|
Description: Optional[ArchiveDescription]
|
735
737
|
EventPattern: Optional[EventPattern]
|
736
738
|
State: Optional[ArchiveState]
|
737
739
|
StateReason: Optional[ArchiveStateReason]
|
740
|
+
KmsKeyIdentifier: Optional[KmsKeyIdentifier]
|
738
741
|
RetentionDays: Optional[RetentionDays]
|
739
742
|
SizeBytes: Optional[Long]
|
740
743
|
EventCount: Optional[Long]
|
@@ -836,7 +839,7 @@ class DescribeReplayResponse(TypedDict, total=False):
|
|
836
839
|
Description: Optional[ReplayDescription]
|
837
840
|
State: Optional[ReplayState]
|
838
841
|
StateReason: Optional[ReplayStateReason]
|
839
|
-
EventSourceArn: Optional[
|
842
|
+
EventSourceArn: Optional[ArchiveArn]
|
840
843
|
Destination: Optional[ReplayDestination]
|
841
844
|
EventStartTime: Optional[Timestamp]
|
842
845
|
EventEndTime: Optional[Timestamp]
|
@@ -994,7 +997,7 @@ class ListApiDestinationsResponse(TypedDict, total=False):
|
|
994
997
|
|
995
998
|
class ListArchivesRequest(ServiceRequest):
|
996
999
|
NamePrefix: Optional[ArchiveName]
|
997
|
-
EventSourceArn: Optional[
|
1000
|
+
EventSourceArn: Optional[EventBusArn]
|
998
1001
|
State: Optional[ArchiveState]
|
999
1002
|
NextToken: Optional[NextToken]
|
1000
1003
|
Limit: Optional[LimitMax100]
|
@@ -1094,14 +1097,14 @@ class ListPartnerEventSourcesResponse(TypedDict, total=False):
|
|
1094
1097
|
class ListReplaysRequest(ServiceRequest):
|
1095
1098
|
NamePrefix: Optional[ReplayName]
|
1096
1099
|
State: Optional[ReplayState]
|
1097
|
-
EventSourceArn: Optional[
|
1100
|
+
EventSourceArn: Optional[ArchiveArn]
|
1098
1101
|
NextToken: Optional[NextToken]
|
1099
1102
|
Limit: Optional[LimitMax100]
|
1100
1103
|
|
1101
1104
|
|
1102
1105
|
class Replay(TypedDict, total=False):
|
1103
1106
|
ReplayName: Optional[ReplayName]
|
1104
|
-
EventSourceArn: Optional[
|
1107
|
+
EventSourceArn: Optional[ArchiveArn]
|
1105
1108
|
State: Optional[ReplayState]
|
1106
1109
|
StateReason: Optional[ReplayStateReason]
|
1107
1110
|
EventStartTime: Optional[Timestamp]
|
@@ -1391,7 +1394,7 @@ class RemoveTargetsResponse(TypedDict, total=False):
|
|
1391
1394
|
class StartReplayRequest(ServiceRequest):
|
1392
1395
|
ReplayName: ReplayName
|
1393
1396
|
Description: Optional[ReplayDescription]
|
1394
|
-
EventSourceArn:
|
1397
|
+
EventSourceArn: ArchiveArn
|
1395
1398
|
EventStartTime: Timestamp
|
1396
1399
|
EventEndTime: Timestamp
|
1397
1400
|
Destination: ReplayDestination
|
@@ -1455,6 +1458,7 @@ class UpdateArchiveRequest(ServiceRequest):
|
|
1455
1458
|
Description: Optional[ArchiveDescription]
|
1456
1459
|
EventPattern: Optional[EventPattern]
|
1457
1460
|
RetentionDays: Optional[RetentionDays]
|
1461
|
+
KmsKeyIdentifier: Optional[KmsKeyIdentifier]
|
1458
1462
|
|
1459
1463
|
|
1460
1464
|
class UpdateArchiveResponse(TypedDict, total=False):
|
@@ -1581,10 +1585,11 @@ class EventsApi:
|
|
1581
1585
|
self,
|
1582
1586
|
context: RequestContext,
|
1583
1587
|
archive_name: ArchiveName,
|
1584
|
-
event_source_arn:
|
1588
|
+
event_source_arn: EventBusArn,
|
1585
1589
|
description: ArchiveDescription = None,
|
1586
1590
|
event_pattern: EventPattern = None,
|
1587
1591
|
retention_days: RetentionDays = None,
|
1592
|
+
kms_key_identifier: KmsKeyIdentifier = None,
|
1588
1593
|
**kwargs,
|
1589
1594
|
) -> CreateArchiveResponse:
|
1590
1595
|
raise NotImplementedError
|
@@ -1788,7 +1793,7 @@ class EventsApi:
|
|
1788
1793
|
self,
|
1789
1794
|
context: RequestContext,
|
1790
1795
|
name_prefix: ArchiveName = None,
|
1791
|
-
event_source_arn:
|
1796
|
+
event_source_arn: EventBusArn = None,
|
1792
1797
|
state: ArchiveState = None,
|
1793
1798
|
next_token: NextToken = None,
|
1794
1799
|
limit: LimitMax100 = None,
|
@@ -1870,7 +1875,7 @@ class EventsApi:
|
|
1870
1875
|
context: RequestContext,
|
1871
1876
|
name_prefix: ReplayName = None,
|
1872
1877
|
state: ReplayState = None,
|
1873
|
-
event_source_arn:
|
1878
|
+
event_source_arn: ArchiveArn = None,
|
1874
1879
|
next_token: NextToken = None,
|
1875
1880
|
limit: LimitMax100 = None,
|
1876
1881
|
**kwargs,
|
@@ -2004,7 +2009,7 @@ class EventsApi:
|
|
2004
2009
|
self,
|
2005
2010
|
context: RequestContext,
|
2006
2011
|
replay_name: ReplayName,
|
2007
|
-
event_source_arn:
|
2012
|
+
event_source_arn: ArchiveArn,
|
2008
2013
|
event_start_time: Timestamp,
|
2009
2014
|
event_end_time: Timestamp,
|
2010
2015
|
destination: ReplayDestination,
|
@@ -2053,6 +2058,7 @@ class EventsApi:
|
|
2053
2058
|
description: ArchiveDescription = None,
|
2054
2059
|
event_pattern: EventPattern = None,
|
2055
2060
|
retention_days: RetentionDays = None,
|
2061
|
+
kms_key_identifier: KmsKeyIdentifier = None,
|
2056
2062
|
**kwargs,
|
2057
2063
|
) -> UpdateArchiveResponse:
|
2058
2064
|
raise NotImplementedError
|
@@ -277,6 +277,8 @@ class ResourceRecordSetRegion(StrEnum):
|
|
277
277
|
ap_southeast_5 = "ap-southeast-5"
|
278
278
|
mx_central_1 = "mx-central-1"
|
279
279
|
ap_southeast_7 = "ap-southeast-7"
|
280
|
+
us_gov_east_1 = "us-gov-east-1"
|
281
|
+
us_gov_west_1 = "us-gov-west-1"
|
280
282
|
|
281
283
|
|
282
284
|
class ReusableDelegationSetLimitType(StrEnum):
|
@@ -405,6 +405,17 @@ class S3StorageClass(StrEnum):
|
|
405
405
|
GLACIER_IR = "GLACIER_IR"
|
406
406
|
|
407
407
|
|
408
|
+
class ScopePermission(StrEnum):
|
409
|
+
GetObject = "GetObject"
|
410
|
+
GetObjectAttributes = "GetObjectAttributes"
|
411
|
+
ListMultipartUploadParts = "ListMultipartUploadParts"
|
412
|
+
ListBucket = "ListBucket"
|
413
|
+
ListBucketMultipartUploads = "ListBucketMultipartUploads"
|
414
|
+
PutObject = "PutObject"
|
415
|
+
DeleteObject = "DeleteObject"
|
416
|
+
AbortMultipartUpload = "AbortMultipartUpload"
|
417
|
+
|
418
|
+
|
408
419
|
class SseKmsEncryptedObjectsStatus(StrEnum):
|
409
420
|
Enabled = "Enabled"
|
410
421
|
Disabled = "Disabled"
|
@@ -824,6 +835,15 @@ class CreateAccessPointForObjectLambdaResult(TypedDict, total=False):
|
|
824
835
|
Alias: Optional[ObjectLambdaAccessPointAlias]
|
825
836
|
|
826
837
|
|
838
|
+
ScopePermissionList = List[ScopePermission]
|
839
|
+
PrefixesList = List[Prefix]
|
840
|
+
|
841
|
+
|
842
|
+
class Scope(TypedDict, total=False):
|
843
|
+
Prefixes: Optional[PrefixesList]
|
844
|
+
Permissions: Optional[ScopePermissionList]
|
845
|
+
|
846
|
+
|
827
847
|
class CreateAccessPointRequest(ServiceRequest):
|
828
848
|
AccountId: AccountId
|
829
849
|
Name: AccessPointName
|
@@ -831,6 +851,7 @@ class CreateAccessPointRequest(ServiceRequest):
|
|
831
851
|
VpcConfiguration: Optional[VpcConfiguration]
|
832
852
|
PublicAccessBlockConfiguration: Optional[PublicAccessBlockConfiguration]
|
833
853
|
BucketAccountId: Optional[AccountId]
|
854
|
+
Scope: Optional[Scope]
|
834
855
|
|
835
856
|
|
836
857
|
class CreateAccessPointResult(TypedDict, total=False):
|
@@ -1222,6 +1243,11 @@ class DeleteAccessPointRequest(ServiceRequest):
|
|
1222
1243
|
Name: AccessPointName
|
1223
1244
|
|
1224
1245
|
|
1246
|
+
class DeleteAccessPointScopeRequest(ServiceRequest):
|
1247
|
+
AccountId: AccountId
|
1248
|
+
Name: AccessPointName
|
1249
|
+
|
1250
|
+
|
1225
1251
|
class DeleteBucketLifecycleConfigurationRequest(ServiceRequest):
|
1226
1252
|
AccountId: AccountId
|
1227
1253
|
Bucket: BucketName
|
@@ -1561,6 +1587,15 @@ class GetAccessPointResult(TypedDict, total=False):
|
|
1561
1587
|
BucketAccountId: Optional[AccountId]
|
1562
1588
|
|
1563
1589
|
|
1590
|
+
class GetAccessPointScopeRequest(ServiceRequest):
|
1591
|
+
AccountId: AccountId
|
1592
|
+
Name: AccessPointName
|
1593
|
+
|
1594
|
+
|
1595
|
+
class GetAccessPointScopeResult(TypedDict, total=False):
|
1596
|
+
Scope: Optional[Scope]
|
1597
|
+
|
1598
|
+
|
1564
1599
|
class GetBucketLifecycleConfigurationRequest(ServiceRequest):
|
1565
1600
|
AccountId: AccountId
|
1566
1601
|
Bucket: BucketName
|
@@ -1965,6 +2000,18 @@ class ListAccessGrantsResult(TypedDict, total=False):
|
|
1965
2000
|
AccessGrantsList: Optional[AccessGrantsList]
|
1966
2001
|
|
1967
2002
|
|
2003
|
+
class ListAccessPointsForDirectoryBucketsRequest(ServiceRequest):
|
2004
|
+
AccountId: AccountId
|
2005
|
+
DirectoryBucket: Optional[BucketName]
|
2006
|
+
NextToken: Optional[NonEmptyMaxLength1024String]
|
2007
|
+
MaxResults: Optional[MaxResults]
|
2008
|
+
|
2009
|
+
|
2010
|
+
class ListAccessPointsForDirectoryBucketsResult(TypedDict, total=False):
|
2011
|
+
AccessPointList: Optional[AccessPointList]
|
2012
|
+
NextToken: Optional[NonEmptyMaxLength1024String]
|
2013
|
+
|
2014
|
+
|
1968
2015
|
class ListAccessPointsForObjectLambdaRequest(ServiceRequest):
|
1969
2016
|
AccountId: AccountId
|
1970
2017
|
NextToken: Optional[NonEmptyMaxLength1024String]
|
@@ -2137,6 +2184,12 @@ class PutAccessPointPolicyRequest(ServiceRequest):
|
|
2137
2184
|
Policy: Policy
|
2138
2185
|
|
2139
2186
|
|
2187
|
+
class PutAccessPointScopeRequest(ServiceRequest):
|
2188
|
+
AccountId: AccountId
|
2189
|
+
Name: AccessPointName
|
2190
|
+
Scope: Scope
|
2191
|
+
|
2192
|
+
|
2140
2193
|
class PutBucketLifecycleConfigurationRequest(ServiceRequest):
|
2141
2194
|
AccountId: AccountId
|
2142
2195
|
Bucket: BucketName
|
@@ -2360,6 +2413,7 @@ class S3ControlApi:
|
|
2360
2413
|
vpc_configuration: VpcConfiguration = None,
|
2361
2414
|
public_access_block_configuration: PublicAccessBlockConfiguration = None,
|
2362
2415
|
bucket_account_id: AccountId = None,
|
2416
|
+
scope: Scope = None,
|
2363
2417
|
**kwargs,
|
2364
2418
|
) -> CreateAccessPointResult:
|
2365
2419
|
raise NotImplementedError
|
@@ -2498,6 +2552,12 @@ class S3ControlApi:
|
|
2498
2552
|
) -> None:
|
2499
2553
|
raise NotImplementedError
|
2500
2554
|
|
2555
|
+
@handler("DeleteAccessPointScope")
|
2556
|
+
def delete_access_point_scope(
|
2557
|
+
self, context: RequestContext, account_id: AccountId, name: AccessPointName, **kwargs
|
2558
|
+
) -> None:
|
2559
|
+
raise NotImplementedError
|
2560
|
+
|
2501
2561
|
@handler("DeleteBucket")
|
2502
2562
|
def delete_bucket(
|
2503
2563
|
self, context: RequestContext, account_id: AccountId, bucket: BucketName, **kwargs
|
@@ -2687,6 +2747,12 @@ class S3ControlApi:
|
|
2687
2747
|
) -> GetAccessPointPolicyStatusForObjectLambdaResult:
|
2688
2748
|
raise NotImplementedError
|
2689
2749
|
|
2750
|
+
@handler("GetAccessPointScope")
|
2751
|
+
def get_access_point_scope(
|
2752
|
+
self, context: RequestContext, account_id: AccountId, name: AccessPointName, **kwargs
|
2753
|
+
) -> GetAccessPointScopeResult:
|
2754
|
+
raise NotImplementedError
|
2755
|
+
|
2690
2756
|
@handler("GetBucket")
|
2691
2757
|
def get_bucket(
|
2692
2758
|
self, context: RequestContext, account_id: AccountId, bucket: BucketName, **kwargs
|
@@ -2858,6 +2924,18 @@ class S3ControlApi:
|
|
2858
2924
|
) -> ListAccessPointsResult:
|
2859
2925
|
raise NotImplementedError
|
2860
2926
|
|
2927
|
+
@handler("ListAccessPointsForDirectoryBuckets")
|
2928
|
+
def list_access_points_for_directory_buckets(
|
2929
|
+
self,
|
2930
|
+
context: RequestContext,
|
2931
|
+
account_id: AccountId,
|
2932
|
+
directory_bucket: BucketName = None,
|
2933
|
+
next_token: NonEmptyMaxLength1024String = None,
|
2934
|
+
max_results: MaxResults = None,
|
2935
|
+
**kwargs,
|
2936
|
+
) -> ListAccessPointsForDirectoryBucketsResult:
|
2937
|
+
raise NotImplementedError
|
2938
|
+
|
2861
2939
|
@handler("ListAccessPointsForObjectLambda")
|
2862
2940
|
def list_access_points_for_object_lambda(
|
2863
2941
|
self,
|
@@ -2987,6 +3065,17 @@ class S3ControlApi:
|
|
2987
3065
|
) -> None:
|
2988
3066
|
raise NotImplementedError
|
2989
3067
|
|
3068
|
+
@handler("PutAccessPointScope")
|
3069
|
+
def put_access_point_scope(
|
3070
|
+
self,
|
3071
|
+
context: RequestContext,
|
3072
|
+
account_id: AccountId,
|
3073
|
+
name: AccessPointName,
|
3074
|
+
scope: Scope,
|
3075
|
+
**kwargs,
|
3076
|
+
) -> None:
|
3077
|
+
raise NotImplementedError
|
3078
|
+
|
2990
3079
|
@handler("PutBucketLifecycleConfiguration")
|
2991
3080
|
def put_bucket_lifecycle_configuration(
|
2992
3081
|
self,
|
@@ -297,6 +297,10 @@ class Stack:
|
|
297
297
|
"""Return dict of resources"""
|
298
298
|
return dict(self.template_resources)
|
299
299
|
|
300
|
+
@resources.setter
|
301
|
+
def resources(self, resources: dict):
|
302
|
+
self.template["Resources"] = resources
|
303
|
+
|
300
304
|
@property
|
301
305
|
def template_resources(self):
|
302
306
|
return self.template.setdefault("Resources", {})
|
@@ -370,8 +374,17 @@ class Stack:
|
|
370
374
|
# TODO: what functionality of the Stack object do we rely on here?
|
371
375
|
class StackChangeSet(Stack):
|
372
376
|
update_graph: NodeTemplate | None
|
377
|
+
change_set_type: ChangeSetType | None
|
373
378
|
|
374
|
-
def __init__(
|
379
|
+
def __init__(
|
380
|
+
self,
|
381
|
+
account_id: str,
|
382
|
+
region_name: str,
|
383
|
+
stack: Stack,
|
384
|
+
params=None,
|
385
|
+
template=None,
|
386
|
+
change_set_type: ChangeSetType | None = None,
|
387
|
+
):
|
375
388
|
if template is None:
|
376
389
|
template = {}
|
377
390
|
if params is None:
|
@@ -389,6 +402,7 @@ class StackChangeSet(Stack):
|
|
389
402
|
self.stack = stack
|
390
403
|
self.metadata["StackId"] = stack.stack_id
|
391
404
|
self.metadata["Status"] = "CREATE_PENDING"
|
405
|
+
self.change_set_type = change_set_type
|
392
406
|
|
393
407
|
@property
|
394
408
|
def change_set_id(self):
|
@@ -412,5 +426,8 @@ class StackChangeSet(Stack):
|
|
412
426
|
change_set_model = ChangeSetModel(
|
413
427
|
before_template=before_template,
|
414
428
|
after_template=after_template,
|
429
|
+
# TODO
|
430
|
+
before_parameters=None,
|
431
|
+
after_parameters=None,
|
415
432
|
)
|
416
433
|
self.update_graph = change_set_model.get_update_model()
|
@@ -1409,15 +1409,6 @@ class TemplateDeployer:
|
|
1409
1409
|
) # TODO: why is there a fallback?
|
1410
1410
|
resource["ResourceType"] = get_resource_type(resource)
|
1411
1411
|
|
1412
|
-
def _safe_lookup_is_deleted(r_id):
|
1413
|
-
"""handles the case where self.stack.resource_status(..) fails for whatever reason"""
|
1414
|
-
try:
|
1415
|
-
return self.stack.resource_status(r_id).get("ResourceStatus") == "DELETE_COMPLETE"
|
1416
|
-
except Exception:
|
1417
|
-
if config.CFN_VERBOSE_ERRORS:
|
1418
|
-
LOG.exception("failed to lookup if resource %s is deleted", r_id)
|
1419
|
-
return True # just an assumption
|
1420
|
-
|
1421
1412
|
ordered_resource_ids = list(
|
1422
1413
|
order_resources(
|
1423
1414
|
resources=original_resources,
|