localstack 4.13.2.dev36__tar.gz → 4.13.2.dev53__tar.gz
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-4.13.2.dev36/localstack.egg-info → localstack-4.13.2.dev53}/PKG-INFO +1 -1
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53/localstack.egg-info}/PKG-INFO +1 -1
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack.egg-info/SOURCES.txt +14 -1
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack.egg-info/entry_points.txt +2 -2
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/runtime/hooks.py +2 -2
- localstack-4.13.2.dev53/localstack_cli/testing/__init__.py +1 -0
- localstack-4.13.2.dev53/localstack_cli/testing/config.py +4 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/version.py +3 -3
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/plux.ini +2 -2
- localstack-4.13.2.dev53/tests/bootstrap/extensions/test_extension_install.py +52 -0
- localstack-4.13.2.dev53/tests/integration/replicator/__init__.py +0 -0
- localstack-4.13.2.dev53/tests/integration/replicator/core/__init__.py +0 -0
- localstack-4.13.2.dev53/tests/integration/replicator/core/test_replicator_cli.py +146 -0
- localstack-4.13.2.dev53/tests/unit/__init__.py +0 -0
- localstack-4.13.2.dev53/tests/unit/cli/__init__.py +0 -0
- localstack-4.13.2.dev53/tests/unit/pro/__init__.py +0 -0
- localstack-4.13.2.dev53/tests/unit/replicator/__init__.py +0 -0
- localstack-4.13.2.dev53/tests/unit/replicator/test_profile_loading.py +87 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/.github/workflows/tests-cli.yml +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/.gitignore +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/Makefile +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/README.md +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/bin/localstack +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack.egg-info/dependency_links.txt +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack.egg-info/requires.txt +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack.egg-info/top_level.txt +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/__init__.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/cli/__init__.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/cli/console.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/cli/core_plugin.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/cli/exceptions.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/cli/localstack.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/cli/lpm.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/cli/main.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/cli/plugin.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/cli/plugins.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/cli/profiles.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/config.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/constants.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/logging/__init__.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/logging/format.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/logging/setup.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/packages/__init__.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/packages/api.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/packages/core.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/__init__.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/__init__.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/__init__.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/auth.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/dns_utils.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/entitlements.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/extensions/__init__.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/extensions/__main__.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/extensions/autoinstall.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/extensions/bootstrap.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/extensions/repository.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/licensingv2.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/pods/__init__.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/pods/api_types.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/pods/constants.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/pods/remotes/__init__.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/pods/remotes/api.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/pods/remotes/configs.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/pods/remotes/params.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/pods_client.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/__init__.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/auth.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/aws.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/cli.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/click_utils.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/cloud_pods.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/diff_view.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/ephemeral.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/extensions.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/iam.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/license.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/localstack.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/replicator.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/state.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/tree_view.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/config.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/constants.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/plugins.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/runtime/__init__.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/runtime/exceptions.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/__init__.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/analytics/__init__.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/analytics/cli.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/analytics/client.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/analytics/events.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/analytics/logger.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/analytics/metadata.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/analytics/publisher.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/analytics/service_request_aggregator.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/archives.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/batching.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/bootstrap.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/checksum.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/collections.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/common.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/container_networking.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/container_utils/__init__.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/container_utils/container_client.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/container_utils/docker_cmd_client.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/container_utils/docker_sdk_client.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/crypto.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/docker_utils.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/files.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/functions.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/http.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/json.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/net.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/no_exit_argument_parser.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/numbers.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/objects.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/patch.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/platform.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/run.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/server/__init__.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/server/tcp_proxy.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/serving.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/ssl.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/strings.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/sync.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/threads.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/time.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/urls.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/venv.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/xml.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/pyproject.toml +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/setup.cfg +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/tests/__init__.py +0 -0
- {localstack-4.13.2.dev36/tests/unit → localstack-4.13.2.dev53/tests/bootstrap}/__init__.py +0 -0
- {localstack-4.13.2.dev36/tests/unit/cli → localstack-4.13.2.dev53/tests/bootstrap/extensions}/__init__.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/tests/cli/__init__.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/tests/cli/conftest.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/tests/cli/test_cli.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/tests/cli/test_cli_pro.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/tests/conftest.py +0 -0
- {localstack-4.13.2.dev36/tests/unit/pro → localstack-4.13.2.dev53/tests/integration}/__init__.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/tests/unit/cli/test_cli.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/tests/unit/cli/test_lpm.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/tests/unit/cli/test_profiles.py +0 -0
- {localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/tests/unit/pro/test_cli.py +0 -0
|
@@ -64,6 +64,8 @@ pyproject.toml
|
|
|
64
64
|
./localstack_cli/runtime/__init__.py
|
|
65
65
|
./localstack_cli/runtime/exceptions.py
|
|
66
66
|
./localstack_cli/runtime/hooks.py
|
|
67
|
+
./localstack_cli/testing/__init__.py
|
|
68
|
+
./localstack_cli/testing/config.py
|
|
67
69
|
./localstack_cli/utils/__init__.py
|
|
68
70
|
./localstack_cli/utils/archives.py
|
|
69
71
|
./localstack_cli/utils/batching.py
|
|
@@ -176,6 +178,8 @@ localstack_cli/pro/core/cli/tree_view.py
|
|
|
176
178
|
localstack_cli/runtime/__init__.py
|
|
177
179
|
localstack_cli/runtime/exceptions.py
|
|
178
180
|
localstack_cli/runtime/hooks.py
|
|
181
|
+
localstack_cli/testing/__init__.py
|
|
182
|
+
localstack_cli/testing/config.py
|
|
179
183
|
localstack_cli/utils/__init__.py
|
|
180
184
|
localstack_cli/utils/archives.py
|
|
181
185
|
localstack_cli/utils/batching.py
|
|
@@ -222,14 +226,23 @@ localstack_cli/utils/server/__init__.py
|
|
|
222
226
|
localstack_cli/utils/server/tcp_proxy.py
|
|
223
227
|
tests/__init__.py
|
|
224
228
|
tests/conftest.py
|
|
229
|
+
tests/bootstrap/__init__.py
|
|
230
|
+
tests/bootstrap/extensions/__init__.py
|
|
231
|
+
tests/bootstrap/extensions/test_extension_install.py
|
|
225
232
|
tests/cli/__init__.py
|
|
226
233
|
tests/cli/conftest.py
|
|
227
234
|
tests/cli/test_cli.py
|
|
228
235
|
tests/cli/test_cli_pro.py
|
|
236
|
+
tests/integration/__init__.py
|
|
237
|
+
tests/integration/replicator/__init__.py
|
|
238
|
+
tests/integration/replicator/core/__init__.py
|
|
239
|
+
tests/integration/replicator/core/test_replicator_cli.py
|
|
229
240
|
tests/unit/__init__.py
|
|
230
241
|
tests/unit/cli/__init__.py
|
|
231
242
|
tests/unit/cli/test_cli.py
|
|
232
243
|
tests/unit/cli/test_lpm.py
|
|
233
244
|
tests/unit/cli/test_profiles.py
|
|
234
245
|
tests/unit/pro/__init__.py
|
|
235
|
-
tests/unit/pro/test_cli.py
|
|
246
|
+
tests/unit/pro/test_cli.py
|
|
247
|
+
tests/unit/replicator/__init__.py
|
|
248
|
+
tests/unit/replicator/test_profile_loading.py
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
[console_scripts]
|
|
2
2
|
localstack = localstack_cli.cli.main:main
|
|
3
3
|
|
|
4
|
-
[
|
|
4
|
+
[localstack_cli.hooks.configure_localstack_container]
|
|
5
5
|
configure_extensions_dev_container = localstack_cli.pro.core.plugins:configure_extensions_dev_container
|
|
6
6
|
configure_pro_container = localstack_cli.pro.core.plugins:configure_pro_container
|
|
7
7
|
set_analytics_header = localstack_cli.utils.analytics.metadata:set_analytics_header
|
|
8
8
|
|
|
9
|
-
[
|
|
9
|
+
[localstack_cli.hooks.prepare_host]
|
|
10
10
|
activate_pro_key_on_host = localstack_cli.pro.core.plugins:activate_pro_key_on_host
|
|
11
11
|
configure_extensions_dev_host = localstack_cli.pro.core.plugins:configure_extensions_dev_host
|
|
12
12
|
patch_community_pro_detection = localstack_cli.pro.core.plugins:patch_community_pro_detection
|
|
@@ -3,8 +3,8 @@ import functools
|
|
|
3
3
|
from plux import PluginManager, plugin
|
|
4
4
|
|
|
5
5
|
# plugin namespace constants
|
|
6
|
-
HOOKS_CONFIGURE_LOCALSTACK_CONTAINER = "
|
|
7
|
-
HOOKS_PREPARE_HOST = "
|
|
6
|
+
HOOKS_CONFIGURE_LOCALSTACK_CONTAINER = "localstack_cli.hooks.configure_localstack_container"
|
|
7
|
+
HOOKS_PREPARE_HOST = "localstack_cli.hooks.prepare_host"
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
def hook(namespace: str, priority: int = 0, **kwargs):
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Testing utilities for the LocalStack CLI."""
|
|
@@ -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.dev53'
|
|
32
|
+
__version_tuple__ = version_tuple = (4, 13, 2, 'dev53')
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'g9339dde9f'
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
[
|
|
1
|
+
[localstack_cli.hooks.configure_localstack_container]
|
|
2
2
|
configure_extensions_dev_container = localstack_cli.pro.core.plugins:configure_extensions_dev_container
|
|
3
3
|
configure_pro_container = localstack_cli.pro.core.plugins:configure_pro_container
|
|
4
4
|
set_analytics_header = localstack_cli.utils.analytics.metadata:set_analytics_header
|
|
5
5
|
|
|
6
|
-
[
|
|
6
|
+
[localstack_cli.hooks.prepare_host]
|
|
7
7
|
activate_pro_key_on_host = localstack_cli.pro.core.plugins:activate_pro_key_on_host
|
|
8
8
|
configure_extensions_dev_host = localstack_cli.pro.core.plugins:configure_extensions_dev_host
|
|
9
9
|
patch_community_pro_detection = localstack_cli.pro.core.plugins:patch_community_pro_detection
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
from click.testing import CliRunner
|
|
4
|
+
from localstack_cli import config
|
|
5
|
+
from localstack_cli.pro.core import config as pro_config
|
|
6
|
+
from localstack_cli.pro.core.cli.extensions import extensions as extensions_cli
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def test_extensions_install_with_IMAGE_NAME_installs_correct_venv_version(tmp_path, monkeypatch):
|
|
10
|
+
volume_dir = tmp_path / "volume"
|
|
11
|
+
monkeypatch.setattr(config, "VOLUME_DIR", str(volume_dir))
|
|
12
|
+
|
|
13
|
+
# define an image version with an older Python version
|
|
14
|
+
monkeypatch.setenv("IMAGE_NAME", "localstack/localstack-pro:4.8.1")
|
|
15
|
+
|
|
16
|
+
runner = CliRunner()
|
|
17
|
+
runner.invoke(extensions_cli, ["install", "localstack-extension-hello-world"])
|
|
18
|
+
|
|
19
|
+
# check that the venv for the extensions was created with Python 3.11
|
|
20
|
+
python_bin = volume_dir / "lib" / "extensions" / "python_venv" / "lib" / "python3.11"
|
|
21
|
+
assert python_bin.exists(), f"Python 3.11 venv not found at {python_bin}"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def test_extensions_list_without_image_name_or_auth_env(tmp_path, monkeypatch):
|
|
25
|
+
# explicitly declare this is the CLI and unset a potential IMAGE_NAME
|
|
26
|
+
monkeypatch.setenv("LOCALSTACK_CLI", "1")
|
|
27
|
+
monkeypatch.setenv("IMAGE_NAME", "")
|
|
28
|
+
|
|
29
|
+
# extract the auth token from the test environment
|
|
30
|
+
token = os.environ.get("LOCALSTACK_AUTH_TOKEN")
|
|
31
|
+
|
|
32
|
+
# unset all auth token env vars
|
|
33
|
+
monkeypatch.setenv("LOCALSTACK_AUTH_TOKEN", "")
|
|
34
|
+
monkeypatch.setenv("LOCALSTACK_API_KEY", "")
|
|
35
|
+
|
|
36
|
+
# create a temporary auth cache file
|
|
37
|
+
tmp_auth_cache_path = tmp_path / "auth.json"
|
|
38
|
+
monkeypatch.setattr(pro_config, "AUTH_CACHE_PATH", str(tmp_auth_cache_path))
|
|
39
|
+
|
|
40
|
+
# set the token in the temp auth cache
|
|
41
|
+
from localstack_cli.pro.core.bootstrap.auth import get_auth_cache
|
|
42
|
+
|
|
43
|
+
cache = get_auth_cache()
|
|
44
|
+
cache["LOCALSTACK_AUTH_TOKEN"] = token
|
|
45
|
+
cache.save()
|
|
46
|
+
|
|
47
|
+
# make sure that the extensions list command works properly by
|
|
48
|
+
# defaulting to the Pro image even though IMAGE_NAME and
|
|
49
|
+
# LOCALSTACK_AUTH_TOKEN are not set
|
|
50
|
+
runner = CliRunner()
|
|
51
|
+
result = runner.invoke(extensions_cli, ["list"])
|
|
52
|
+
assert result.exit_code == 0
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from collections.abc import Generator
|
|
3
|
+
|
|
4
|
+
import pytest
|
|
5
|
+
from _pytest.capture import CaptureFixture
|
|
6
|
+
from click.testing import CliRunner, Result
|
|
7
|
+
from localstack_cli.pro.core.cli.replicator import replicator
|
|
8
|
+
from localstack_cli.testing.config import SECONDARY_TEST_AWS_ACCOUNT_ID
|
|
9
|
+
from localstack_cli.utils.strings import short_uid
|
|
10
|
+
from localstack_cli.utils.sync import retry
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@pytest.fixture
|
|
14
|
+
def runner(capsys: CaptureFixture[str]) -> Generator[CliRunner]:
|
|
15
|
+
"""
|
|
16
|
+
Convenience fixture to return a click.CliRunner for cli testing
|
|
17
|
+
This allows us to keep running the replicator test with log_cli enabled
|
|
18
|
+
to receive the logs from localstack.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
class NoCapsysCliRunner(CliRunner):
|
|
22
|
+
"""Override CliRunner to disable capsys"""
|
|
23
|
+
|
|
24
|
+
def __init__(self, **kwargs):
|
|
25
|
+
# Don't combine stdout and stderr into the same output stream
|
|
26
|
+
# The CLI logs to stderr and the output on stdout should be JSON formatted
|
|
27
|
+
# so that it can be parsed by external tools.
|
|
28
|
+
# If we cross the streams then we can no longer parse the output in tests
|
|
29
|
+
# as JSON
|
|
30
|
+
kwargs.pop("mix_stderr", None)
|
|
31
|
+
super().__init__(**kwargs)
|
|
32
|
+
|
|
33
|
+
def invoke(self, *args, **kwargs) -> Result:
|
|
34
|
+
# Way to fix https://github.com/pallets/click/issues/824
|
|
35
|
+
with capsys.disabled():
|
|
36
|
+
result = super().invoke(*args, **kwargs)
|
|
37
|
+
return result
|
|
38
|
+
|
|
39
|
+
yield NoCapsysCliRunner()
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def test_start_mock_replication_job(runner, monkeypatch):
|
|
43
|
+
# ensure AWS_PROFILE is not set in the environment
|
|
44
|
+
monkeypatch.delenv("AWS_PROFILE", raising=False)
|
|
45
|
+
|
|
46
|
+
result = runner.invoke(
|
|
47
|
+
replicator,
|
|
48
|
+
["start", "--replication-type", "MOCK"],
|
|
49
|
+
env={
|
|
50
|
+
"AWS_ACCESS_KEY_ID": "test",
|
|
51
|
+
"AWS_SECRET_ACCESS_KEY": "test",
|
|
52
|
+
"AWS_DEFAULT_REGION": "us-east-1",
|
|
53
|
+
},
|
|
54
|
+
)
|
|
55
|
+
assert result.exit_code == 0, result.output
|
|
56
|
+
|
|
57
|
+
response = json.loads(result.stdout)
|
|
58
|
+
job_id = response["job_id"]
|
|
59
|
+
assert response["state"] == "SUBMITTED"
|
|
60
|
+
assert response["error_message"] is None
|
|
61
|
+
assert response["type"] == "MOCK"
|
|
62
|
+
assert response["replication_config"] == {"delay": 1}
|
|
63
|
+
|
|
64
|
+
def _assert_status():
|
|
65
|
+
status_result = runner.invoke(replicator, ["status", job_id])
|
|
66
|
+
assert status_result.exit_code == 0, status_result.output
|
|
67
|
+
|
|
68
|
+
job_status = json.loads(status_result.stdout)
|
|
69
|
+
assert job_status["state"] == "SUCCEEDED"
|
|
70
|
+
|
|
71
|
+
retry(_assert_status, retries=5, sleep=1)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def test_list_resources(runner, monkeypatch):
|
|
75
|
+
result = runner.invoke(replicator, ["resources"])
|
|
76
|
+
assert result.exit_code == 0, result.output
|
|
77
|
+
|
|
78
|
+
resources: list[dict] = json.loads(result.stdout)
|
|
79
|
+
|
|
80
|
+
supported_resource_types = [resource["resource_type"] for resource in resources]
|
|
81
|
+
assert "AWS::SSM::Parameter" in supported_resource_types
|
|
82
|
+
|
|
83
|
+
for resource in resources:
|
|
84
|
+
assert len(resource["policy_statements"]) > 0
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
@pytest.mark.skip("using runtime client")
|
|
88
|
+
@pytest.mark.parametrize("method", ["ARN", "CFN"])
|
|
89
|
+
def test_start_single_replication_job(
|
|
90
|
+
method,
|
|
91
|
+
runner,
|
|
92
|
+
monkeypatch,
|
|
93
|
+
aws_client,
|
|
94
|
+
create_parameter,
|
|
95
|
+
source_credentials,
|
|
96
|
+
wait_for_job_state,
|
|
97
|
+
target_aws_client,
|
|
98
|
+
region_name,
|
|
99
|
+
source_aws_endpoint,
|
|
100
|
+
):
|
|
101
|
+
parameter_name = f"mock-{short_uid()}"
|
|
102
|
+
create_parameter(
|
|
103
|
+
Name=parameter_name,
|
|
104
|
+
Type="String",
|
|
105
|
+
Value="test",
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
args = [
|
|
109
|
+
"start",
|
|
110
|
+
"--replication-type",
|
|
111
|
+
"SINGLE_RESOURCE",
|
|
112
|
+
"--target-account-id",
|
|
113
|
+
SECONDARY_TEST_AWS_ACCOUNT_ID,
|
|
114
|
+
]
|
|
115
|
+
|
|
116
|
+
if method == "ARN":
|
|
117
|
+
parameter_arn = aws_client.ssm.get_parameter(Name=parameter_name)["Parameter"]["ARN"]
|
|
118
|
+
args.extend(["--resource-arn", parameter_arn])
|
|
119
|
+
else:
|
|
120
|
+
args.extend(
|
|
121
|
+
["--resource-type", "AWS::SSM::Parameter", "--resource-identifier", parameter_name]
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
result = runner.invoke(
|
|
125
|
+
replicator,
|
|
126
|
+
args=args,
|
|
127
|
+
env={
|
|
128
|
+
"AWS_ACCESS_KEY_ID": source_credentials.access_key,
|
|
129
|
+
"AWS_SECRET_ACCESS_KEY": source_credentials.secret_key,
|
|
130
|
+
"AWS_SESSION_TOKEN": source_credentials.token,
|
|
131
|
+
"AWS_DEFAULT_REGION": region_name,
|
|
132
|
+
"AWS_ENDPOINT_URL": source_aws_endpoint,
|
|
133
|
+
},
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
job_id = json.loads(result.stdout)["job_id"]
|
|
137
|
+
|
|
138
|
+
def _assert_status():
|
|
139
|
+
status_result = runner.invoke(replicator, ["status", job_id])
|
|
140
|
+
job_status = json.loads(status_result.stdout)
|
|
141
|
+
assert job_status["state"] == "SUCCEEDED"
|
|
142
|
+
|
|
143
|
+
retry(_assert_status, retries=5, sleep=1)
|
|
144
|
+
|
|
145
|
+
parameter_found = target_aws_client.ssm.get_parameter(Name=parameter_name)["Parameter"]
|
|
146
|
+
assert parameter_found["Value"] == "test"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
from localstack_cli.pro.core.cli.replicator import (
|
|
3
|
+
ProfileLoadError,
|
|
4
|
+
get_config_from_profile,
|
|
5
|
+
get_source_config,
|
|
6
|
+
)
|
|
7
|
+
from localstack_cli.utils.strings import short_uid
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@pytest.fixture
|
|
11
|
+
def profile_name():
|
|
12
|
+
return f"profile-{short_uid()}"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@pytest.fixture
|
|
16
|
+
def access_key_id():
|
|
17
|
+
return f"access-key-{short_uid()}"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@pytest.fixture
|
|
21
|
+
def secret_key():
|
|
22
|
+
return f"secret-key-{short_uid()}"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@pytest.fixture
|
|
26
|
+
def profile_region():
|
|
27
|
+
return "us-east-1"
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@pytest.fixture
|
|
31
|
+
def profile_dir(tmpdir, access_key_id, secret_key, profile_name, profile_region):
|
|
32
|
+
config_path = tmpdir / "config"
|
|
33
|
+
credentials_path = tmpdir / "credentials"
|
|
34
|
+
|
|
35
|
+
config = f"""[profile {profile_name}]
|
|
36
|
+
region = {profile_region}
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
credentials = f"""[{profile_name}]
|
|
40
|
+
aws_access_key_id = {access_key_id}
|
|
41
|
+
aws_secret_access_key = {secret_key}
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
with config_path.open("w") as outfile:
|
|
45
|
+
outfile.write(config)
|
|
46
|
+
|
|
47
|
+
with credentials_path.open("w") as outfile:
|
|
48
|
+
outfile.write(credentials)
|
|
49
|
+
|
|
50
|
+
return tmpdir
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def test_load_profile(tmpdir, profile_name, profile_dir, profile_region, access_key_id, secret_key):
|
|
54
|
+
config = get_config_from_profile(profile_name, profile_dir)
|
|
55
|
+
|
|
56
|
+
assert config["aws_access_key_id"] == access_key_id
|
|
57
|
+
assert config["aws_secret_access_key"] == secret_key
|
|
58
|
+
assert config.get("aws_session_token") is None
|
|
59
|
+
assert config["region_name"] == profile_region
|
|
60
|
+
assert config["profile_name"] == profile_name
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def test_load_missing_profile(tmpdir, profile_dir):
|
|
64
|
+
invalid_profile_name = f"profile-{short_uid()}"
|
|
65
|
+
with pytest.raises(ProfileLoadError) as exc_info:
|
|
66
|
+
get_config_from_profile(invalid_profile_name, profile_dir)
|
|
67
|
+
|
|
68
|
+
assert str(exc_info.value) == f"Could not find profile '{invalid_profile_name}'"
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def test_envars_override_profile(
|
|
72
|
+
tmpdir, access_key_id, profile_dir, secret_key, profile_name, profile_region, monkeypatch
|
|
73
|
+
):
|
|
74
|
+
monkeypatch.setenv("AWS_PROFILE", profile_name)
|
|
75
|
+
|
|
76
|
+
test_access_key = short_uid()
|
|
77
|
+
monkeypatch.setenv("AWS_ACCESS_KEY_ID", test_access_key)
|
|
78
|
+
test_secret_key = short_uid()
|
|
79
|
+
monkeypatch.setenv("AWS_SECRET_ACCESS_KEY", test_secret_key)
|
|
80
|
+
test_region = short_uid()
|
|
81
|
+
monkeypatch.setenv("AWS_DEFAULT_REGION", test_region)
|
|
82
|
+
|
|
83
|
+
env = get_source_config(profile_dir=profile_dir)
|
|
84
|
+
|
|
85
|
+
assert env.get("aws_access_key_id") == test_access_key
|
|
86
|
+
assert env.get("aws_secret_access_key") == test_secret_key
|
|
87
|
+
assert env.get("region_name") == test_region
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/__init__.py
RENAMED
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/auth.py
RENAMED
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/dns_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/licensingv2.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/bootstrap/pods_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/click_utils.py
RENAMED
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/cloud_pods.py
RENAMED
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/diff_view.py
RENAMED
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/ephemeral.py
RENAMED
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/extensions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/localstack.py
RENAMED
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/replicator.py
RENAMED
|
File without changes
|
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/pro/core/cli/tree_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/analytics/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/analytics/client.py
RENAMED
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/analytics/events.py
RENAMED
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/analytics/logger.py
RENAMED
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/analytics/metadata.py
RENAMED
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/analytics/publisher.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/container_networking.py
RENAMED
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/container_utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/no_exit_argument_parser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{localstack-4.13.2.dev36 → localstack-4.13.2.dev53}/localstack_cli/utils/server/tcp_proxy.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{localstack-4.13.2.dev36/tests/unit/pro → localstack-4.13.2.dev53/tests/integration}/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|