localstack-core 4.11.2.dev14__py3-none-any.whl → 4.12.1.dev18__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.
Potentially problematic release.
This version of localstack-core might be problematic. Click here for more details.
- localstack/aws/api/ec2/__init__.py +13 -0
- localstack/aws/api/iam/__init__.py +1 -0
- localstack/aws/api/lambda_/__init__.py +616 -0
- localstack/aws/api/logs/__init__.py +188 -0
- localstack/aws/api/opensearch/__init__.py +11 -0
- localstack/aws/api/route53/__init__.py +3 -0
- localstack/aws/api/s3/__init__.py +2 -0
- localstack/aws/api/s3control/__init__.py +19 -0
- localstack/aws/api/secretsmanager/__init__.py +9 -0
- localstack/aws/connect.py +35 -15
- localstack/config.py +8 -0
- localstack/constants.py +3 -0
- localstack/dev/kubernetes/__main__.py +39 -14
- localstack/runtime/analytics.py +11 -0
- localstack/services/acm/provider.py +13 -1
- localstack/services/cloudformation/engine/v2/change_set_model.py +9 -0
- localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +3 -1
- localstack/services/cloudformation/engine/v2/change_set_resource_support_checker.py +114 -0
- localstack/services/cloudformation/provider.py +26 -1
- localstack/services/cloudformation/provider_utils.py +20 -0
- localstack/services/cloudformation/resource_provider.py +5 -4
- localstack/services/cloudformation/scaffolding/__main__.py +94 -22
- localstack/services/cloudformation/v2/provider.py +41 -0
- localstack/services/kinesis/packages.py +1 -1
- localstack/services/kms/models.py +6 -2
- localstack/services/lambda_/analytics.py +11 -2
- localstack/services/lambda_/invocation/event_manager.py +15 -11
- localstack/services/lambda_/invocation/lambda_models.py +4 -0
- localstack/services/lambda_/invocation/lambda_service.py +11 -0
- localstack/services/lambda_/provider.py +70 -13
- localstack/services/opensearch/packages.py +34 -20
- localstack/services/route53/provider.py +7 -0
- localstack/services/route53resolver/provider.py +5 -0
- localstack/services/s3/constants.py +5 -0
- localstack/services/s3/exceptions.py +9 -0
- localstack/services/s3/models.py +9 -1
- localstack/services/s3/provider.py +25 -30
- localstack/services/s3/utils.py +46 -1
- localstack/services/s3control/provider.py +6 -0
- localstack/services/scheduler/provider.py +4 -2
- localstack/services/secretsmanager/provider.py +4 -0
- localstack/services/ses/provider.py +4 -0
- localstack/services/sns/constants.py +13 -0
- localstack/services/sns/provider.py +5 -0
- localstack/services/sns/v2/models.py +3 -0
- localstack/services/sns/v2/provider.py +100 -0
- localstack/services/sqs/constants.py +6 -0
- localstack/services/sqs/provider.py +9 -1
- localstack/services/sqs/resource_providers/aws_sqs_queue.py +61 -46
- localstack/services/ssm/provider.py +6 -0
- localstack/services/stepfunctions/asl/static_analyser/test_state/test_state_analyser.py +193 -107
- localstack/services/stepfunctions/backend/execution.py +4 -5
- localstack/services/stepfunctions/provider.py +21 -14
- localstack/services/sts/provider.py +7 -0
- localstack/services/support/provider.py +5 -1
- localstack/services/swf/provider.py +5 -1
- localstack/services/transcribe/provider.py +7 -0
- localstack/testing/aws/lambda_utils.py +1 -1
- localstack/testing/aws/util.py +2 -1
- localstack/testing/config.py +1 -0
- localstack/utils/aws/client_types.py +2 -4
- localstack/utils/bootstrap.py +2 -2
- localstack/utils/catalog/catalog.py +3 -2
- localstack/utils/container_utils/container_client.py +22 -13
- localstack/utils/container_utils/docker_cmd_client.py +6 -6
- localstack/version.py +2 -2
- {localstack_core-4.11.2.dev14.dist-info → localstack_core-4.12.1.dev18.dist-info}/METADATA +6 -6
- {localstack_core-4.11.2.dev14.dist-info → localstack_core-4.12.1.dev18.dist-info}/RECORD +76 -75
- localstack_core-4.12.1.dev18.dist-info/plux.json +1 -0
- localstack_core-4.11.2.dev14.dist-info/plux.json +0 -1
- {localstack_core-4.11.2.dev14.data → localstack_core-4.12.1.dev18.data}/scripts/localstack +0 -0
- {localstack_core-4.11.2.dev14.data → localstack_core-4.12.1.dev18.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.11.2.dev14.data → localstack_core-4.12.1.dev18.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.11.2.dev14.dist-info → localstack_core-4.12.1.dev18.dist-info}/WHEEL +0 -0
- {localstack_core-4.11.2.dev14.dist-info → localstack_core-4.12.1.dev18.dist-info}/entry_points.txt +0 -0
- {localstack_core-4.11.2.dev14.dist-info → localstack_core-4.12.1.dev18.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.11.2.dev14.dist-info → localstack_core-4.12.1.dev18.dist-info}/top_level.txt +0 -0
|
@@ -20,6 +20,9 @@ ClientToken = str
|
|
|
20
20
|
CollectionRetentionDays = int
|
|
21
21
|
Column = str
|
|
22
22
|
DataProtectionPolicyDocument = str
|
|
23
|
+
DataSourceName = str
|
|
24
|
+
DataSourceType = str
|
|
25
|
+
DataType = str
|
|
23
26
|
Days = int
|
|
24
27
|
DefaultValue = float
|
|
25
28
|
DeletionProtectionEnabled = bool
|
|
@@ -69,6 +72,8 @@ ForceUpdate = bool
|
|
|
69
72
|
FromKey = str
|
|
70
73
|
GetScheduledQueryHistoryMaxResults = int
|
|
71
74
|
GrokMatch = str
|
|
75
|
+
GroupingIdentifierKey = str
|
|
76
|
+
GroupingIdentifierValue = str
|
|
72
77
|
IncludeLinkedAccounts = bool
|
|
73
78
|
InferredTokenName = str
|
|
74
79
|
Integer = int
|
|
@@ -85,10 +90,14 @@ ListAnomaliesLimit = int
|
|
|
85
90
|
ListLimit = int
|
|
86
91
|
ListLogAnomalyDetectorsLimit = int
|
|
87
92
|
ListLogGroupsForQueryMaxResults = int
|
|
93
|
+
ListLogGroupsRequestLimit = int
|
|
88
94
|
ListScheduledQueriesMaxResults = int
|
|
95
|
+
ListSourcesForS3TableIntegrationMaxResults = int
|
|
89
96
|
Locale = str
|
|
90
97
|
LogEventIndex = int
|
|
98
|
+
LogFieldName = str
|
|
91
99
|
LogGroupArn = str
|
|
100
|
+
LogGroupCount = int
|
|
92
101
|
LogGroupIdentifier = str
|
|
93
102
|
LogGroupName = str
|
|
94
103
|
LogGroupNamePattern = str
|
|
@@ -133,6 +142,8 @@ RequestId = str
|
|
|
133
142
|
ResourceIdentifier = str
|
|
134
143
|
ResourceType = str
|
|
135
144
|
RoleArn = str
|
|
145
|
+
S3TableIntegrationSourceIdentifier = str
|
|
146
|
+
S3TableIntegrationSourceStatusReason = str
|
|
136
147
|
S3Uri = str
|
|
137
148
|
ScheduleExpression = str
|
|
138
149
|
ScheduleTimezone = str
|
|
@@ -257,6 +268,11 @@ class IndexSource(StrEnum):
|
|
|
257
268
|
LOG_GROUP = "LOG_GROUP"
|
|
258
269
|
|
|
259
270
|
|
|
271
|
+
class IndexType(StrEnum):
|
|
272
|
+
FACET = "FACET"
|
|
273
|
+
FIELD_INDEX = "FIELD_INDEX"
|
|
274
|
+
|
|
275
|
+
|
|
260
276
|
class InheritedProperty(StrEnum):
|
|
261
277
|
ACCOUNT_DATA_PROTECTION = "ACCOUNT_DATA_PROTECTION"
|
|
262
278
|
|
|
@@ -271,6 +287,11 @@ class IntegrationType(StrEnum):
|
|
|
271
287
|
OPENSEARCH = "OPENSEARCH"
|
|
272
288
|
|
|
273
289
|
|
|
290
|
+
class ListAggregateLogGroupSummariesGroupBy(StrEnum):
|
|
291
|
+
DATA_SOURCE_NAME_TYPE_AND_FORMAT = "DATA_SOURCE_NAME_TYPE_AND_FORMAT"
|
|
292
|
+
DATA_SOURCE_NAME_AND_TYPE = "DATA_SOURCE_NAME_AND_TYPE"
|
|
293
|
+
|
|
294
|
+
|
|
274
295
|
class LogGroupClass(StrEnum):
|
|
275
296
|
STANDARD = "STANDARD"
|
|
276
297
|
INFREQUENT_ACCESS = "INFREQUENT_ACCESS"
|
|
@@ -330,6 +351,13 @@ class QueryStatus(StrEnum):
|
|
|
330
351
|
Unknown = "Unknown"
|
|
331
352
|
|
|
332
353
|
|
|
354
|
+
class S3TableIntegrationSourceStatus(StrEnum):
|
|
355
|
+
ACTIVE = "ACTIVE"
|
|
356
|
+
UNHEALTHY = "UNHEALTHY"
|
|
357
|
+
FAILED = "FAILED"
|
|
358
|
+
DATA_SOURCE_DELETE_IN_PROGRESS = "DATA_SOURCE_DELETE_IN_PROGRESS"
|
|
359
|
+
|
|
360
|
+
|
|
333
361
|
class ScheduledQueryDestinationType(StrEnum):
|
|
334
362
|
S3 = "S3"
|
|
335
363
|
|
|
@@ -572,6 +600,20 @@ class AddKeys(TypedDict, total=False):
|
|
|
572
600
|
entries: AddKeyEntries
|
|
573
601
|
|
|
574
602
|
|
|
603
|
+
class GroupingIdentifier(TypedDict, total=False):
|
|
604
|
+
key: GroupingIdentifierKey | None
|
|
605
|
+
value: GroupingIdentifierValue | None
|
|
606
|
+
|
|
607
|
+
|
|
608
|
+
GroupingIdentifiers = list[GroupingIdentifier]
|
|
609
|
+
|
|
610
|
+
|
|
611
|
+
class AggregateLogGroupSummary(TypedDict, total=False):
|
|
612
|
+
logGroupCount: LogGroupCount | None
|
|
613
|
+
groupingIdentifiers: GroupingIdentifiers | None
|
|
614
|
+
|
|
615
|
+
|
|
616
|
+
AggregateLogGroupSummaries = list[AggregateLogGroupSummary]
|
|
575
617
|
AllowedFieldDelimiters = list[FieldDelimiter]
|
|
576
618
|
|
|
577
619
|
|
|
@@ -656,6 +698,20 @@ class AssociateKmsKeyRequest(ServiceRequest):
|
|
|
656
698
|
resourceIdentifier: ResourceIdentifier | None
|
|
657
699
|
|
|
658
700
|
|
|
701
|
+
class DataSource(TypedDict, total=False):
|
|
702
|
+
name: DataSourceName
|
|
703
|
+
type: DataSourceType | None
|
|
704
|
+
|
|
705
|
+
|
|
706
|
+
class AssociateSourceToS3TableIntegrationRequest(ServiceRequest):
|
|
707
|
+
integrationArn: Arn
|
|
708
|
+
dataSource: DataSource
|
|
709
|
+
|
|
710
|
+
|
|
711
|
+
class AssociateSourceToS3TableIntegrationResponse(TypedDict, total=False):
|
|
712
|
+
identifier: S3TableIntegrationSourceIdentifier | None
|
|
713
|
+
|
|
714
|
+
|
|
659
715
|
Columns = list[Column]
|
|
660
716
|
|
|
661
717
|
|
|
@@ -827,6 +883,14 @@ class CreateScheduledQueryResponse(TypedDict, total=False):
|
|
|
827
883
|
|
|
828
884
|
DashboardViewerPrincipals = list[Arn]
|
|
829
885
|
Data = bytes
|
|
886
|
+
|
|
887
|
+
|
|
888
|
+
class DataSourceFilter(TypedDict, total=False):
|
|
889
|
+
name: DataSourceName
|
|
890
|
+
type: DataSourceType | None
|
|
891
|
+
|
|
892
|
+
|
|
893
|
+
DataSourceFilters = list[DataSourceFilter]
|
|
830
894
|
MatchPatterns = list[MatchPattern]
|
|
831
895
|
|
|
832
896
|
|
|
@@ -1116,6 +1180,7 @@ class FieldIndex(TypedDict, total=False):
|
|
|
1116
1180
|
lastScanTime: Timestamp | None
|
|
1117
1181
|
firstEventTime: Timestamp | None
|
|
1118
1182
|
lastEventTime: Timestamp | None
|
|
1183
|
+
type: IndexType | None
|
|
1119
1184
|
|
|
1120
1185
|
|
|
1121
1186
|
FieldIndexes = list[FieldIndex]
|
|
@@ -1373,6 +1438,14 @@ class DisassociateKmsKeyRequest(ServiceRequest):
|
|
|
1373
1438
|
resourceIdentifier: ResourceIdentifier | None
|
|
1374
1439
|
|
|
1375
1440
|
|
|
1441
|
+
class DisassociateSourceFromS3TableIntegrationRequest(ServiceRequest):
|
|
1442
|
+
identifier: S3TableIntegrationSourceIdentifier
|
|
1443
|
+
|
|
1444
|
+
|
|
1445
|
+
class DisassociateSourceFromS3TableIntegrationResponse(TypedDict, total=False):
|
|
1446
|
+
identifier: S3TableIntegrationSourceIdentifier | None
|
|
1447
|
+
|
|
1448
|
+
|
|
1376
1449
|
EntityAttributes = dict[EntityAttributesKey, EntityAttributesValue]
|
|
1377
1450
|
EntityKeyAttributes = dict[EntityKeyAttributesKey, EntityKeyAttributesValue]
|
|
1378
1451
|
|
|
@@ -1385,6 +1458,7 @@ class Entity(TypedDict, total=False):
|
|
|
1385
1458
|
EventNumber = int
|
|
1386
1459
|
ExecutionStatusList = list[ExecutionStatus]
|
|
1387
1460
|
ExtractedValues = dict[Token, Value]
|
|
1461
|
+
FieldIndexNames = list[FieldIndexName]
|
|
1388
1462
|
|
|
1389
1463
|
|
|
1390
1464
|
class FieldsData(TypedDict, total=False):
|
|
@@ -1596,6 +1670,29 @@ class GetLogEventsResponse(TypedDict, total=False):
|
|
|
1596
1670
|
nextBackwardToken: NextToken | None
|
|
1597
1671
|
|
|
1598
1672
|
|
|
1673
|
+
class GetLogFieldsRequest(ServiceRequest):
|
|
1674
|
+
dataSourceName: DataSourceName
|
|
1675
|
+
dataSourceType: DataSourceType
|
|
1676
|
+
|
|
1677
|
+
|
|
1678
|
+
LogFieldsList = list["LogFieldsListItem"]
|
|
1679
|
+
|
|
1680
|
+
|
|
1681
|
+
class LogFieldType(TypedDict, total=False):
|
|
1682
|
+
type: "DataType | None"
|
|
1683
|
+
element: "LogFieldType | None"
|
|
1684
|
+
fields: "LogFieldsList | None"
|
|
1685
|
+
|
|
1686
|
+
|
|
1687
|
+
class LogFieldsListItem(TypedDict, total=False):
|
|
1688
|
+
logFieldName: LogFieldName | None
|
|
1689
|
+
logFieldType: LogFieldType | None
|
|
1690
|
+
|
|
1691
|
+
|
|
1692
|
+
class GetLogFieldsResponse(TypedDict, total=False):
|
|
1693
|
+
logFields: LogFieldsList | None
|
|
1694
|
+
|
|
1695
|
+
|
|
1599
1696
|
class GetLogGroupFieldsRequest(ServiceRequest):
|
|
1600
1697
|
logGroupName: LogGroupName | None
|
|
1601
1698
|
time: Timestamp | None
|
|
@@ -1933,6 +2030,22 @@ class IntegrationSummary(TypedDict, total=False):
|
|
|
1933
2030
|
IntegrationSummaries = list[IntegrationSummary]
|
|
1934
2031
|
|
|
1935
2032
|
|
|
2033
|
+
class ListAggregateLogGroupSummariesRequest(ServiceRequest):
|
|
2034
|
+
accountIdentifiers: AccountIds | None
|
|
2035
|
+
includeLinkedAccounts: IncludeLinkedAccounts | None
|
|
2036
|
+
logGroupClass: LogGroupClass | None
|
|
2037
|
+
logGroupNamePattern: LogGroupNameRegexPattern | None
|
|
2038
|
+
dataSources: DataSourceFilters | None
|
|
2039
|
+
groupBy: ListAggregateLogGroupSummariesGroupBy
|
|
2040
|
+
nextToken: NextToken | None
|
|
2041
|
+
limit: ListLogGroupsRequestLimit | None
|
|
2042
|
+
|
|
2043
|
+
|
|
2044
|
+
class ListAggregateLogGroupSummariesResponse(TypedDict, total=False):
|
|
2045
|
+
aggregateLogGroupSummaries: AggregateLogGroupSummaries | None
|
|
2046
|
+
nextToken: NextToken | None
|
|
2047
|
+
|
|
2048
|
+
|
|
1936
2049
|
class ListAnomaliesRequest(ServiceRequest):
|
|
1937
2050
|
anomalyDetectorArn: AnomalyDetectorArn | None
|
|
1938
2051
|
suppressionState: SuppressionState | None
|
|
@@ -1987,6 +2100,8 @@ class ListLogGroupsRequest(ServiceRequest):
|
|
|
1987
2100
|
accountIdentifiers: AccountIds | None
|
|
1988
2101
|
nextToken: NextToken | None
|
|
1989
2102
|
limit: ListLimit | None
|
|
2103
|
+
dataSources: DataSourceFilters | None
|
|
2104
|
+
fieldIndexNames: FieldIndexNames | None
|
|
1990
2105
|
|
|
1991
2106
|
|
|
1992
2107
|
class LogGroupSummary(TypedDict, total=False):
|
|
@@ -2030,6 +2145,28 @@ class ListScheduledQueriesResponse(TypedDict, total=False):
|
|
|
2030
2145
|
scheduledQueries: ScheduledQuerySummaryList | None
|
|
2031
2146
|
|
|
2032
2147
|
|
|
2148
|
+
class ListSourcesForS3TableIntegrationRequest(ServiceRequest):
|
|
2149
|
+
integrationArn: Arn
|
|
2150
|
+
maxResults: ListSourcesForS3TableIntegrationMaxResults | None
|
|
2151
|
+
nextToken: NextToken | None
|
|
2152
|
+
|
|
2153
|
+
|
|
2154
|
+
class S3TableIntegrationSource(TypedDict, total=False):
|
|
2155
|
+
identifier: S3TableIntegrationSourceIdentifier | None
|
|
2156
|
+
dataSource: DataSource | None
|
|
2157
|
+
status: S3TableIntegrationSourceStatus | None
|
|
2158
|
+
statusReason: S3TableIntegrationSourceStatusReason | None
|
|
2159
|
+
createdTimeStamp: Timestamp | None
|
|
2160
|
+
|
|
2161
|
+
|
|
2162
|
+
S3TableIntegrationSources = list[S3TableIntegrationSource]
|
|
2163
|
+
|
|
2164
|
+
|
|
2165
|
+
class ListSourcesForS3TableIntegrationResponse(TypedDict, total=False):
|
|
2166
|
+
sources: S3TableIntegrationSources | None
|
|
2167
|
+
nextToken: NextToken | None
|
|
2168
|
+
|
|
2169
|
+
|
|
2033
2170
|
class ListTagsForResourceRequest(ServiceRequest):
|
|
2034
2171
|
resourceArn: AmazonResourceName
|
|
2035
2172
|
|
|
@@ -2455,6 +2592,12 @@ class LogsApi:
|
|
|
2455
2592
|
) -> None:
|
|
2456
2593
|
raise NotImplementedError
|
|
2457
2594
|
|
|
2595
|
+
@handler("AssociateSourceToS3TableIntegration")
|
|
2596
|
+
def associate_source_to_s3_table_integration(
|
|
2597
|
+
self, context: RequestContext, integration_arn: Arn, data_source: DataSource, **kwargs
|
|
2598
|
+
) -> AssociateSourceToS3TableIntegrationResponse:
|
|
2599
|
+
raise NotImplementedError
|
|
2600
|
+
|
|
2458
2601
|
@handler("CancelExportTask")
|
|
2459
2602
|
def cancel_export_task(self, context: RequestContext, task_id: ExportTaskId, **kwargs) -> None:
|
|
2460
2603
|
raise NotImplementedError
|
|
@@ -2875,6 +3018,12 @@ class LogsApi:
|
|
|
2875
3018
|
) -> None:
|
|
2876
3019
|
raise NotImplementedError
|
|
2877
3020
|
|
|
3021
|
+
@handler("DisassociateSourceFromS3TableIntegration")
|
|
3022
|
+
def disassociate_source_from_s3_table_integration(
|
|
3023
|
+
self, context: RequestContext, identifier: S3TableIntegrationSourceIdentifier, **kwargs
|
|
3024
|
+
) -> DisassociateSourceFromS3TableIntegrationResponse:
|
|
3025
|
+
raise NotImplementedError
|
|
3026
|
+
|
|
2878
3027
|
@handler("FilterLogEvents")
|
|
2879
3028
|
def filter_log_events(
|
|
2880
3029
|
self,
|
|
@@ -2953,6 +3102,16 @@ class LogsApi:
|
|
|
2953
3102
|
) -> GetLogEventsResponse:
|
|
2954
3103
|
raise NotImplementedError
|
|
2955
3104
|
|
|
3105
|
+
@handler("GetLogFields")
|
|
3106
|
+
def get_log_fields(
|
|
3107
|
+
self,
|
|
3108
|
+
context: RequestContext,
|
|
3109
|
+
data_source_name: DataSourceName,
|
|
3110
|
+
data_source_type: DataSourceType,
|
|
3111
|
+
**kwargs,
|
|
3112
|
+
) -> GetLogFieldsResponse:
|
|
3113
|
+
raise NotImplementedError
|
|
3114
|
+
|
|
2956
3115
|
@handler("GetLogGroupFields")
|
|
2957
3116
|
def get_log_group_fields(
|
|
2958
3117
|
self,
|
|
@@ -3016,6 +3175,22 @@ class LogsApi:
|
|
|
3016
3175
|
) -> GetTransformerResponse:
|
|
3017
3176
|
raise NotImplementedError
|
|
3018
3177
|
|
|
3178
|
+
@handler("ListAggregateLogGroupSummaries")
|
|
3179
|
+
def list_aggregate_log_group_summaries(
|
|
3180
|
+
self,
|
|
3181
|
+
context: RequestContext,
|
|
3182
|
+
group_by: ListAggregateLogGroupSummariesGroupBy,
|
|
3183
|
+
account_identifiers: AccountIds | None = None,
|
|
3184
|
+
include_linked_accounts: IncludeLinkedAccounts | None = None,
|
|
3185
|
+
log_group_class: LogGroupClass | None = None,
|
|
3186
|
+
log_group_name_pattern: LogGroupNameRegexPattern | None = None,
|
|
3187
|
+
data_sources: DataSourceFilters | None = None,
|
|
3188
|
+
next_token: NextToken | None = None,
|
|
3189
|
+
limit: ListLogGroupsRequestLimit | None = None,
|
|
3190
|
+
**kwargs,
|
|
3191
|
+
) -> ListAggregateLogGroupSummariesResponse:
|
|
3192
|
+
raise NotImplementedError
|
|
3193
|
+
|
|
3019
3194
|
@handler("ListAnomalies")
|
|
3020
3195
|
def list_anomalies(
|
|
3021
3196
|
self,
|
|
@@ -3060,6 +3235,8 @@ class LogsApi:
|
|
|
3060
3235
|
account_identifiers: AccountIds | None = None,
|
|
3061
3236
|
next_token: NextToken | None = None,
|
|
3062
3237
|
limit: ListLimit | None = None,
|
|
3238
|
+
data_sources: DataSourceFilters | None = None,
|
|
3239
|
+
field_index_names: FieldIndexNames | None = None,
|
|
3063
3240
|
**kwargs,
|
|
3064
3241
|
) -> ListLogGroupsResponse:
|
|
3065
3242
|
raise NotImplementedError
|
|
@@ -3086,6 +3263,17 @@ class LogsApi:
|
|
|
3086
3263
|
) -> ListScheduledQueriesResponse:
|
|
3087
3264
|
raise NotImplementedError
|
|
3088
3265
|
|
|
3266
|
+
@handler("ListSourcesForS3TableIntegration")
|
|
3267
|
+
def list_sources_for_s3_table_integration(
|
|
3268
|
+
self,
|
|
3269
|
+
context: RequestContext,
|
|
3270
|
+
integration_arn: Arn,
|
|
3271
|
+
max_results: ListSourcesForS3TableIntegrationMaxResults | None = None,
|
|
3272
|
+
next_token: NextToken | None = None,
|
|
3273
|
+
**kwargs,
|
|
3274
|
+
) -> ListSourcesForS3TableIntegrationResponse:
|
|
3275
|
+
raise NotImplementedError
|
|
3276
|
+
|
|
3089
3277
|
@handler("ListTagsForResource")
|
|
3090
3278
|
def list_tags_for_resource(
|
|
3091
3279
|
self, context: RequestContext, resource_arn: AmazonResourceName, **kwargs
|
|
@@ -53,6 +53,7 @@ InstanceTypeString = str
|
|
|
53
53
|
Integer = int
|
|
54
54
|
IntegerClass = int
|
|
55
55
|
Issue = str
|
|
56
|
+
KmsKeyArn = str
|
|
56
57
|
KmsKeyId = str
|
|
57
58
|
LicenseFilepath = str
|
|
58
59
|
LimitName = str
|
|
@@ -698,6 +699,10 @@ class ValidationException(ServiceException):
|
|
|
698
699
|
status_code: int = 400
|
|
699
700
|
|
|
700
701
|
|
|
702
|
+
class ServerlessVectorAcceleration(TypedDict, total=False):
|
|
703
|
+
Enabled: Boolean | None
|
|
704
|
+
|
|
705
|
+
|
|
701
706
|
class S3VectorsEngine(TypedDict, total=False):
|
|
702
707
|
Enabled: Boolean | None
|
|
703
708
|
|
|
@@ -709,6 +714,7 @@ class NaturalLanguageQueryGenerationOptionsInput(TypedDict, total=False):
|
|
|
709
714
|
class AIMLOptionsInput(TypedDict, total=False):
|
|
710
715
|
NaturalLanguageQueryGenerationOptions: NaturalLanguageQueryGenerationOptionsInput | None
|
|
711
716
|
S3VectorsEngine: S3VectorsEngine | None
|
|
717
|
+
ServerlessVectorAcceleration: ServerlessVectorAcceleration | None
|
|
712
718
|
|
|
713
719
|
|
|
714
720
|
class NaturalLanguageQueryGenerationOptionsOutput(TypedDict, total=False):
|
|
@@ -719,6 +725,7 @@ class NaturalLanguageQueryGenerationOptionsOutput(TypedDict, total=False):
|
|
|
719
725
|
class AIMLOptionsOutput(TypedDict, total=False):
|
|
720
726
|
NaturalLanguageQueryGenerationOptions: NaturalLanguageQueryGenerationOptionsOutput | None
|
|
721
727
|
S3VectorsEngine: S3VectorsEngine | None
|
|
728
|
+
ServerlessVectorAcceleration: ServerlessVectorAcceleration | None
|
|
722
729
|
|
|
723
730
|
|
|
724
731
|
UpdateTimestamp = datetime
|
|
@@ -1294,6 +1301,7 @@ class CreateApplicationRequest(ServiceRequest):
|
|
|
1294
1301
|
iamIdentityCenterOptions: IamIdentityCenterOptionsInput | None
|
|
1295
1302
|
appConfigs: AppConfigs | None
|
|
1296
1303
|
tagList: TagList | None
|
|
1304
|
+
kmsKeyArn: KmsKeyArn | None
|
|
1297
1305
|
|
|
1298
1306
|
|
|
1299
1307
|
class IamIdentityCenterOptions(TypedDict, total=False):
|
|
@@ -1312,6 +1320,7 @@ class CreateApplicationResponse(TypedDict, total=False):
|
|
|
1312
1320
|
appConfigs: AppConfigs | None
|
|
1313
1321
|
tagList: TagList | None
|
|
1314
1322
|
createdAt: Timestamp | None
|
|
1323
|
+
kmsKeyArn: KmsKeyArn | None
|
|
1315
1324
|
|
|
1316
1325
|
|
|
1317
1326
|
class SoftwareUpdateOptions(TypedDict, total=False):
|
|
@@ -2180,6 +2189,7 @@ class GetApplicationResponse(TypedDict, total=False):
|
|
|
2180
2189
|
appConfigs: AppConfigs | None
|
|
2181
2190
|
createdAt: Timestamp | None
|
|
2182
2191
|
lastUpdatedAt: Timestamp | None
|
|
2192
|
+
kmsKeyArn: KmsKeyArn | None
|
|
2183
2193
|
|
|
2184
2194
|
|
|
2185
2195
|
class GetCompatibleVersionsRequest(ServiceRequest):
|
|
@@ -2794,6 +2804,7 @@ class OpensearchApi:
|
|
|
2794
2804
|
iam_identity_center_options: IamIdentityCenterOptionsInput | None = None,
|
|
2795
2805
|
app_configs: AppConfigs | None = None,
|
|
2796
2806
|
tag_list: TagList | None = None,
|
|
2807
|
+
kms_key_arn: KmsKeyArn | None = None,
|
|
2797
2808
|
**kwargs,
|
|
2798
2809
|
) -> CreateApplicationResponse:
|
|
2799
2810
|
raise NotImplementedError
|
|
@@ -181,6 +181,7 @@ class CloudWatchRegion(StrEnum):
|
|
|
181
181
|
eu_isoe_west_1 = "eu-isoe-west-1"
|
|
182
182
|
ap_southeast_6 = "ap-southeast-6"
|
|
183
183
|
us_isob_west_1 = "us-isob-west-1"
|
|
184
|
+
eusc_de_east_1 = "eusc-de-east-1"
|
|
184
185
|
|
|
185
186
|
|
|
186
187
|
class ComparisonOperator(StrEnum):
|
|
@@ -298,6 +299,7 @@ class ResourceRecordSetRegion(StrEnum):
|
|
|
298
299
|
us_gov_west_1 = "us-gov-west-1"
|
|
299
300
|
ap_east_2 = "ap-east-2"
|
|
300
301
|
ap_southeast_6 = "ap-southeast-6"
|
|
302
|
+
eusc_de_east_1 = "eusc-de-east-1"
|
|
301
303
|
|
|
302
304
|
|
|
303
305
|
class ReusableDelegationSetLimitType(StrEnum):
|
|
@@ -363,6 +365,7 @@ class VPCRegion(StrEnum):
|
|
|
363
365
|
eu_isoe_west_1 = "eu-isoe-west-1"
|
|
364
366
|
ap_southeast_6 = "ap-southeast-6"
|
|
365
367
|
us_isob_west_1 = "us-isob-west-1"
|
|
368
|
+
eusc_de_east_1 = "eusc-de-east-1"
|
|
366
369
|
|
|
367
370
|
|
|
368
371
|
class CidrBlockInUseException(ServiceException):
|
|
@@ -520,6 +520,7 @@ class ObjectStorageClass(StrEnum):
|
|
|
520
520
|
SNOW = "SNOW"
|
|
521
521
|
EXPRESS_ONEZONE = "EXPRESS_ONEZONE"
|
|
522
522
|
FSX_OPENZFS = "FSX_OPENZFS"
|
|
523
|
+
FSX_ONTAP = "FSX_ONTAP"
|
|
523
524
|
|
|
524
525
|
|
|
525
526
|
class ObjectVersionStorageClass(StrEnum):
|
|
@@ -632,6 +633,7 @@ class StorageClass(StrEnum):
|
|
|
632
633
|
SNOW = "SNOW"
|
|
633
634
|
EXPRESS_ONEZONE = "EXPRESS_ONEZONE"
|
|
634
635
|
FSX_OPENZFS = "FSX_OPENZFS"
|
|
636
|
+
FSX_ONTAP = "FSX_ONTAP"
|
|
635
637
|
|
|
636
638
|
|
|
637
639
|
class StorageClassAnalysisSchemaVersion(StrEnum):
|
|
@@ -608,6 +608,10 @@ class StorageLensGroupLevel(TypedDict, total=False):
|
|
|
608
608
|
SelectionCriteria: StorageLensGroupLevelSelectionCriteria | None
|
|
609
609
|
|
|
610
610
|
|
|
611
|
+
class AdvancedPerformanceMetrics(TypedDict, total=False):
|
|
612
|
+
IsEnabled: IsEnabled | None
|
|
613
|
+
|
|
614
|
+
|
|
611
615
|
class DetailedStatusCodesMetrics(TypedDict, total=False):
|
|
612
616
|
IsEnabled: IsEnabled | None
|
|
613
617
|
|
|
@@ -645,6 +649,7 @@ class BucketLevel(TypedDict, total=False):
|
|
|
645
649
|
AdvancedCostOptimizationMetrics: AdvancedCostOptimizationMetrics | None
|
|
646
650
|
AdvancedDataProtectionMetrics: AdvancedDataProtectionMetrics | None
|
|
647
651
|
DetailedStatusCodesMetrics: DetailedStatusCodesMetrics | None
|
|
652
|
+
AdvancedPerformanceMetrics: AdvancedPerformanceMetrics | None
|
|
648
653
|
|
|
649
654
|
|
|
650
655
|
class AccountLevel(TypedDict, total=False):
|
|
@@ -653,6 +658,7 @@ class AccountLevel(TypedDict, total=False):
|
|
|
653
658
|
AdvancedCostOptimizationMetrics: AdvancedCostOptimizationMetrics | None
|
|
654
659
|
AdvancedDataProtectionMetrics: AdvancedDataProtectionMetrics | None
|
|
655
660
|
DetailedStatusCodesMetrics: DetailedStatusCodesMetrics | None
|
|
661
|
+
AdvancedPerformanceMetrics: AdvancedPerformanceMetrics | None
|
|
656
662
|
StorageLensGroupLevel: StorageLensGroupLevel | None
|
|
657
663
|
|
|
658
664
|
|
|
@@ -1944,6 +1950,11 @@ class StorageLensDataExportEncryption(TypedDict, total=False):
|
|
|
1944
1950
|
SSEKMS: SSEKMS | None
|
|
1945
1951
|
|
|
1946
1952
|
|
|
1953
|
+
class StorageLensTableDestination(TypedDict, total=False):
|
|
1954
|
+
IsEnabled: IsEnabled
|
|
1955
|
+
Encryption: StorageLensDataExportEncryption | None
|
|
1956
|
+
|
|
1957
|
+
|
|
1947
1958
|
class S3BucketDestination(TypedDict, total=False):
|
|
1948
1959
|
Format: Format
|
|
1949
1960
|
OutputSchemaVersion: OutputSchemaVersion
|
|
@@ -1953,9 +1964,15 @@ class S3BucketDestination(TypedDict, total=False):
|
|
|
1953
1964
|
Encryption: StorageLensDataExportEncryption | None
|
|
1954
1965
|
|
|
1955
1966
|
|
|
1967
|
+
class StorageLensExpandedPrefixesDataExport(TypedDict, total=False):
|
|
1968
|
+
S3BucketDestination: S3BucketDestination | None
|
|
1969
|
+
StorageLensTableDestination: StorageLensTableDestination | None
|
|
1970
|
+
|
|
1971
|
+
|
|
1956
1972
|
class StorageLensDataExport(TypedDict, total=False):
|
|
1957
1973
|
S3BucketDestination: S3BucketDestination | None
|
|
1958
1974
|
CloudWatchMetrics: CloudWatchMetrics | None
|
|
1975
|
+
StorageLensTableDestination: StorageLensTableDestination | None
|
|
1959
1976
|
|
|
1960
1977
|
|
|
1961
1978
|
class Include(TypedDict, total=False):
|
|
@@ -1969,9 +1986,11 @@ class StorageLensConfiguration(TypedDict, total=False):
|
|
|
1969
1986
|
Include: Include | None
|
|
1970
1987
|
Exclude: Exclude | None
|
|
1971
1988
|
DataExport: StorageLensDataExport | None
|
|
1989
|
+
ExpandedPrefixesDataExport: StorageLensExpandedPrefixesDataExport | None
|
|
1972
1990
|
IsEnabled: IsEnabled
|
|
1973
1991
|
AwsOrg: StorageLensAwsOrg | None
|
|
1974
1992
|
StorageLensArn: StorageLensArn | None
|
|
1993
|
+
PrefixDelimiter: StorageLensPrefixLevelDelimiter | None
|
|
1975
1994
|
|
|
1976
1995
|
|
|
1977
1996
|
class GetStorageLensConfigurationResult(TypedDict, total=False):
|
|
@@ -56,6 +56,13 @@ class FilterNameStringType(StrEnum):
|
|
|
56
56
|
all = "all"
|
|
57
57
|
|
|
58
58
|
|
|
59
|
+
class SortByType(StrEnum):
|
|
60
|
+
created_date = "created-date"
|
|
61
|
+
last_accessed_date = "last-accessed-date"
|
|
62
|
+
last_changed_date = "last-changed-date"
|
|
63
|
+
name = "name"
|
|
64
|
+
|
|
65
|
+
|
|
59
66
|
class SortOrderType(StrEnum):
|
|
60
67
|
asc = "asc"
|
|
61
68
|
desc = "desc"
|
|
@@ -407,6 +414,7 @@ class ListSecretsRequest(ServiceRequest):
|
|
|
407
414
|
NextToken: NextTokenType | None
|
|
408
415
|
Filters: FiltersListType | None
|
|
409
416
|
SortOrder: SortOrderType | None
|
|
417
|
+
SortBy: SortByType | None
|
|
410
418
|
|
|
411
419
|
|
|
412
420
|
class SecretListEntry(TypedDict, total=False):
|
|
@@ -688,6 +696,7 @@ class SecretsmanagerApi:
|
|
|
688
696
|
next_token: NextTokenType | None = None,
|
|
689
697
|
filters: FiltersListType | None = None,
|
|
690
698
|
sort_order: SortOrderType | None = None,
|
|
699
|
+
sort_by: SortByType | None = None,
|
|
691
700
|
**kwargs,
|
|
692
701
|
) -> ListSecretsResponse:
|
|
693
702
|
raise NotImplementedError
|
localstack/aws/connect.py
CHANGED
|
@@ -7,6 +7,7 @@ LocalStack providers.
|
|
|
7
7
|
|
|
8
8
|
import json
|
|
9
9
|
import logging
|
|
10
|
+
import os
|
|
10
11
|
import re
|
|
11
12
|
import threading
|
|
12
13
|
from abc import ABC, abstractmethod
|
|
@@ -250,9 +251,10 @@ class ClientFactory(ABC):
|
|
|
250
251
|
def __init__(
|
|
251
252
|
self,
|
|
252
253
|
use_ssl: bool = False,
|
|
253
|
-
verify: bool = False,
|
|
254
|
+
verify: bool | str = False,
|
|
254
255
|
session: Session = None,
|
|
255
256
|
config: Config = None,
|
|
257
|
+
endpoint: str = None,
|
|
256
258
|
):
|
|
257
259
|
"""
|
|
258
260
|
:param use_ssl: Whether to use SSL
|
|
@@ -268,6 +270,7 @@ class ClientFactory(ABC):
|
|
|
268
270
|
self._verify = verify
|
|
269
271
|
self._config: Config = config or Config(max_pool_connections=MAX_POOL_CONNECTIONS)
|
|
270
272
|
self._session: Session = session or Session()
|
|
273
|
+
self._endpoint = endpoint
|
|
271
274
|
|
|
272
275
|
# make sure we consider our custom data paths for legacy specs (like SQS query protocol)
|
|
273
276
|
if LOCALSTACK_BUILTIN_DATA_PATH not in self._session._loader.search_paths:
|
|
@@ -514,10 +517,13 @@ class InternalClientFactory(ClientFactory):
|
|
|
514
517
|
else:
|
|
515
518
|
config = self._config.merge(config)
|
|
516
519
|
|
|
517
|
-
endpoint_url = endpoint_url or get_service_endpoint()
|
|
518
|
-
if
|
|
519
|
-
|
|
520
|
-
|
|
520
|
+
endpoint_url = endpoint_url or self._endpoint or get_service_endpoint()
|
|
521
|
+
if (
|
|
522
|
+
endpoint_url
|
|
523
|
+
and service_name == "s3"
|
|
524
|
+
and re.match(r"https?://localhost(:[0-9]+)?", endpoint_url)
|
|
525
|
+
):
|
|
526
|
+
endpoint_url = endpoint_url.replace("://localhost", f"://{get_s3_hostname()}")
|
|
521
527
|
|
|
522
528
|
return self._get_client(
|
|
523
529
|
service_name=service_name,
|
|
@@ -574,14 +580,20 @@ class ExternalClientFactory(ClientFactory):
|
|
|
574
580
|
# If the region in arg is non-default, it gives the arg the precedence
|
|
575
581
|
# But if the region in arg is default (us-east-1), it gives precedence to one in config
|
|
576
582
|
# Below: always give precedence to arg region
|
|
577
|
-
if
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
583
|
+
if (
|
|
584
|
+
config
|
|
585
|
+
and config.region_name != AWS_REGION_US_EAST_1
|
|
586
|
+
and region_name == AWS_REGION_US_EAST_1
|
|
587
|
+
):
|
|
588
|
+
config = config.merge(Config(region_name=region_name))
|
|
589
|
+
|
|
590
|
+
endpoint_url = endpoint_url or self._endpoint or get_service_endpoint()
|
|
591
|
+
if (
|
|
592
|
+
endpoint_url
|
|
593
|
+
and service_name == "s3"
|
|
594
|
+
and re.match(r"https?://localhost(:[0-9]+)?", endpoint_url)
|
|
595
|
+
):
|
|
596
|
+
endpoint_url = endpoint_url.replace("://localhost", f"://{get_s3_hostname()}")
|
|
585
597
|
|
|
586
598
|
# Prevent `PartialCredentialsError` when only access key ID is provided
|
|
587
599
|
# The value of secret access key is insignificant and can be set to anything
|
|
@@ -683,11 +695,19 @@ class ExternalBypassDnsClientFactory(ExternalAwsClientFactory):
|
|
|
683
695
|
session: Session = None,
|
|
684
696
|
config: Config = None,
|
|
685
697
|
):
|
|
686
|
-
|
|
698
|
+
if ca_cert := os.getenv("REQUESTS_CA_BUNDLE"):
|
|
699
|
+
LOG.debug("Creating External AWS Client with REQUESTS_CA_BUNDLE=%s", ca_cert)
|
|
700
|
+
|
|
701
|
+
super().__init__(
|
|
702
|
+
use_ssl=localstack_config.is_env_not_false("USE_SSL"),
|
|
703
|
+
verify=ca_cert or True,
|
|
704
|
+
session=session,
|
|
705
|
+
config=config,
|
|
706
|
+
)
|
|
687
707
|
|
|
688
708
|
def _get_client_post_hook(self, client: BaseClient) -> BaseClient:
|
|
689
709
|
client = super()._get_client_post_hook(client)
|
|
690
|
-
client._endpoint.http_session = ExternalBypassDnsSession()
|
|
710
|
+
client._endpoint.http_session = ExternalBypassDnsSession(verify=self._verify)
|
|
691
711
|
return client
|
|
692
712
|
|
|
693
713
|
|
localstack/config.py
CHANGED
|
@@ -225,6 +225,11 @@ def parse_boolean_env(env_var_name: str) -> bool | None:
|
|
|
225
225
|
return None
|
|
226
226
|
|
|
227
227
|
|
|
228
|
+
def parse_comma_separated_list(env_var_name: str) -> list[str]:
|
|
229
|
+
"""Parse a comma separated list from the given environment variable."""
|
|
230
|
+
return os.environ.get(env_var_name, "").strip().split(",")
|
|
231
|
+
|
|
232
|
+
|
|
228
233
|
def is_env_true(env_var_name: str) -> bool:
|
|
229
234
|
"""Whether the given environment variable has a truthy value."""
|
|
230
235
|
return os.environ.get(env_var_name, "").lower().strip() in TRUE_STRINGS
|
|
@@ -1211,6 +1216,9 @@ CFN_PER_RESOURCE_TIMEOUT = int(os.environ.get("CFN_PER_RESOURCE_TIMEOUT") or 300
|
|
|
1211
1216
|
# EXPERIMENTAL
|
|
1212
1217
|
CFN_IGNORE_UNSUPPORTED_RESOURCE_TYPES = is_env_not_false("CFN_IGNORE_UNSUPPORTED_RESOURCE_TYPES")
|
|
1213
1218
|
|
|
1219
|
+
# Decrease the waiting time for resource deployment
|
|
1220
|
+
CFN_NO_WAIT_ITERATIONS: str | int | None = os.environ.get("CFN_NO_WAIT_ITERATIONS")
|
|
1221
|
+
|
|
1214
1222
|
# bind address of local DNS server
|
|
1215
1223
|
DNS_ADDRESS = os.environ.get("DNS_ADDRESS") or "0.0.0.0"
|
|
1216
1224
|
# port of the local DNS server
|
localstack/constants.py
CHANGED
|
@@ -117,6 +117,9 @@ LOCALSTACK_INFRA_PROCESS = "LOCALSTACK_INFRA_PROCESS"
|
|
|
117
117
|
# AWS region us-east-1
|
|
118
118
|
AWS_REGION_US_EAST_1 = "us-east-1"
|
|
119
119
|
|
|
120
|
+
# AWS region eu-west-1
|
|
121
|
+
AWS_REGION_EU_WEST_1 = "eu-west-1"
|
|
122
|
+
|
|
120
123
|
# environment variable to override max pool connections
|
|
121
124
|
try:
|
|
122
125
|
MAX_POOL_CONNECTIONS = int(os.environ["MAX_POOL_CONNECTIONS"])
|