localstack-core 4.7.1.dev139__py3-none-any.whl → 4.10.1.dev42__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/acm/__init__.py +122 -122
- localstack/aws/api/apigateway/__init__.py +560 -559
- localstack/aws/api/cloudcontrol/__init__.py +63 -63
- localstack/aws/api/cloudformation/__init__.py +1041 -969
- localstack/aws/api/cloudwatch/__init__.py +408 -368
- localstack/aws/api/config/__init__.py +788 -786
- localstack/aws/api/core.py +4 -0
- localstack/aws/api/dynamodb/__init__.py +753 -759
- localstack/aws/api/dynamodbstreams/__init__.py +74 -74
- localstack/aws/api/ec2/__init__.py +9713 -8573
- localstack/aws/api/es/__init__.py +453 -453
- localstack/aws/api/events/__init__.py +552 -552
- localstack/aws/api/firehose/__init__.py +541 -543
- localstack/aws/api/iam/__init__.py +646 -572
- localstack/aws/api/kinesis/__init__.py +251 -144
- localstack/aws/api/kms/__init__.py +343 -333
- localstack/aws/api/lambda_/__init__.py +585 -571
- localstack/aws/api/logs/__init__.py +682 -666
- localstack/aws/api/opensearch/__init__.py +814 -785
- localstack/aws/api/pipes/__init__.py +336 -336
- localstack/aws/api/redshift/__init__.py +1192 -1164
- localstack/aws/api/resource_groups/__init__.py +175 -175
- localstack/aws/api/resourcegroupstaggingapi/__init__.py +67 -67
- localstack/aws/api/route53/__init__.py +256 -254
- localstack/aws/api/route53resolver/__init__.py +396 -396
- localstack/aws/api/s3/__init__.py +1358 -1345
- localstack/aws/api/s3control/__init__.py +616 -584
- localstack/aws/api/scheduler/__init__.py +118 -118
- localstack/aws/api/secretsmanager/__init__.py +193 -193
- localstack/aws/api/ses/__init__.py +227 -227
- localstack/aws/api/sns/__init__.py +115 -115
- localstack/aws/api/sqs/__init__.py +100 -100
- localstack/aws/api/ssm/__init__.py +1978 -1970
- localstack/aws/api/stepfunctions/__init__.py +323 -323
- localstack/aws/api/sts/__init__.py +90 -66
- localstack/aws/api/support/__init__.py +112 -112
- localstack/aws/api/swf/__init__.py +378 -386
- localstack/aws/api/transcribe/__init__.py +425 -425
- localstack/aws/client.py +7 -2
- localstack/aws/forwarder.py +52 -5
- localstack/aws/handlers/analytics.py +1 -1
- localstack/aws/handlers/logging.py +12 -2
- localstack/aws/handlers/metric_handler.py +41 -1
- localstack/aws/handlers/service.py +43 -10
- localstack/aws/protocol/parser.py +440 -21
- localstack/aws/protocol/serializer.py +684 -64
- localstack/aws/protocol/service_router.py +120 -20
- localstack/aws/scaffold.py +15 -17
- localstack/aws/skeleton.py +4 -2
- localstack/aws/spec-patches.json +58 -0
- localstack/aws/spec.py +33 -13
- localstack/cli/exceptions.py +1 -1
- localstack/cli/localstack.py +10 -5
- localstack/cli/lpm.py +3 -4
- localstack/cli/profiles.py +1 -2
- localstack/config.py +18 -12
- localstack/constants.py +4 -29
- localstack/dev/kubernetes/__main__.py +39 -4
- localstack/dev/run/paths.py +1 -1
- localstack/dns/plugins.py +5 -1
- localstack/dns/server.py +12 -3
- localstack/packages/api.py +9 -8
- localstack/packages/core.py +2 -2
- localstack/packages/plugins.py +0 -8
- localstack/runtime/init.py +1 -1
- localstack/services/apigateway/helpers.py +5 -9
- localstack/services/apigateway/legacy/provider.py +85 -12
- localstack/services/apigateway/next_gen/execute_api/integrations/aws.py +3 -0
- localstack/services/apigateway/next_gen/execute_api/integrations/http.py +3 -3
- localstack/services/apigateway/next_gen/execute_api/test_invoke.py +50 -6
- localstack/services/apigateway/next_gen/provider.py +5 -0
- localstack/services/apigateway/patches.py +0 -9
- localstack/services/cloudformation/engine/entities.py +12 -1
- localstack/services/cloudformation/engine/v2/change_set_model.py +0 -3
- localstack/services/cloudformation/engine/v2/change_set_model_describer.py +14 -0
- localstack/services/cloudformation/engine/v2/change_set_model_executor.py +13 -15
- localstack/services/cloudformation/engine/v2/change_set_model_preproc.py +118 -24
- localstack/services/cloudformation/engine/v2/change_set_model_transform.py +4 -1
- localstack/services/cloudformation/engine/v2/change_set_model_validator.py +5 -14
- localstack/services/cloudformation/engine/v2/change_set_model_visitor.py +1 -0
- localstack/services/cloudformation/engine/v2/resolving.py +6 -4
- localstack/services/cloudformation/engine/yaml_parser.py +9 -2
- localstack/services/cloudformation/provider.py +2 -2
- localstack/services/cloudformation/resource_provider.py +5 -1
- localstack/services/cloudformation/resources.py +24149 -0
- localstack/services/cloudformation/v2/entities.py +6 -3
- localstack/services/cloudformation/v2/provider.py +178 -33
- localstack/services/cloudformation/v2/types.py +8 -4
- localstack/services/cloudwatch/provider_v2.py +25 -28
- localstack/services/dynamodb/packages.py +2 -1
- localstack/services/dynamodb/provider.py +42 -0
- localstack/services/dynamodb/v2/provider.py +42 -0
- localstack/services/ecr/resource_providers/aws_ecr_repository.py +5 -2
- localstack/services/es/provider.py +2 -2
- localstack/services/events/event_rule_engine.py +31 -13
- localstack/services/events/models.py +4 -5
- localstack/services/events/target.py +17 -9
- localstack/services/iam/provider.py +11 -116
- localstack/services/iam/resources/policy_simulator.py +133 -0
- localstack/services/kinesis/models.py +15 -2
- localstack/services/kinesis/packages.py +1 -1
- localstack/services/kinesis/provider.py +77 -0
- localstack/services/kms/models.py +34 -4
- localstack/services/kms/provider.py +107 -21
- localstack/services/lambda_/api_utils.py +3 -1
- localstack/services/lambda_/invocation/internal_sqs_queue.py +5 -9
- localstack/services/lambda_/packages.py +1 -1
- localstack/services/lambda_/provider.py +1 -1
- localstack/services/lambda_/runtimes.py +8 -3
- localstack/services/logs/provider.py +36 -19
- localstack/services/moto.py +2 -1
- localstack/services/opensearch/cluster.py +15 -7
- localstack/services/opensearch/packages.py +26 -7
- localstack/services/opensearch/provider.py +6 -1
- localstack/services/opensearch/versions.py +56 -7
- localstack/services/s3/constants.py +5 -2
- localstack/services/s3/cors.py +4 -4
- localstack/services/s3/notifications.py +1 -1
- localstack/services/s3/presigned_url.py +27 -43
- localstack/services/s3/provider.py +68 -12
- localstack/services/s3/utils.py +42 -11
- localstack/services/ses/provider.py +16 -7
- localstack/services/sns/constants.py +7 -1
- localstack/services/sns/v2/models.py +190 -0
- localstack/services/sns/v2/provider.py +992 -2
- localstack/services/sns/v2/utils.py +138 -0
- localstack/services/sqs/developer_api.py +205 -0
- localstack/services/sqs/models.py +79 -13
- localstack/services/sqs/provider.py +8 -309
- localstack/services/sqs/query_api.py +1 -1
- localstack/services/sqs/utils.py +121 -2
- localstack/services/stepfunctions/asl/jsonata/jsonata.py +1 -1
- localstack/testing/aws/cloudformation_utils.py +1 -1
- localstack/testing/pytest/cloudformation/fixtures.py +3 -3
- localstack/testing/pytest/container.py +4 -5
- localstack/testing/pytest/fixtures.py +20 -19
- localstack/testing/pytest/in_memory_localstack.py +0 -4
- localstack/testing/pytest/marking.py +13 -4
- localstack/testing/pytest/stepfunctions/utils.py +4 -3
- localstack/testing/pytest/util.py +1 -1
- localstack/testing/pytest/validation_tracking.py +1 -2
- localstack/testing/snapshots/transformer_utility.py +7 -0
- localstack/testing/testselection/matching.py +0 -1
- localstack/utils/analytics/events.py +2 -2
- localstack/utils/analytics/metadata.py +1 -2
- localstack/utils/analytics/metrics/counter.py +6 -8
- localstack/utils/analytics/publisher.py +1 -2
- localstack/utils/analytics/service_request_aggregator.py +2 -2
- localstack/utils/archives.py +11 -11
- localstack/utils/aws/arns.py +17 -9
- localstack/utils/aws/aws_responses.py +7 -7
- localstack/utils/aws/aws_stack.py +2 -3
- localstack/utils/aws/client_types.py +0 -8
- localstack/utils/aws/message_forwarding.py +1 -2
- localstack/utils/aws/request_context.py +4 -5
- localstack/utils/batch_policy.py +3 -3
- localstack/utils/bootstrap.py +7 -7
- localstack/utils/catalog/catalog.py +139 -0
- localstack/utils/catalog/catalog_loader.py +119 -0
- localstack/utils/catalog/common.py +58 -0
- localstack/utils/catalog/plugins.py +28 -0
- localstack/utils/cloudwatch/cloudwatch_util.py +5 -5
- localstack/utils/collections.py +7 -8
- localstack/utils/config_listener.py +1 -1
- localstack/utils/container_networking.py +2 -3
- localstack/utils/container_utils/container_client.py +115 -131
- localstack/utils/container_utils/docker_cmd_client.py +42 -42
- localstack/utils/container_utils/docker_sdk_client.py +63 -62
- localstack/utils/crypto.py +109 -0
- localstack/utils/diagnose.py +2 -3
- localstack/utils/docker_utils.py +3 -4
- localstack/utils/files.py +31 -7
- localstack/utils/functions.py +3 -2
- localstack/utils/http.py +4 -5
- localstack/utils/json.py +19 -5
- localstack/utils/kinesis/kinesis_connector.py +2 -1
- localstack/utils/net.py +6 -6
- localstack/utils/no_exit_argument_parser.py +2 -2
- localstack/utils/numbers.py +9 -2
- localstack/utils/objects.py +6 -5
- localstack/utils/patch.py +2 -1
- localstack/utils/run.py +10 -9
- localstack/utils/scheduler.py +11 -11
- localstack/utils/server/tcp_proxy.py +2 -2
- localstack/utils/serving.py +2 -3
- localstack/utils/strings.py +10 -11
- localstack/utils/sync.py +126 -1
- localstack/utils/tagging.py +1 -4
- localstack/utils/testutil.py +5 -4
- localstack/utils/threads.py +2 -2
- localstack/utils/time.py +11 -3
- localstack/utils/urls.py +1 -3
- localstack/version.py +2 -2
- {localstack_core-4.7.1.dev139.dist-info → localstack_core-4.10.1.dev42.dist-info}/METADATA +19 -13
- {localstack_core-4.7.1.dev139.dist-info → localstack_core-4.10.1.dev42.dist-info}/RECORD +203 -199
- {localstack_core-4.7.1.dev139.dist-info → localstack_core-4.10.1.dev42.dist-info}/entry_points.txt +4 -2
- localstack_core-4.10.1.dev42.dist-info/plux.json +1 -0
- localstack/packages/terraform.py +0 -46
- localstack/services/cloudformation/deploy.html +0 -144
- localstack/services/cloudformation/deploy_ui.py +0 -47
- localstack/services/cloudformation/plugins.py +0 -12
- localstack_core-4.7.1.dev139.dist-info/plux.json +0 -1
- {localstack_core-4.7.1.dev139.data → localstack_core-4.10.1.dev42.data}/scripts/localstack +0 -0
- {localstack_core-4.7.1.dev139.data → localstack_core-4.10.1.dev42.data}/scripts/localstack-supervisor +0 -0
- {localstack_core-4.7.1.dev139.data → localstack_core-4.10.1.dev42.data}/scripts/localstack.bat +0 -0
- {localstack_core-4.7.1.dev139.dist-info → localstack_core-4.10.1.dev42.dist-info}/WHEEL +0 -0
- {localstack_core-4.7.1.dev139.dist-info → localstack_core-4.10.1.dev42.dist-info}/licenses/LICENSE.txt +0 -0
- {localstack_core-4.7.1.dev139.dist-info → localstack_core-4.10.1.dev42.dist-info}/top_level.txt +0 -0
localstack/utils/sync.py
CHANGED
|
@@ -4,7 +4,8 @@ import functools
|
|
|
4
4
|
import threading
|
|
5
5
|
import time
|
|
6
6
|
from collections import defaultdict
|
|
7
|
-
from
|
|
7
|
+
from collections.abc import Callable
|
|
8
|
+
from typing import Literal, TypeVar
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
class ShortCircuitWaitException(Exception):
|
|
@@ -140,3 +141,127 @@ class SynchronizedDefaultDict(defaultdict):
|
|
|
140
141
|
def __str__(self):
|
|
141
142
|
with self._lock:
|
|
142
143
|
return super().__str__()
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
class Once:
|
|
147
|
+
"""
|
|
148
|
+
An object that will perform an action exactly once.
|
|
149
|
+
Inspired by Golang's [sync.Once](https://pkg.go.dev/sync#Once) operation.
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
### Example 1
|
|
153
|
+
|
|
154
|
+
Multiple threads using `Once::do` to ensure only 1 line is printed.
|
|
155
|
+
|
|
156
|
+
```python
|
|
157
|
+
import threading
|
|
158
|
+
import time
|
|
159
|
+
import random
|
|
160
|
+
|
|
161
|
+
greet_once = Once()
|
|
162
|
+
def greet():
|
|
163
|
+
print("This should happen only once.")
|
|
164
|
+
|
|
165
|
+
greet_threads = []
|
|
166
|
+
for _ in range(10):
|
|
167
|
+
t = threading.Thread(target=lambda: greet_once.do(greet))
|
|
168
|
+
greet_threads.append(t)
|
|
169
|
+
t.start()
|
|
170
|
+
|
|
171
|
+
for t in greet_threads:
|
|
172
|
+
t.join()
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
### Example 2
|
|
177
|
+
|
|
178
|
+
Ensuring idemponent calling to prevent exceptions on multiple calls.
|
|
179
|
+
|
|
180
|
+
```python
|
|
181
|
+
import os
|
|
182
|
+
|
|
183
|
+
class Service:
|
|
184
|
+
close_once: sync.Once
|
|
185
|
+
|
|
186
|
+
def start(self):
|
|
187
|
+
with open("my-service.txt) as f:
|
|
188
|
+
myfile.write("Started service")
|
|
189
|
+
|
|
190
|
+
def close(self):
|
|
191
|
+
# Ensure we only ever delete the file once on close
|
|
192
|
+
self.close_once.do(lambda: os.remove("my-service.txt"))
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
"""
|
|
198
|
+
|
|
199
|
+
_is_done: bool = False
|
|
200
|
+
_mu: threading.Lock = threading.Lock()
|
|
201
|
+
|
|
202
|
+
def do(self, fn: Callable[[], None]):
|
|
203
|
+
"""
|
|
204
|
+
`do` calls the function `fn()` if-and-only-if `do` has never been called before.
|
|
205
|
+
|
|
206
|
+
This ensures idempotent and thread-safe execution.
|
|
207
|
+
|
|
208
|
+
If the function raises an exception, `do` considers `fn` as done, where subsequent calls are still no-ops.
|
|
209
|
+
"""
|
|
210
|
+
if self._is_done:
|
|
211
|
+
return
|
|
212
|
+
|
|
213
|
+
with self._mu:
|
|
214
|
+
if not self._is_done:
|
|
215
|
+
try:
|
|
216
|
+
fn()
|
|
217
|
+
finally:
|
|
218
|
+
self._is_done = True
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
def once_func(fn: Callable[..., T]) -> Callable[..., T | None]:
|
|
222
|
+
"""
|
|
223
|
+
Wraps and returns a function that can only ever execute once.
|
|
224
|
+
|
|
225
|
+
The first call to the returned function will permanently set the result.
|
|
226
|
+
If the wrapped function raises an exception, this will be re-raised on each subsequent call.
|
|
227
|
+
|
|
228
|
+
This function can be used either as a decorator or called directly.
|
|
229
|
+
|
|
230
|
+
Direct usage:
|
|
231
|
+
```python
|
|
232
|
+
delete_file = once_func(os.remove)
|
|
233
|
+
|
|
234
|
+
delete_file("myfile.txt") # deletes the file
|
|
235
|
+
delete_file("myfile.txt") # does nothing
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
As a decorator:
|
|
239
|
+
```python
|
|
240
|
+
@once_func
|
|
241
|
+
def delete_file():
|
|
242
|
+
os.remove("myfile.txt")
|
|
243
|
+
|
|
244
|
+
delete_file() # deletes the file
|
|
245
|
+
delete_file() # does nothing
|
|
246
|
+
```
|
|
247
|
+
"""
|
|
248
|
+
once = Once()
|
|
249
|
+
|
|
250
|
+
result, exception = None, None
|
|
251
|
+
|
|
252
|
+
def _do(*args, **kwargs):
|
|
253
|
+
nonlocal result, exception
|
|
254
|
+
try:
|
|
255
|
+
result = fn(*args, **kwargs)
|
|
256
|
+
except Exception as e:
|
|
257
|
+
exception = e
|
|
258
|
+
raise
|
|
259
|
+
|
|
260
|
+
@functools.wraps(fn)
|
|
261
|
+
def wrapper(*args, **kwargs):
|
|
262
|
+
once.do(lambda: _do(*args, **kwargs))
|
|
263
|
+
if exception is not None:
|
|
264
|
+
raise exception
|
|
265
|
+
return result
|
|
266
|
+
|
|
267
|
+
return wrapper
|
localstack/utils/tagging.py
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
from typing import Optional
|
|
2
|
-
|
|
3
|
-
|
|
4
1
|
class TaggingService:
|
|
5
2
|
key_field: str
|
|
6
3
|
value_field: str
|
|
@@ -17,7 +14,7 @@ class TaggingService:
|
|
|
17
14
|
|
|
18
15
|
self.tags = {}
|
|
19
16
|
|
|
20
|
-
def list_tags_for_resource(self, arn: str, root_name:
|
|
17
|
+
def list_tags_for_resource(self, arn: str, root_name: str | None = None):
|
|
21
18
|
root_name = root_name or "Tags"
|
|
22
19
|
|
|
23
20
|
result = []
|
localstack/utils/testutil.py
CHANGED
|
@@ -7,7 +7,8 @@ import re
|
|
|
7
7
|
import shutil
|
|
8
8
|
import tempfile
|
|
9
9
|
import time
|
|
10
|
-
from
|
|
10
|
+
from collections.abc import Callable
|
|
11
|
+
from typing import Any
|
|
11
12
|
|
|
12
13
|
from localstack.aws.api.lambda_ import Runtime
|
|
13
14
|
from localstack.aws.connect import connect_externally_to, connect_to
|
|
@@ -20,7 +21,7 @@ from localstack.utils.urls import localstack_host
|
|
|
20
21
|
try:
|
|
21
22
|
from typing import Literal
|
|
22
23
|
except ImportError:
|
|
23
|
-
from
|
|
24
|
+
from typing import Literal
|
|
24
25
|
|
|
25
26
|
import boto3
|
|
26
27
|
import requests
|
|
@@ -548,7 +549,7 @@ def list_all_log_events(log_group_name: str, logs_client=None) -> list[dict]:
|
|
|
548
549
|
def get_lambda_log_events(
|
|
549
550
|
function_name,
|
|
550
551
|
delay_time=DEFAULT_GET_LOG_EVENTS_DELAY,
|
|
551
|
-
regex_filter:
|
|
552
|
+
regex_filter: str | None = None,
|
|
552
553
|
log_group=None,
|
|
553
554
|
logs_client=None,
|
|
554
555
|
):
|
|
@@ -596,7 +597,7 @@ def list_all_resources(
|
|
|
596
597
|
page_function: Callable[[dict], Any],
|
|
597
598
|
last_token_attr_name: str,
|
|
598
599
|
list_attr_name: str,
|
|
599
|
-
next_token_attr_name:
|
|
600
|
+
next_token_attr_name: str | None = None,
|
|
600
601
|
) -> list:
|
|
601
602
|
"""
|
|
602
603
|
List all available resources by loading all available pages using `page_function`.
|
localstack/utils/threads.py
CHANGED
|
@@ -3,9 +3,9 @@ import inspect
|
|
|
3
3
|
import logging
|
|
4
4
|
import threading
|
|
5
5
|
import traceback
|
|
6
|
+
from collections.abc import Callable
|
|
6
7
|
from concurrent.futures import Future
|
|
7
8
|
from multiprocessing.dummy import Pool
|
|
8
|
-
from typing import Callable, Optional
|
|
9
9
|
|
|
10
10
|
LOG = logging.getLogger(__name__)
|
|
11
11
|
|
|
@@ -26,7 +26,7 @@ class FuncThread(threading.Thread):
|
|
|
26
26
|
params=None,
|
|
27
27
|
quiet=False,
|
|
28
28
|
on_stop: Callable[["FuncThread"], None] = None,
|
|
29
|
-
name:
|
|
29
|
+
name: str | None = None,
|
|
30
30
|
daemon=True,
|
|
31
31
|
):
|
|
32
32
|
global counter
|
localstack/utils/time.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import time
|
|
2
2
|
from datetime import date, datetime, timezone, tzinfo
|
|
3
|
-
from
|
|
3
|
+
from zoneinfo import ZoneInfo
|
|
4
4
|
|
|
5
5
|
TIMESTAMP_FORMAT = "%Y-%m-%dT%H:%M:%S"
|
|
6
6
|
TIMESTAMP_FORMAT_TZ = "%Y-%m-%dT%H:%M:%SZ"
|
|
@@ -42,6 +42,11 @@ def epoch_timestamp() -> float:
|
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
def parse_timestamp(ts_str: str) -> datetime:
|
|
45
|
+
"""
|
|
46
|
+
Parse the incoming date string into a timezone aware datetime object
|
|
47
|
+
:param ts_str:
|
|
48
|
+
:return:
|
|
49
|
+
"""
|
|
45
50
|
for ts_format in [
|
|
46
51
|
TIMESTAMP_FORMAT,
|
|
47
52
|
TIMESTAMP_FORMAT_TZ,
|
|
@@ -49,13 +54,16 @@ def parse_timestamp(ts_str: str) -> datetime:
|
|
|
49
54
|
TIMESTAMP_READABLE_FORMAT,
|
|
50
55
|
]:
|
|
51
56
|
try:
|
|
52
|
-
|
|
57
|
+
value = datetime.strptime(ts_str, ts_format)
|
|
58
|
+
if value.tzinfo is None:
|
|
59
|
+
value = value.replace(tzinfo=ZoneInfo("UTC"))
|
|
60
|
+
return value
|
|
53
61
|
except ValueError:
|
|
54
62
|
pass
|
|
55
63
|
raise Exception(f"Unable to parse timestamp string with any known formats: {ts_str}")
|
|
56
64
|
|
|
57
65
|
|
|
58
|
-
def now(millis: bool = False, tz:
|
|
66
|
+
def now(millis: bool = False, tz: tzinfo | None = None) -> int:
|
|
59
67
|
return mktime(datetime.now(tz=tz), millis=millis)
|
|
60
68
|
|
|
61
69
|
|
localstack/utils/urls.py
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import Optional
|
|
2
|
-
|
|
3
1
|
from localstack import config
|
|
4
2
|
from localstack.config import HostAndPort
|
|
5
3
|
|
|
@@ -12,7 +10,7 @@ def hostname_from_url(url: str) -> str:
|
|
|
12
10
|
return url.split("://")[-1].split("/")[0].split(":")[0]
|
|
13
11
|
|
|
14
12
|
|
|
15
|
-
def localstack_host(custom_port:
|
|
13
|
+
def localstack_host(custom_port: int | None = None) -> HostAndPort:
|
|
16
14
|
"""
|
|
17
15
|
Determine the host and port to return to the user based on:
|
|
18
16
|
- the user's configuration (e.g environment variable overrides)
|
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.
|
|
32
|
-
__version_tuple__ = version_tuple = (4,
|
|
31
|
+
__version__ = version = '4.10.1.dev42'
|
|
32
|
+
__version_tuple__ = version_tuple = (4, 10, 1, 'dev42')
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: localstack-core
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.10.1.dev42
|
|
4
4
|
Summary: The core library and runtime of LocalStack
|
|
5
5
|
Author-email: LocalStack Contributors <info@localstack.cloud>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -9,13 +9,13 @@ Project-URL: Documentation, https://docs.localstack.cloud
|
|
|
9
9
|
Project-URL: Repository, https://github.com/localstack/localstack.git
|
|
10
10
|
Project-URL: Issues, https://github.com/localstack/localstack/issues
|
|
11
11
|
Classifier: Programming Language :: Python :: 3
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
13
13
|
Classifier: Topic :: Internet
|
|
14
14
|
Classifier: Topic :: Software Development :: Testing
|
|
15
15
|
Classifier: Topic :: System :: Emulators
|
|
16
|
-
Requires-Python: >=3.
|
|
16
|
+
Requires-Python: >=3.10
|
|
17
17
|
License-File: LICENSE.txt
|
|
18
|
-
Requires-Dist:
|
|
18
|
+
Requires-Dist: asn1crypto>=1.5.1
|
|
19
19
|
Requires-Dist: click>=7.1
|
|
20
20
|
Requires-Dist: cachetools>=5.0
|
|
21
21
|
Requires-Dist: cryptography
|
|
@@ -29,48 +29,53 @@ Requires-Dist: pyyaml>=5.1
|
|
|
29
29
|
Requires-Dist: rich>=12.3.0
|
|
30
30
|
Requires-Dist: requests>=2.20.0
|
|
31
31
|
Requires-Dist: semver>=2.10
|
|
32
|
-
Requires-Dist: tailer>=0.4.1
|
|
33
32
|
Provides-Extra: base-runtime
|
|
34
|
-
Requires-Dist: boto3==1.40.
|
|
35
|
-
Requires-Dist: botocore==1.40.
|
|
33
|
+
Requires-Dist: boto3==1.40.74; extra == "base-runtime"
|
|
34
|
+
Requires-Dist: botocore==1.40.74; extra == "base-runtime"
|
|
36
35
|
Requires-Dist: awscrt!=0.27.1,>=0.13.14; extra == "base-runtime"
|
|
37
36
|
Requires-Dist: cbor2>=5.5.0; extra == "base-runtime"
|
|
38
37
|
Requires-Dist: dnspython>=1.16.0; extra == "base-runtime"
|
|
39
38
|
Requires-Dist: docker>=6.1.1; extra == "base-runtime"
|
|
40
39
|
Requires-Dist: jsonpatch>=1.24; extra == "base-runtime"
|
|
40
|
+
Requires-Dist: jsonpointer>=3.0.0; extra == "base-runtime"
|
|
41
|
+
Requires-Dist: jsonschema>=4.25.1; extra == "base-runtime"
|
|
41
42
|
Requires-Dist: hypercorn>=0.14.4; extra == "base-runtime"
|
|
42
43
|
Requires-Dist: localstack-twisted>=23.0; extra == "base-runtime"
|
|
43
44
|
Requires-Dist: openapi-core>=0.19.2; extra == "base-runtime"
|
|
44
45
|
Requires-Dist: pyopenssl>=23.0.0; extra == "base-runtime"
|
|
46
|
+
Requires-Dist: python-dateutil>=2.9.0; extra == "base-runtime"
|
|
45
47
|
Requires-Dist: readerwriterlock>=1.0.7; extra == "base-runtime"
|
|
46
48
|
Requires-Dist: requests-aws4auth>=1.0; extra == "base-runtime"
|
|
49
|
+
Requires-Dist: typing-extensions>=4.15.0; extra == "base-runtime"
|
|
47
50
|
Requires-Dist: urllib3>=2.0.7; extra == "base-runtime"
|
|
48
51
|
Requires-Dist: Werkzeug>=3.1.3; extra == "base-runtime"
|
|
49
52
|
Requires-Dist: xmltodict>=0.13.0; extra == "base-runtime"
|
|
50
53
|
Requires-Dist: rolo>=0.7; extra == "base-runtime"
|
|
51
54
|
Provides-Extra: runtime
|
|
52
55
|
Requires-Dist: localstack-core[base-runtime]; extra == "runtime"
|
|
53
|
-
Requires-Dist: awscli==1.42.
|
|
56
|
+
Requires-Dist: awscli==1.42.74; extra == "runtime"
|
|
54
57
|
Requires-Dist: airspeed-ext>=0.6.3; extra == "runtime"
|
|
55
|
-
Requires-Dist: kclpy-ext>=3.0.0; extra == "runtime"
|
|
56
58
|
Requires-Dist: antlr4-python3-runtime==4.13.2; extra == "runtime"
|
|
57
59
|
Requires-Dist: apispec>=5.1.1; extra == "runtime"
|
|
58
60
|
Requires-Dist: aws-sam-translator>=1.15.1; extra == "runtime"
|
|
59
61
|
Requires-Dist: crontab>=0.22.6; extra == "runtime"
|
|
60
62
|
Requires-Dist: cryptography>=41.0.5; extra == "runtime"
|
|
63
|
+
Requires-Dist: jinja2>=3.1.6; extra == "runtime"
|
|
61
64
|
Requires-Dist: jpype1>=1.6.0; extra == "runtime"
|
|
62
|
-
Requires-Dist: json5>=0.9.11; extra == "runtime"
|
|
63
65
|
Requires-Dist: jsonpath-ng>=1.6.1; extra == "runtime"
|
|
64
66
|
Requires-Dist: jsonpath-rw>=1.4.0; extra == "runtime"
|
|
65
|
-
Requires-Dist:
|
|
67
|
+
Requires-Dist: kclpy-ext>=3.0.0; extra == "runtime"
|
|
68
|
+
Requires-Dist: moto-ext[all]>=5.1.12.post22; extra == "runtime"
|
|
66
69
|
Requires-Dist: opensearch-py>=2.4.1; extra == "runtime"
|
|
70
|
+
Requires-Dist: pydantic>=2.11.9; extra == "runtime"
|
|
67
71
|
Requires-Dist: pymongo>=4.2.0; extra == "runtime"
|
|
68
72
|
Requires-Dist: pyopenssl>=23.0.0; extra == "runtime"
|
|
73
|
+
Requires-Dist: responses>=0.25.8; extra == "runtime"
|
|
69
74
|
Provides-Extra: test
|
|
70
75
|
Requires-Dist: localstack-core[runtime]; extra == "test"
|
|
71
76
|
Requires-Dist: coverage[toml]>=5.5; extra == "test"
|
|
72
|
-
Requires-Dist: deepdiff>=6.4.1; extra == "test"
|
|
73
77
|
Requires-Dist: httpx[http2]>=0.25; extra == "test"
|
|
78
|
+
Requires-Dist: json5>=0.12.1; extra == "test"
|
|
74
79
|
Requires-Dist: pluggy>=1.3.0; extra == "test"
|
|
75
80
|
Requires-Dist: pytest>=7.4.2; extra == "test"
|
|
76
81
|
Requires-Dist: pytest-split>=0.8.0; extra == "test"
|
|
@@ -83,6 +88,7 @@ Requires-Dist: localstack-snapshot>=0.1.1; extra == "test"
|
|
|
83
88
|
Provides-Extra: dev
|
|
84
89
|
Requires-Dist: localstack-core[test]; extra == "dev"
|
|
85
90
|
Requires-Dist: coveralls>=3.3.1; extra == "dev"
|
|
91
|
+
Requires-Dist: deptry>=0.13.0; extra == "dev"
|
|
86
92
|
Requires-Dist: Cython; extra == "dev"
|
|
87
93
|
Requires-Dist: networkx>=2.8.4; extra == "dev"
|
|
88
94
|
Requires-Dist: openapi-spec-validator>=0.7.1; extra == "dev"
|
|
@@ -94,5 +100,5 @@ Requires-Dist: rstr>=3.2.0; extra == "dev"
|
|
|
94
100
|
Requires-Dist: mypy; extra == "dev"
|
|
95
101
|
Provides-Extra: typehint
|
|
96
102
|
Requires-Dist: localstack-core[dev]; extra == "typehint"
|
|
97
|
-
Requires-Dist: boto3-stubs[acm,acm-pca,amplify,apigateway,apigatewayv2,appconfig,appconfigdata,application-autoscaling,appsync,athena,autoscaling,backup,batch,ce,cloudcontrol,cloudformation,cloudfront,cloudtrail,cloudwatch,codebuild,codecommit,codeconnections,codedeploy,codepipeline,codestar-connections,cognito-identity,cognito-idp,dms,docdb,dynamodb,dynamodbstreams,ec2,ecr,ecs,efs,eks,elasticache,elasticbeanstalk,elbv2,emr,emr-serverless,es,events,firehose,fis,glacier,glue,iam,identitystore,iot,iot-data,iotanalytics,iotwireless,kafka,kinesis,
|
|
103
|
+
Requires-Dist: boto3-stubs[acm,acm-pca,amplify,apigateway,apigatewayv2,appconfig,appconfigdata,application-autoscaling,appsync,athena,autoscaling,backup,batch,ce,cloudcontrol,cloudformation,cloudfront,cloudtrail,cloudwatch,codebuild,codecommit,codeconnections,codedeploy,codepipeline,codestar-connections,cognito-identity,cognito-idp,dms,docdb,dynamodb,dynamodbstreams,ec2,ecr,ecs,efs,eks,elasticache,elasticbeanstalk,elbv2,emr,emr-serverless,es,events,firehose,fis,glacier,glue,iam,identitystore,iot,iot-data,iotanalytics,iotwireless,kafka,kinesis,kinesisanalyticsv2,kms,lakeformation,lambda,logs,managedblockchain,mediaconvert,mediastore,mq,mwaa,neptune,opensearch,organizations,pi,pinpoint,pipes,rds,rds-data,redshift,redshift-data,resource-groups,resourcegroupstaggingapi,route53,route53resolver,s3,s3control,sagemaker,sagemaker-runtime,secretsmanager,serverlessrepo,servicediscovery,ses,sesv2,sns,sqs,ssm,sso-admin,stepfunctions,sts,timestream-query,timestream-write,transcribe,verifiedpermissions,wafv2,xray]; extra == "typehint"
|
|
98
104
|
Dynamic: license-file
|