localstack-sdk-python 0.0.3__tar.gz → 4.3.0__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_sdk_python-4.3.0/.github/workflows/release.yml +133 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/.gitignore +7 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/Makefile +15 -7
- localstack_sdk_python-4.3.0/PKG-INFO +70 -0
- localstack_sdk_python-4.3.0/README.md +56 -0
- localstack_sdk_python-4.3.0/bin/generate.sh +25 -0
- localstack_sdk_python-4.3.0/localstack-sdk-python/localstack/sdk/aws/client.py +186 -0
- localstack_sdk_python-4.3.0/localstack-sdk-python/localstack/sdk/chaos/client.py +69 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/localstack-sdk-python/localstack/sdk/chaos/managers.py +5 -0
- localstack_sdk_python-4.3.0/localstack-sdk-python/localstack/sdk/clients.py +35 -0
- localstack_sdk_python-4.3.0/localstack-sdk-python/localstack/sdk/pods/client.py +115 -0
- localstack_sdk_python-4.3.0/localstack-sdk-python/localstack/sdk/pods/exceptions.py +18 -0
- localstack_sdk_python-4.3.0/localstack-sdk-python/localstack/sdk/state/client.py +19 -0
- localstack_sdk_python-4.3.0/localstack-sdk-python/localstack/sdk/testing/__init__.py +3 -0
- localstack_sdk_python-4.3.0/localstack-sdk-python/localstack/sdk/testing/decorators.py +31 -0
- localstack_sdk_python-4.3.0/localstack-sdk-python/localstack/sdk/testing/pytest/plugins.py +11 -0
- localstack_sdk_python-4.3.0/localstack-sdk-python/localstack/sdk/version.py +21 -0
- localstack_sdk_python-4.3.0/localstack-sdk-python/localstack_sdk_python.egg-info/PKG-INFO +70 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/localstack-sdk-python/localstack_sdk_python.egg-info/SOURCES.txt +35 -8
- localstack_sdk_python-4.3.0/localstack-sdk-python/localstack_sdk_python.egg-info/entry_points.txt +2 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/.openapi-generator/FILES +19 -2
- localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/.openapi-generator/VERSION +1 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/api/__init__.py +1 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/api/aws_api.py +989 -206
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/api/chaos_api.py +43 -43
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/api/default_api.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/api/localstack_api.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/api/pods_api.py +122 -122
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/api/pro_api.py +2373 -496
- localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/localstack/sdk/api/replicator_api.py +1069 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/api/state_api.py +125 -67
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/api_client.py +2 -2
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/configuration.py +155 -40
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/exceptions.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/__init__.py +19 -3
- localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/localstack/sdk/models/action_and_resource.py +98 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/aws_pinpoint_application_id_reference_id_get200_response.py +1 -1
- localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/localstack/sdk/models/check_actions_request.py +100 -0
- localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/localstack/sdk/models/check_actions_request_required_permission_inner.py +90 -0
- localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/localstack/sdk/models/check_actions_response.py +126 -0
- localstack_sdk_python-0.0.3/packages/localstack-sdk-generated/localstack/sdk/models/get_remote200_response.py → localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/localstack/sdk/models/check_actions_response_source_principal.py +10 -12
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/cloud_watch_metrics.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/cloud_watch_metrics_metrics_inner.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/cloud_watch_metrics_metrics_inner_d_inner.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/cloud_watch_metrics_metrics_inner_d_inner_v.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/cloud_watch_metrics_metrics_inner_t.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/cloud_watch_metrics_metrics_inner_v.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/create_remote_request.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/delete_ddb_expired_items200_response.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/fault_rule.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/fault_rule_error.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/get_diagnostics200_response.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/get_diagnostics200_response_logs.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/get_diagnostics200_response_version.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/get_diagnostics200_response_version_host.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/get_diagnostics200_response_version_image_version.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/get_diagnostics200_response_version_localstack_version.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/get_features_and_services200_response.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/get_lambda_runtimes200_response.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/get_ses_messages200_response.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/get_sns_subscription_token200_response.py +1 -1
- localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/localstack/sdk/models/iam_config.py +106 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/init_scripts.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/init_scripts_completed.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/init_scripts_scripts_inner.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/init_scripts_stage.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/init_scripts_stage_scripts_inner.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/list_remotes200_response.py +1 -1
- localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/localstack/sdk/models/load_service.py +88 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/localstack_pods_environment_get200_response.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/localstack_stackinfo_get200_response.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/manage_session_request.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/message.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/network_effects_config.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/pod_list.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/pod_list_cloudpods_inner.py +1 -1
- localstack_sdk_python-0.0.3/packages/localstack-sdk-generated/localstack/sdk/models/list_remotes200_response_remotes_inner.py → localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/localstack/sdk/models/pod_remote.py +5 -5
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/pod_save_request.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/pod_versions.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/pod_versions_versions_inner.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/receive_message_request.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/receive_message_result.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/remote_config.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/remote_config_one_of.py +1 -1
- localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/localstack/sdk/models/replication_config_mock.py +88 -0
- localstack_sdk_python-0.0.3/packages/localstack-sdk-generated/localstack/sdk/models/pod_remote.py → localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/localstack/sdk/models/replication_config_single.py +12 -21
- localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/localstack/sdk/models/replication_job.py +96 -0
- localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/localstack/sdk/models/replication_request.py +107 -0
- localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/localstack/sdk/models/replication_request_source_aws_config.py +96 -0
- localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/localstack/sdk/models/replication_request_target_aws_config.py +96 -0
- localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/localstack/sdk/models/replication_supported_resource.py +94 -0
- localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/localstack/sdk/models/ses_destination.py +92 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/ses_sent_email.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/ses_sent_email_body.py +3 -3
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/session_info.py +1 -1
- localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/localstack/sdk/models/sns_message.py +122 -0
- localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/localstack/sdk/models/sns_platform_endpoint_message.py +105 -0
- localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/localstack/sdk/models/sns_platform_endpoint_response.py +107 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/sns_subscription_token_error.py +1 -1
- localstack_sdk_python-0.0.3/packages/localstack-sdk-generated/localstack/sdk/models/get_sns_sms_messages200_response.py → localstack_sdk_python-4.3.0/packages/localstack-sdk-generated/localstack/sdk/models/snssms_messages_response.py +26 -22
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/state_result.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/store_data200_response.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/update_config_option200_response.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/models/update_config_option_request.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/rest.py +1 -1
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/pyproject.toml +7 -3
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/templates/pyproject.mustache +7 -3
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/pyproject.toml +14 -5
- localstack_sdk_python-4.3.0/tests/conftest.py +1 -0
- localstack_sdk_python-4.3.0/tests/integration/__init__.py +0 -0
- localstack_sdk_python-4.3.0/tests/integration/test_aws.py +225 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/tests/integration/test_pods.py +6 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/tests/integration/test_state.py +2 -8
- localstack_sdk_python-4.3.0/tests/test_client.py +7 -0
- localstack_sdk_python-4.3.0/tests/testing/__init__.py +0 -0
- localstack_sdk_python-4.3.0/tests/testing/test_decorators.py +29 -0
- localstack_sdk_python-4.3.0/tests/testing/test_fixtures.py +12 -0
- localstack_sdk_python-4.3.0/tests/utils.py +36 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/uv.lock +3 -5
- localstack_sdk_python-0.0.3/PKG-INFO +0 -39
- localstack_sdk_python-0.0.3/README.md +0 -26
- localstack_sdk_python-0.0.3/bin/generate.sh +0 -15
- localstack_sdk_python-0.0.3/localstack-sdk-python/localstack/clients.py +0 -18
- localstack_sdk_python-0.0.3/localstack-sdk-python/localstack/sdk/aws/client.py +0 -68
- localstack_sdk_python-0.0.3/localstack-sdk-python/localstack/sdk/chaos/client.py +0 -39
- localstack_sdk_python-0.0.3/localstack-sdk-python/localstack/sdk/pods/client.py +0 -77
- localstack_sdk_python-0.0.3/localstack-sdk-python/localstack/sdk/state/client.py +0 -11
- localstack_sdk_python-0.0.3/localstack-sdk-python/localstack_sdk_python.egg-info/PKG-INFO +0 -39
- localstack_sdk_python-0.0.3/packages/localstack-sdk-generated/.openapi-generator/VERSION +0 -1
- localstack_sdk_python-0.0.3/packages/localstack-sdk-generated/localstack/sdk/models/get_sns_messages200_response.py +0 -103
- localstack_sdk_python-0.0.3/requirements-spec.txt +0 -2
- localstack_sdk_python-0.0.3/scripts/create_spec.py +0 -20
- localstack_sdk_python-0.0.3/tests/integration/test_aws.py +0 -142
- localstack_sdk_python-0.0.3/tests/utils.py +0 -5
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/.github/workflows/test.yml +0 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/LICENSE.txt +0 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/localstack-sdk-python/localstack/sdk/aws/__init__.py +0 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/localstack-sdk-python/localstack/sdk/chaos/__init__.py +0 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/localstack-sdk-python/localstack/sdk/pods/__init__.py +0 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/localstack-sdk-python/localstack/sdk/state/__init__.py +0 -0
- {localstack_sdk_python-0.0.3/tests → localstack_sdk_python-4.3.0/localstack-sdk-python/localstack/sdk/testing/pytest}/__init__.py +0 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/localstack-sdk-python/localstack_sdk_python.egg-info/dependency_links.txt +0 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/localstack-sdk-python/localstack_sdk_python.egg-info/requires.txt +0 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/localstack-sdk-python/localstack_sdk_python.egg-info/top_level.txt +0 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/.gitignore +0 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/.openapi-generator-ignore +0 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/api_response.py +0 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/localstack/sdk/py.typed +0 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/requirements.txt +0 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/packages/localstack-sdk-generated/templates/rest.mustache +0 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/setup.cfg +0 -0
- {localstack_sdk_python-0.0.3/tests/integration → localstack_sdk_python-4.3.0/tests}/__init__.py +0 -0
- {localstack_sdk_python-0.0.3 → localstack_sdk_python-4.3.0}/tests/integration/test_chaos.py +0 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
name: Release LocalStack Python Client
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
repository_dispatch:
|
|
5
|
+
types: [release-sdk]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
inputs:
|
|
8
|
+
version:
|
|
9
|
+
description: The version of the OpenAPI spec to release the client for
|
|
10
|
+
required: true
|
|
11
|
+
|
|
12
|
+
env:
|
|
13
|
+
git_user_name: localstack[bot]
|
|
14
|
+
git_user_email: localstack-bot@users.noreply.github.com
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
|
|
18
|
+
test_python:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
env:
|
|
21
|
+
release: ${{ github.event_name == 'workflow_dispatch' && inputs.version || github.event.client_payload.version}}
|
|
22
|
+
|
|
23
|
+
steps:
|
|
24
|
+
- name: "Pull image"
|
|
25
|
+
run: |
|
|
26
|
+
docker pull localstack/localstack-pro:${{ env.release }}
|
|
27
|
+
|
|
28
|
+
- name: "Checkout"
|
|
29
|
+
uses: actions/checkout@v4
|
|
30
|
+
with:
|
|
31
|
+
# setuptools_scm requires git history to determine the version
|
|
32
|
+
fetch-depth: 0
|
|
33
|
+
|
|
34
|
+
- name: "Set up Python 3.11"
|
|
35
|
+
uses: actions/setup-python@v5
|
|
36
|
+
with:
|
|
37
|
+
python-version: "3.11"
|
|
38
|
+
|
|
39
|
+
- name: "Install uv"
|
|
40
|
+
uses: astral-sh/setup-uv@v3
|
|
41
|
+
|
|
42
|
+
- name: "Generate code from spec"
|
|
43
|
+
run: |
|
|
44
|
+
make clean-generated
|
|
45
|
+
./bin/generate.sh ${{ env.release }}
|
|
46
|
+
|
|
47
|
+
- name: "Prepare git config"
|
|
48
|
+
run: |
|
|
49
|
+
git config user.name ${{ env.git_user_name }}
|
|
50
|
+
git config user.email ${{ env.git_user_email }}
|
|
51
|
+
|
|
52
|
+
- name: "Commit changed code"
|
|
53
|
+
run: |
|
|
54
|
+
# Code automatically generated goes into the packages directory.
|
|
55
|
+
# As we generate code for the version to be released, we commit those changes.
|
|
56
|
+
if git status --porcelain packages/ | grep -q '^'; then
|
|
57
|
+
git add packages/
|
|
58
|
+
git commit -m "Generate code for ${{ env.release }}"
|
|
59
|
+
|
|
60
|
+
echo "Changes committed successfully"
|
|
61
|
+
else
|
|
62
|
+
echo "No changes detected after generating the code"
|
|
63
|
+
fi
|
|
64
|
+
|
|
65
|
+
- name: "Install project"
|
|
66
|
+
run: |
|
|
67
|
+
make install-dev
|
|
68
|
+
|
|
69
|
+
- name: "Install LocalStack"
|
|
70
|
+
run: |
|
|
71
|
+
pip install localstack==${{ env.release }}
|
|
72
|
+
|
|
73
|
+
- name: "Start Localstack"
|
|
74
|
+
env:
|
|
75
|
+
LOCALSTACK_AUTH_TOKEN: ${{ secrets.LOCALSTACK_AUTH_TOKEN }}
|
|
76
|
+
run: |
|
|
77
|
+
source .venv/bin/activate
|
|
78
|
+
DEBUG=1 DISABLE_EVENTS="1" IMAGE_NAME="localstack/localstack-pro:${{ env.release }}" localstack start -d
|
|
79
|
+
localstack wait -t 120 || (python -m localstack.cli.main logs && false)
|
|
80
|
+
|
|
81
|
+
- name: "Run Python Tests"
|
|
82
|
+
env:
|
|
83
|
+
LOCALSTACK_AUTH_TOKEN: ${{ secrets.LOCALSTACK_AUTH_TOKEN }}
|
|
84
|
+
run: |
|
|
85
|
+
make test
|
|
86
|
+
|
|
87
|
+
- name: "Stop Localstack"
|
|
88
|
+
if: success() || failure()
|
|
89
|
+
run: |
|
|
90
|
+
source .venv/bin/activate
|
|
91
|
+
localstack logs
|
|
92
|
+
localstack stop
|
|
93
|
+
|
|
94
|
+
- name: "Install release helper"
|
|
95
|
+
run: |
|
|
96
|
+
curl -o bin/release-helper.sh -L https://api.github.com/repos/localstack/localstack/contents/bin/release-helper.sh -H 'Accept: application/vnd.github.v3.raw'
|
|
97
|
+
chmod +x bin/release-helper.sh
|
|
98
|
+
|
|
99
|
+
- name: "Create the release commit and tag"
|
|
100
|
+
run: |
|
|
101
|
+
bin/release-helper.sh git-commit-release ${{ env.release }}
|
|
102
|
+
|
|
103
|
+
- name: "Publish release to pypi"
|
|
104
|
+
env:
|
|
105
|
+
UV_PUBLISH_TOKEN: ${{ secrets.UV_PUBLISH_TOKEN }}
|
|
106
|
+
run: |
|
|
107
|
+
make install publish
|
|
108
|
+
|
|
109
|
+
- name: "Push the release commit and tag"
|
|
110
|
+
run: |
|
|
111
|
+
git push --follow-tags
|
|
112
|
+
|
|
113
|
+
- name: "Create GitHub release"
|
|
114
|
+
env:
|
|
115
|
+
GITHUB_TOKEN: ${{ secrets.LOCALSTACK_GITHUB_TOKEN }}
|
|
116
|
+
run: gh release create "${{ env.release }}" --generate-notes --draft
|
|
117
|
+
|
|
118
|
+
- name: "Commit and push next development version"
|
|
119
|
+
run: |
|
|
120
|
+
bin/release-helper.sh git-commit-increment
|
|
121
|
+
git push
|
|
122
|
+
|
|
123
|
+
- name: "Publish development version to pypi"
|
|
124
|
+
env:
|
|
125
|
+
UV_PUBLISH_TOKEN: ${{ secrets.UV_PUBLISH_TOKEN }}
|
|
126
|
+
run: |
|
|
127
|
+
make install publish
|
|
128
|
+
|
|
129
|
+
- name: "Show git modifications"
|
|
130
|
+
run: |
|
|
131
|
+
git log --oneline -n 4
|
|
132
|
+
git show HEAD~1
|
|
133
|
+
git show HEAD
|
|
@@ -63,4 +63,10 @@ localstack-pro-azure/tests/otherlangs/dotnet/*/obj
|
|
|
63
63
|
|
|
64
64
|
# setuptools_scm version.py
|
|
65
65
|
*/*/*/*/version.py
|
|
66
|
-
localstack-sdk-python-2/.openapi-generator/
|
|
66
|
+
localstack-sdk-python-2/.openapi-generator/
|
|
67
|
+
|
|
68
|
+
# setuptools_scm version.py
|
|
69
|
+
**/version.py
|
|
70
|
+
|
|
71
|
+
# release helper
|
|
72
|
+
bin/release-helper.sh
|
|
@@ -1,29 +1,37 @@
|
|
|
1
|
-
VENV_CMD ?= python3 -m venv
|
|
2
1
|
VENV_DIR ?= .venv
|
|
3
|
-
VENV_BIN = python3 -m venv
|
|
4
2
|
VENV_RUN = . $(VENV_DIR)/bin/activate
|
|
5
3
|
VENV_ACTIVATE = $(VENV_DIR)/bin/activate
|
|
6
4
|
TEST_PATH ?= .
|
|
7
5
|
TEST_EXEC ?= python -m
|
|
8
6
|
PYTEST_LOGLEVEL ?= warning
|
|
9
|
-
PIP_CMD ?= pip
|
|
10
7
|
|
|
11
8
|
install: ## omit dev dependencies
|
|
9
|
+
uv venv
|
|
12
10
|
uv sync --no-dev
|
|
13
11
|
|
|
14
12
|
install-dev: ## create the venv and install
|
|
13
|
+
uv venv
|
|
15
14
|
uv sync
|
|
16
15
|
|
|
17
|
-
build-spec: ## build the entire localstack api spec (openapi.yaml in the root folder)
|
|
18
|
-
$(VENV_RUN); python scripts/create_spec.py
|
|
19
|
-
|
|
20
16
|
clean: ## Clean up the virtual environment
|
|
21
17
|
rm -rf $(VENV_DIR)
|
|
22
18
|
rm -rf dist/
|
|
23
19
|
|
|
20
|
+
clean-dist:
|
|
21
|
+
rm -rf dist/
|
|
22
|
+
|
|
24
23
|
clean-generated: ## Cleanup generated code
|
|
25
24
|
rm -rf packages/localstack-sdk-generated/localstack/
|
|
26
25
|
|
|
26
|
+
generate: ## Generate the code from the OpenAPI specs
|
|
27
|
+
./bin/generate.sh
|
|
28
|
+
|
|
29
|
+
build:
|
|
30
|
+
uv build --all-packages
|
|
31
|
+
|
|
32
|
+
publish: clean-dist build
|
|
33
|
+
uv publish
|
|
34
|
+
|
|
27
35
|
format:
|
|
28
36
|
($(VENV_RUN); python -m ruff format --exclude packages .; python -m ruff check --output-format=full --exclude packages --fix .)
|
|
29
37
|
|
|
@@ -33,4 +41,4 @@ lint:
|
|
|
33
41
|
test: ## Run automated tests
|
|
34
42
|
($(VENV_RUN); $(TEST_EXEC) pytest --durations=10 --log-cli-level=$(PYTEST_LOGLEVEL) $(PYTEST_ARGS) $(TEST_PATH))
|
|
35
43
|
|
|
36
|
-
.PHONY: clean install install-dev
|
|
44
|
+
.PHONY: clean install install-dev clean clean-dist clean-generated generate build publish format lint test
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: localstack-sdk-python
|
|
3
|
+
Version: 4.3.0
|
|
4
|
+
Summary: Python SDK for LocalStack
|
|
5
|
+
Author-email: LocalStack Team <info@localstack.cloud>
|
|
6
|
+
Project-URL: Homepage, https://localstack.cloud
|
|
7
|
+
Project-URL: Documentation, https://docs.localstack.cloud
|
|
8
|
+
Project-URL: Repository, https://github.com/localstack/localstack-sdk-python.git
|
|
9
|
+
Project-URL: Issues, https://github.com/localstack/localstack-sdk-python/issues
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
License-File: LICENSE.txt
|
|
12
|
+
Requires-Dist: localstack-sdk-generated
|
|
13
|
+
Dynamic: license-file
|
|
14
|
+
|
|
15
|
+
# LocalStack Python SDK
|
|
16
|
+
[](https://pypi.org/project/localstack-sdk-python/)
|
|
17
|
+
[](https://github.com/localstack/localstack-sdk-python/actions/workflows/test.yml)
|
|
18
|
+
|
|
19
|
+
This is the Python SDK for LocalStack.
|
|
20
|
+
LocalStack offers a number of developer endpoints (see [docs](https://docs.localstack.cloud/references/internal-endpoints/)).
|
|
21
|
+
This SDK provides a programmatic and easy way to interact with them.
|
|
22
|
+
|
|
23
|
+
> [!WARNING]
|
|
24
|
+
> This project is still in a preview phase and will be subject to fast and breaking changes.
|
|
25
|
+
|
|
26
|
+
### Project Structure
|
|
27
|
+
|
|
28
|
+
This project is composed by two Python packages:
|
|
29
|
+
|
|
30
|
+
- `packages/localstack-sdk-generated`: generated from the LocalStack's OpenAPI specs with [openapi-generator](https://github.com/OpenAPITools/openapi-generator).
|
|
31
|
+
The LocalStack's OpenAPI specs are available in [localstack/openapi](https://github.com/localstack/openapi).
|
|
32
|
+
This package is not meant to be manually modified, as it needs to be generated every time from the specs.
|
|
33
|
+
- `localstack-sdk-python`: the user-facing SDK that consumed `localstack-sdk-generated` as its main dependency.
|
|
34
|
+
|
|
35
|
+
### Installation
|
|
36
|
+
|
|
37
|
+
You can install the LocalStack Python SDK with `pip`:
|
|
38
|
+
|
|
39
|
+
```shell
|
|
40
|
+
pip install localstack-sdk-python
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
#### From Source
|
|
44
|
+
|
|
45
|
+
This project uses [uv](https://github.com/astral-sh/uv) as a package manager.
|
|
46
|
+
On a Unix system, you can install `uv` with the standalone installer:
|
|
47
|
+
|
|
48
|
+
```shell
|
|
49
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Once `uv` is installed, you can install the project from source with:
|
|
53
|
+
|
|
54
|
+
```shell
|
|
55
|
+
make install
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
To run the integration test suite:
|
|
59
|
+
|
|
60
|
+
```shell
|
|
61
|
+
make test
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Note that LocalStack Pro (with the same version as the SDK) should be running in the background to execute the test.
|
|
65
|
+
|
|
66
|
+
### Quickstart
|
|
67
|
+
|
|
68
|
+
To get started with our SDK, check out the [official documentation on https://docs.localstack.cloud](https://docs.localstack.cloud/user-guide/tools/localstack-sdk/python/).
|
|
69
|
+
You'll find comprehensive guides and detailed code samples that demonstrate how to use the various features provided
|
|
70
|
+
by the SDK.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# LocalStack Python SDK
|
|
2
|
+
[](https://pypi.org/project/localstack-sdk-python/)
|
|
3
|
+
[](https://github.com/localstack/localstack-sdk-python/actions/workflows/test.yml)
|
|
4
|
+
|
|
5
|
+
This is the Python SDK for LocalStack.
|
|
6
|
+
LocalStack offers a number of developer endpoints (see [docs](https://docs.localstack.cloud/references/internal-endpoints/)).
|
|
7
|
+
This SDK provides a programmatic and easy way to interact with them.
|
|
8
|
+
|
|
9
|
+
> [!WARNING]
|
|
10
|
+
> This project is still in a preview phase and will be subject to fast and breaking changes.
|
|
11
|
+
|
|
12
|
+
### Project Structure
|
|
13
|
+
|
|
14
|
+
This project is composed by two Python packages:
|
|
15
|
+
|
|
16
|
+
- `packages/localstack-sdk-generated`: generated from the LocalStack's OpenAPI specs with [openapi-generator](https://github.com/OpenAPITools/openapi-generator).
|
|
17
|
+
The LocalStack's OpenAPI specs are available in [localstack/openapi](https://github.com/localstack/openapi).
|
|
18
|
+
This package is not meant to be manually modified, as it needs to be generated every time from the specs.
|
|
19
|
+
- `localstack-sdk-python`: the user-facing SDK that consumed `localstack-sdk-generated` as its main dependency.
|
|
20
|
+
|
|
21
|
+
### Installation
|
|
22
|
+
|
|
23
|
+
You can install the LocalStack Python SDK with `pip`:
|
|
24
|
+
|
|
25
|
+
```shell
|
|
26
|
+
pip install localstack-sdk-python
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
#### From Source
|
|
30
|
+
|
|
31
|
+
This project uses [uv](https://github.com/astral-sh/uv) as a package manager.
|
|
32
|
+
On a Unix system, you can install `uv` with the standalone installer:
|
|
33
|
+
|
|
34
|
+
```shell
|
|
35
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Once `uv` is installed, you can install the project from source with:
|
|
39
|
+
|
|
40
|
+
```shell
|
|
41
|
+
make install
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
To run the integration test suite:
|
|
45
|
+
|
|
46
|
+
```shell
|
|
47
|
+
make test
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Note that LocalStack Pro (with the same version as the SDK) should be running in the background to execute the test.
|
|
51
|
+
|
|
52
|
+
### Quickstart
|
|
53
|
+
|
|
54
|
+
To get started with our SDK, check out the [official documentation on https://docs.localstack.cloud](https://docs.localstack.cloud/user-guide/tools/localstack-sdk/python/).
|
|
55
|
+
You'll find comprehensive guides and detailed code samples that demonstrate how to use the various features provided
|
|
56
|
+
by the SDK.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Use the latest spec by default
|
|
4
|
+
SPEC_URL="https://raw.githubusercontent.com/localstack/openapi/refs/heads/main/openapi/emulators/localstack-spec-latest.yml"
|
|
5
|
+
|
|
6
|
+
if [ -n "$1" ]; then
|
|
7
|
+
SPEC_URL="https://github.com/localstack/openapi/releases/download/v$1/localstack-spec.yml"
|
|
8
|
+
fi
|
|
9
|
+
|
|
10
|
+
# Check if the URL is valid
|
|
11
|
+
if ! wget --spider -q "$SPEC_URL"; then
|
|
12
|
+
echo "Spec URL seems not accessible: $SPEC_URL"
|
|
13
|
+
exit 1
|
|
14
|
+
fi
|
|
15
|
+
|
|
16
|
+
docker run --rm -v "${PWD}:/local" openapitools/openapi-generator-cli:v7.10.0 generate \
|
|
17
|
+
-i "$SPEC_URL" \
|
|
18
|
+
--skip-validate-spec \
|
|
19
|
+
-g python \
|
|
20
|
+
-o /local//packages/localstack-sdk-generated \
|
|
21
|
+
--global-property models,apis,supportingFiles \
|
|
22
|
+
-p packageName=localstack.sdk \
|
|
23
|
+
--template-dir /local/packages/localstack-sdk-generated/templates \
|
|
24
|
+
--global-property apiTests=false,modelTests=false \
|
|
25
|
+
--global-property apiDocs=false,modelDocs=False
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import json
|
|
2
|
+
|
|
3
|
+
from localstack.sdk.api.aws_api import AwsApi
|
|
4
|
+
from localstack.sdk.clients import BaseClient
|
|
5
|
+
from localstack.sdk.models import (
|
|
6
|
+
Message,
|
|
7
|
+
SesSentEmail,
|
|
8
|
+
SNSPlatformEndpointResponse,
|
|
9
|
+
SNSSMSMessagesResponse,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _from_sqs_query_to_json(xml_dict: dict) -> list[Message]:
|
|
14
|
+
"""
|
|
15
|
+
todo: developer endpoint implements sqs-query protocol. Remove this workaround one we move them to json.
|
|
16
|
+
"""
|
|
17
|
+
raw_messages = (
|
|
18
|
+
xml_dict.get("ReceiveMessageResponse", {}).get("ReceiveMessageResult", {}) or {}
|
|
19
|
+
).get("Message", [])
|
|
20
|
+
if isinstance(raw_messages, dict):
|
|
21
|
+
raw_messages = [raw_messages]
|
|
22
|
+
messages = []
|
|
23
|
+
for msg in raw_messages:
|
|
24
|
+
_attributes = msg.get("Attribute", [])
|
|
25
|
+
attributes = {i["Name"]: i["Value"] for i in _attributes}
|
|
26
|
+
_m = {
|
|
27
|
+
"MessageId": msg.get("MessageId"),
|
|
28
|
+
"ReceiptHandle": msg.get("ReceiptHandle"),
|
|
29
|
+
"MD5OfBody": msg.get("MD5OfBody"),
|
|
30
|
+
"Body": msg.get("Body"),
|
|
31
|
+
"Attributes": attributes,
|
|
32
|
+
}
|
|
33
|
+
m = Message.from_dict(_m)
|
|
34
|
+
messages.append(m)
|
|
35
|
+
return messages
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class AWSClient(BaseClient):
|
|
39
|
+
"""
|
|
40
|
+
The client to interact with all the LocalStack's AWS endpoints.
|
|
41
|
+
These endpoints offer specific features in addition to the ones offered by the AWS services. For instance,
|
|
42
|
+
access all the messages withing a SQS without the side effect of deleting them.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
def __init__(self, **kwargs) -> None:
|
|
46
|
+
super().__init__(**kwargs)
|
|
47
|
+
self._client = AwsApi(self._api_client)
|
|
48
|
+
|
|
49
|
+
########
|
|
50
|
+
# SQS
|
|
51
|
+
########
|
|
52
|
+
|
|
53
|
+
def list_sqs_messages(self, account_id: str, region: str, queue_name: str) -> list[Message]:
|
|
54
|
+
"""
|
|
55
|
+
Lists all the SQS messages in a given queue in a specific account id and region, without any side effect.
|
|
56
|
+
|
|
57
|
+
:param account_id: the account id of the queue
|
|
58
|
+
:param region: the region of the queue
|
|
59
|
+
:param queue_name: the name of the queue
|
|
60
|
+
:return: the list of messages in the queue
|
|
61
|
+
"""
|
|
62
|
+
response = self._client.list_sqs_messages_with_http_info(
|
|
63
|
+
account_id=account_id, region=region, queue_name=queue_name
|
|
64
|
+
)
|
|
65
|
+
return _from_sqs_query_to_json(json.loads(response.raw_data))
|
|
66
|
+
|
|
67
|
+
def list_sqs_messages_from_queue_url(self, queue_url: str) -> list[Message]:
|
|
68
|
+
"""
|
|
69
|
+
Lists all the SQS messages in a given queue, without any side effect.
|
|
70
|
+
|
|
71
|
+
:param queue_url: the URL of the queue
|
|
72
|
+
:return: the list of messages in the queue
|
|
73
|
+
"""
|
|
74
|
+
response = self._client.list_all_sqs_messages_with_http_info(queue_url=queue_url)
|
|
75
|
+
return _from_sqs_query_to_json(json.loads(response.raw_data))
|
|
76
|
+
|
|
77
|
+
########
|
|
78
|
+
# SES
|
|
79
|
+
########
|
|
80
|
+
|
|
81
|
+
def get_ses_messages(
|
|
82
|
+
self, id_filter: str | None = None, email_filter: str | None = None
|
|
83
|
+
) -> list[SesSentEmail]:
|
|
84
|
+
"""
|
|
85
|
+
Returns all the in-memory saved SES messages. They can be filtered by message ID and/or message source.
|
|
86
|
+
|
|
87
|
+
:param id_filter: the message id used as filter for the SES messages
|
|
88
|
+
:param email_filter: the message source filter
|
|
89
|
+
:return: a list of email sent with SES
|
|
90
|
+
"""
|
|
91
|
+
response = self._client.get_ses_messages(id=id_filter, email=email_filter)
|
|
92
|
+
return response.messages
|
|
93
|
+
|
|
94
|
+
def discard_ses_messages(self, id_filter: str | None = None) -> None:
|
|
95
|
+
"""
|
|
96
|
+
Clears all SES messages. An ID filter can be provided to delete only a specific message.
|
|
97
|
+
|
|
98
|
+
:param id_filter: the id filter
|
|
99
|
+
:return: None
|
|
100
|
+
"""
|
|
101
|
+
return self._client.discard_ses_messages(id=id_filter)
|
|
102
|
+
|
|
103
|
+
########
|
|
104
|
+
# SNS
|
|
105
|
+
########
|
|
106
|
+
|
|
107
|
+
def get_sns_sms_messages(
|
|
108
|
+
self,
|
|
109
|
+
phone_number: str | None = None,
|
|
110
|
+
account_id: str = "000000000000",
|
|
111
|
+
region: str = "us-east-1",
|
|
112
|
+
) -> SNSSMSMessagesResponse:
|
|
113
|
+
"""
|
|
114
|
+
Returns all SMS messages published to a phone number.
|
|
115
|
+
|
|
116
|
+
:param phone_number: the phone number to which the messages have been published. If not specified, all messages
|
|
117
|
+
are returned.
|
|
118
|
+
:param account_id: the AWS Account ID from which the messages have been published. '000000000000' by default
|
|
119
|
+
:param region: the AWS region from which the messages have been published. us-east-1 by default
|
|
120
|
+
:return:
|
|
121
|
+
"""
|
|
122
|
+
return self._client.get_sns_sms_messages(
|
|
123
|
+
phone_number=phone_number, account_id=account_id, region=region
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
def discard_sns_sms_messages(
|
|
127
|
+
self,
|
|
128
|
+
phone_number: str | None = None,
|
|
129
|
+
account_id: str = "000000000000",
|
|
130
|
+
region: str = "us-east-1",
|
|
131
|
+
) -> None:
|
|
132
|
+
"""
|
|
133
|
+
Discards all SMS messages published to a phone number.
|
|
134
|
+
|
|
135
|
+
:param phone_number: the phone number to which the messages have been published. If not specified, all messages
|
|
136
|
+
are deleted.
|
|
137
|
+
:param account_id: the AWS Account ID from which the messages have been published. '000000000000' by default
|
|
138
|
+
:param region: the AWS region from which the messages have been published. us-east-1 by default
|
|
139
|
+
:return: None
|
|
140
|
+
"""
|
|
141
|
+
return self._client.discard_sns_sms_messages(
|
|
142
|
+
phone_number=phone_number, account_id=account_id, region=region
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
def get_sns_endpoint_messages(
|
|
146
|
+
self,
|
|
147
|
+
endpoint_arn: str | None = None,
|
|
148
|
+
account_id: str = "000000000000",
|
|
149
|
+
region: str = "us-east-1",
|
|
150
|
+
) -> SNSPlatformEndpointResponse:
|
|
151
|
+
"""
|
|
152
|
+
Returns all the messages published to a platform endpoint.
|
|
153
|
+
|
|
154
|
+
:param endpoint_arn: the ARN to which the messages have been published. If not specified, will return all the
|
|
155
|
+
messages.
|
|
156
|
+
:param account_id: the AWS Account ID from which the messages have been published. 000000000000 if not specified
|
|
157
|
+
:param region: the AWS region from which the messages have been published. us-east-1 by default
|
|
158
|
+
:return: a response with the list of messages and the queried region
|
|
159
|
+
"""
|
|
160
|
+
return self._client.get_sns_endpoint_messages(
|
|
161
|
+
endpoint_arn=endpoint_arn, account_id=account_id, region=region
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
def discard_sns_endpoint_messages(
|
|
165
|
+
self,
|
|
166
|
+
endpoint_arn: str | None = None,
|
|
167
|
+
account_id: str = "000000000000",
|
|
168
|
+
region: str = "us-east-1",
|
|
169
|
+
) -> None:
|
|
170
|
+
"""
|
|
171
|
+
Discards all the messaged published to a platform endpoint.
|
|
172
|
+
|
|
173
|
+
:param endpoint_arn: the ARN to which the messages have been published. If not specified, will discard all the
|
|
174
|
+
messages.
|
|
175
|
+
:param account_id: the AWS Account ID from which the messages have been published. 000000000000 if not specified
|
|
176
|
+
:param region: the AWS region from which the messages have been published. us-east-1 by default
|
|
177
|
+
:return: None
|
|
178
|
+
"""
|
|
179
|
+
return self._client.discard_sns_endpoint_messages(
|
|
180
|
+
endpoint_arn=endpoint_arn, account_id=account_id, region=region
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
def get_default(**args) -> AwsApi:
|
|
185
|
+
"""Return a client with a default configuration"""
|
|
186
|
+
return AwsApi(args)
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
from localstack.sdk.api.chaos_api import ChaosApi
|
|
2
|
+
from localstack.sdk.clients import BaseClient
|
|
3
|
+
from localstack.sdk.models import FaultRule, NetworkEffectsConfig
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ChaosClient(BaseClient):
|
|
7
|
+
"""
|
|
8
|
+
The client to interact with the LocalStack's Chaos API.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
def __init__(self, **kwargs) -> None:
|
|
12
|
+
super().__init__(**kwargs)
|
|
13
|
+
self._client = ChaosApi(self._api_client)
|
|
14
|
+
|
|
15
|
+
def set_fault_rules(self, fault_rules: list[FaultRule]) -> list[FaultRule]:
|
|
16
|
+
"""
|
|
17
|
+
Creates a new sets of fault rules. It overwrites the previous ones.
|
|
18
|
+
:param fault_rules: the list of FaultRule we want to set
|
|
19
|
+
:return: the list of FaultRule currently in place
|
|
20
|
+
"""
|
|
21
|
+
return self._client.set_fault_rules(fault_rule=fault_rules)
|
|
22
|
+
|
|
23
|
+
def add_fault_rules(self, fault_rules: list[FaultRule]) -> list[FaultRule]:
|
|
24
|
+
"""
|
|
25
|
+
Adds a new set of rules to the current fault configuration.
|
|
26
|
+
:param fault_rules: the FaultRule rules to add
|
|
27
|
+
:return: the list of FaultRule currently in place
|
|
28
|
+
"""
|
|
29
|
+
return self._client.add_fault_rules(fault_rule=fault_rules)
|
|
30
|
+
|
|
31
|
+
def delete_fault_rules(self, fault_rules: list[FaultRule]) -> list[FaultRule]:
|
|
32
|
+
"""
|
|
33
|
+
Deletes a set of rules from the fault configuration.
|
|
34
|
+
:param fault_rules: the FaultRule to delete
|
|
35
|
+
:return: the list of FaultRule currently in place
|
|
36
|
+
"""
|
|
37
|
+
return self._client.delete_fault_rules(fault_rule=fault_rules)
|
|
38
|
+
|
|
39
|
+
def get_fault_rules(self) -> list[FaultRule]:
|
|
40
|
+
"""
|
|
41
|
+
Gets the current fault configuration.
|
|
42
|
+
:return: the list of FaultRule of the current configuration
|
|
43
|
+
"""
|
|
44
|
+
return self._client.get_fault_rules()
|
|
45
|
+
|
|
46
|
+
def get_network_effects(self) -> NetworkEffectsConfig:
|
|
47
|
+
"""
|
|
48
|
+
Gets the current network effect configuration.
|
|
49
|
+
:return: the current NetworkEffectsConfig
|
|
50
|
+
"""
|
|
51
|
+
return self._client.get_network_effects()
|
|
52
|
+
|
|
53
|
+
def set_network_effects(
|
|
54
|
+
self, network_effects_config: NetworkEffectsConfig
|
|
55
|
+
) -> NetworkEffectsConfig:
|
|
56
|
+
"""
|
|
57
|
+
Configure a new network effect, e.g, latency.
|
|
58
|
+
:param network_effects_config: the network config to be set
|
|
59
|
+
:return: the current configuration of network effects
|
|
60
|
+
"""
|
|
61
|
+
return self._client.set_network_effects(network_effects_config=network_effects_config)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def get_default(**args) -> ChaosClient:
|
|
65
|
+
"""
|
|
66
|
+
Return a chaos client with a default configuration. You can pass a host argument to overwrite the fault one
|
|
67
|
+
(http://localhost.localstack.cloud:4566).
|
|
68
|
+
"""
|
|
69
|
+
return ChaosClient(**args)
|
|
@@ -6,6 +6,11 @@ from localstack.sdk.models import FaultRule
|
|
|
6
6
|
|
|
7
7
|
@contextmanager
|
|
8
8
|
def fault_configuration(fault_rules: list[FaultRule]):
|
|
9
|
+
"""
|
|
10
|
+
This is a context manager that temporarily applies a given set of fault rules.
|
|
11
|
+
:param fault_rules: a list of FaultRule to be applied.
|
|
12
|
+
:return: None
|
|
13
|
+
"""
|
|
9
14
|
client = get_default()
|
|
10
15
|
try:
|
|
11
16
|
client.set_fault_rules(fault_rules=fault_rules)
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from localstack.sdk import version
|
|
2
|
+
from localstack.sdk.api_client import ApiClient
|
|
3
|
+
from localstack.sdk.configuration import Configuration
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class BaseClient:
|
|
7
|
+
"""
|
|
8
|
+
A BaseClient creates a configuration and instantiate a ApiClient, which is a generic OpenAPI client automatically
|
|
9
|
+
generated by the openapitools/openapi-generator tool.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
configuration: Configuration
|
|
13
|
+
"""The configuration for the base client"""
|
|
14
|
+
_api_client: ApiClient
|
|
15
|
+
"""The OpenAPI client"""
|
|
16
|
+
host: str
|
|
17
|
+
"""The LocalStack host (http://localhost.localstack.cloud:4566 by default)"""
|
|
18
|
+
auth_token: str | None
|
|
19
|
+
"""A client can be injected with a LocalStack auth token. If not provided, the one used to start up the
|
|
20
|
+
LocalStack instance will be used (for the features needing it, e.g., Cloud Pods)."""
|
|
21
|
+
|
|
22
|
+
def __init__(self, host: str | None = None, auth_token: str | None = None, **kwargs) -> None:
|
|
23
|
+
"""
|
|
24
|
+
Initializes a base client to interact with LocalStack developer endpoint.
|
|
25
|
+
:param host: the host, http://localhost.localstack.cloud:4566 by default.
|
|
26
|
+
:param auth_token: if provided, this token would be used for authentication against platform. It not, the
|
|
27
|
+
LocalStack runtime will use the one used to start the container. The token used determines the Cloud
|
|
28
|
+
Pods identity, i.e., which pods are available.
|
|
29
|
+
"""
|
|
30
|
+
self.host = host or "http://localhost.localstack.cloud:4566"
|
|
31
|
+
self.auth_token = auth_token
|
|
32
|
+
self.configuration = Configuration(host=self.host)
|
|
33
|
+
self._api_client = ApiClient(configuration=self.configuration)
|
|
34
|
+
# The generated code comes with 1.0.0 hard-coded. We set here the correct version
|
|
35
|
+
self._api_client.user_agent = f"LocalStack SDK/{version.version}/python"
|