splunk-soar-sdk 3.2.1__tar.gz → 3.2.3__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.
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/PKG-INFO +1 -1
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/docs/app_structure/src_app.rst +1 -1
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/pyproject.toml +1 -1
- splunk_soar_sdk-3.2.3/release_notes.txt +21 -0
- splunk_soar_sdk-3.2.3/release_version.txt +1 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/cli/manifests/processors.py +23 -2
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/meta/dependencies.py +27 -15
- splunk_soar_sdk-3.2.3/tests/cli/manifests/test_python_version_resolution.py +288 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/uv.lock +37 -17
- splunk_soar_sdk-3.2.1/release_notes.txt +0 -21
- splunk_soar_sdk-3.2.1/release_version.txt +0 -1
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/.github/ISSUE_TEMPLATE/bug.md +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/.github/pull_request_template.md +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/.github/utils/github.js +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/.github/utils/update_version.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/.github/workflows/code_quality.yml +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/.github/workflows/commit_hygiene.yml +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/.github/workflows/generate_docs.yml +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/.github/workflows/semantic_release.yml +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/.gitignore +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/.pre-commit-config.yaml +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/.releaserc +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/LICENSE +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/README.md +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/commitlint.config.js +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/docs/api_reference.rst +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/docs/app_structure/index.rst +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/docs/app_structure/pre-commit-config.yaml.rst +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/docs/app_structure/pyproject.toml.rst +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/docs/changelog.rst +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/docs/cli_reference.rst +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/docs/conf.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/docs/custom_views/index.rst +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/docs/custom_views/reusable_components.md +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/docs/custom_views/templates.md +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/docs/custom_views/view_handlers.md +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/docs/getting_started/defining_asset.rst +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/docs/getting_started/first_action.rst +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/docs/getting_started/index.rst +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/docs/getting_started/init_app.rst +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/docs/getting_started/installation.rst +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/docs/getting_started/testing_and_building.rst +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/docs/index.rst +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/abstract.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/action_results.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/actions_manager.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/apis/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/apis/artifact.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/apis/container.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/apis/utils.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/apis/vault.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/app.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/app_cli_runner.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/app_client.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/app_templates/basic_app/.gitignore +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/app_templates/basic_app/.pre-commit-config.yaml +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/app_templates/basic_app/logo.svg +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/app_templates/basic_app/logo_dark.svg +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/app_templates/basic_app/src/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/app_templates/basic_app/uv.lock +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/asset.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/async_utils.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/cli/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/cli/cli.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/cli/init/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/cli/init/cli.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/cli/manifests/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/cli/manifests/cli.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/cli/manifests/deserializers.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/cli/manifests/serializers.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/cli/package/cli.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/cli/package/utils.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/cli/path_utils.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/cli/utils.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/code_renderers/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/code_renderers/action_renderer.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/code_renderers/app_renderer.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/code_renderers/asset_renderer.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/code_renderers/renderer.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/code_renderers/templates/pyproject.toml.jinja +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/code_renderers/toml_renderer.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/colors.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/compat.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/crypto.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/decorators/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/decorators/action.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/decorators/make_request.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/decorators/on_es_poll.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/decorators/on_poll.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/decorators/test_connectivity.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/decorators/view_handler.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/decorators/webhook.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/exceptions.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/field_utils.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/input_spec.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/logging.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/meta/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/meta/actions.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/meta/adapters.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/meta/app.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/meta/datatypes.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/meta/webhooks.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/models/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/models/artifact.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/models/attachment_input.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/models/container.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/models/finding.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/models/vault_attachment.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/models/view.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/params.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/paths.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/py.typed +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/shims/phantom/action_result.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/shims/phantom/app.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/shims/phantom/base_connector.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/shims/phantom/connector_result.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/shims/phantom/consts.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/shims/phantom/encryption_helper.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/shims/phantom/install_info.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/shims/phantom/json_keys.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/shims/phantom/ph_ipc.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/shims/phantom/vault.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/shims/phantom_common/app_interface/app_interface.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/shims/phantom_common/encryption/encryption_manager_factory.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/templates/base/base_template.html +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/templates/base/error.html +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/templates/base/header.html +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/templates/base/logo_header.html +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/templates/components/pie_chart.html +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/templates/widgets/widget_resize_snippet.html +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/templates/widgets/widget_template.html +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/types.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/views/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/views/component_registry.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/views/components/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/views/components/pie_chart.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/views/template_filters.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/views/template_renderer.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/views/view_parser.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/webhooks/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/webhooks/models.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/src/soar_sdk/webhooks/routing.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/test.png +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/test.txt +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/cli/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/cli/datapath_parse.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/cli/manifests/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/cli/manifests/test_processors.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/cli/test_assets/converted_app/actions.py.txt +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/cli/test_cli.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/cli/test_convert_cli.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/cli/test_deserializers.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/cli/test_init_cli.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/cli/test_manifests_cli.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/cli/test_package_cli.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/cli/test_serializers.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/cli/test_utils.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/code_renderers/test_action_renderer.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/conftest.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app/app.json +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app/example_asset.json +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app/logo.svg +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app/logo_dark.svg +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app/pyproject.toml +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app/release_notes/v1.md +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app/src/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app/src/actions/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app/src/actions/async_action.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app/src/actions/generate_category.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app/src/actions/reverse_string.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app/src/app.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app/src/ignoreme.txt +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app/templates/reverse_string.html +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app/uv.lock +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app_with_webhook/app.json +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app_with_webhook/logo.svg +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app_with_webhook/logo_dark.svg +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app_with_webhook/pyproject.toml +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app_with_webhook/src/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app_with_webhook/src/app.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/example_app_with_webhook/uv.lock +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/interfaces/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/interfaces/test_artifact_interface.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/interfaces/test_container_interface.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/interfaces/test_vault_interface.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/meta/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/meta/test_actions.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/meta/test_adapters.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/meta/test_datatypes.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/meta/test_dependencies.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/meta/test_webhooks.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/mocks/__init__.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/mocks/dynamic_mocks.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/mocks/importable_action.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/stubs.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_action_results.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_actions_manager.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_app.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_app_action.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_app_action_params.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_app_action_results.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_app_client.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_app_runner.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_asset.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_assets/splunk-sdk-2.1.0.tar.gz +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_async_integration.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_async_utils.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_attachment_input.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_code_renderers.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_compat.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_container.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_custom_views.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_encryption.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_es_on_poll.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_field_utils.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_finding.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_input_spec.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_logging.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_make_request_action.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_on_poll.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_params.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_template_filters.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_template_renderer.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_test_connectivity.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/test_view_parser.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/webhooks/test_models.py +0 -0
- {splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/tests/webhooks/test_routing.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: splunk-soar-sdk
|
|
3
|
-
Version: 3.2.
|
|
3
|
+
Version: 3.2.3
|
|
4
4
|
Summary: The official framework for developing and testing Splunk SOAR Apps
|
|
5
5
|
Project-URL: Homepage, https://github.com/phantomcyber/splunk-soar-sdk
|
|
6
6
|
Project-URL: Documentation, https://github.com/phantomcyber/splunk-soar-sdk
|
|
@@ -203,7 +203,7 @@ A successful ``test connectivity`` action should return ``None``, and a failure
|
|
|
203
203
|
:lineno-match:
|
|
204
204
|
:pyobject: on_poll
|
|
205
205
|
|
|
206
|
-
``on poll`` is another special action that apps may choose to implement. This action always takes an :class:`~soar_sdk.params.OnPollParams` instance as its parameter. If defined, this action will be called in order to ingest new data into the Splunk
|
|
206
|
+
``on poll`` is another special action that apps may choose to implement. This action always takes an :class:`~soar_sdk.params.OnPollParams` instance as its parameter. If defined, this action will be called in order to ingest new data into the Splunk SOAR platform. The action should yield :class:`~soar_sdk.models.container.Container` and/or :class:`~soar_sdk.models.artifact.Artifact` instances representing the new data to be ingested. The SDK will handle actually creating the containers and artifacts in the platform.
|
|
207
207
|
|
|
208
208
|
Make Request Action
|
|
209
209
|
^^^^^^^^^^^^^^
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
## [3.2.3](https://github.com/phantomcyber/splunk-soar-sdk/compare/3.2.2...3.2.3) (2025-11-25)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* update markupsafe with python 3.14 compatible wheel ([b03feaa](https://github.com/phantomcyber/splunk-soar-sdk/commit/b03feaabf20daf6d5384871d5fdb99db2792f4a4))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## [3.2.3](https://github.com/phantomcyber/splunk-soar-sdk/compare/3.2.2...3.2.3) (2025-11-25)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* update markupsafe with python 3.14 compatible wheel ([b03feaa](https://github.com/phantomcyber/splunk-soar-sdk/commit/b03feaabf20daf6d5384871d5fdb99db2792f4a4))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.2.3
|
|
@@ -5,9 +5,11 @@ from datetime import datetime, UTC
|
|
|
5
5
|
from pathlib import Path
|
|
6
6
|
from pprint import pprint
|
|
7
7
|
|
|
8
|
+
from packaging.specifiers import SpecifierSet
|
|
9
|
+
|
|
8
10
|
from soar_sdk.app import App
|
|
9
11
|
from soar_sdk.cli.path_utils import context_directory
|
|
10
|
-
from soar_sdk.compat import UPDATE_TIME_FORMAT
|
|
12
|
+
from soar_sdk.compat import UPDATE_TIME_FORMAT, PythonVersion
|
|
11
13
|
from soar_sdk.meta.adapters import TOMLDataAdapter
|
|
12
14
|
from soar_sdk.meta.app import AppMeta
|
|
13
15
|
from soar_sdk.meta.dependencies import UvLock
|
|
@@ -24,6 +26,22 @@ class ManifestProcessor:
|
|
|
24
26
|
self.manifest_path = manifest_path
|
|
25
27
|
self.project_context = Path(project_context)
|
|
26
28
|
|
|
29
|
+
def get_target_python_versions(self) -> list[str]:
|
|
30
|
+
"""Get the intersection of project requires-python and SDK-supported versions."""
|
|
31
|
+
sdk_versions = [str(v) for v in PythonVersion.all()]
|
|
32
|
+
|
|
33
|
+
with open(self.project_context / "pyproject.toml") as f:
|
|
34
|
+
requires_python = toml.load(f).get("project", {}).get("requires-python", "")
|
|
35
|
+
|
|
36
|
+
if not requires_python:
|
|
37
|
+
return sdk_versions
|
|
38
|
+
|
|
39
|
+
# Use packaging.specifiers to check version compatibility
|
|
40
|
+
specifier_set = SpecifierSet(requires_python)
|
|
41
|
+
compatible = [version for version in sdk_versions if version in specifier_set]
|
|
42
|
+
|
|
43
|
+
return compatible
|
|
44
|
+
|
|
27
45
|
def build(self, is_sdk_locally_built: bool = False) -> AppMeta:
|
|
28
46
|
"""Builds full AppMeta information including actions and other extra fields."""
|
|
29
47
|
app_meta: AppMeta = self.load_toml_app_meta()
|
|
@@ -41,8 +59,11 @@ class ManifestProcessor:
|
|
|
41
59
|
dep for dep in dependencies if dep.name != "splunk-soar-sdk"
|
|
42
60
|
]
|
|
43
61
|
|
|
62
|
+
# Get target Python versions from requires-python constraint
|
|
63
|
+
target_python_versions = self.get_target_python_versions()
|
|
64
|
+
|
|
44
65
|
app_meta.pip313_dependencies, app_meta.pip314_dependencies = (
|
|
45
|
-
uv_lock.resolve_dependencies(dependencies)
|
|
66
|
+
uv_lock.resolve_dependencies(dependencies, target_python_versions)
|
|
46
67
|
)
|
|
47
68
|
|
|
48
69
|
if app.webhook_meta is not None:
|
|
@@ -496,23 +496,35 @@ class UvLock(BaseModel):
|
|
|
496
496
|
@staticmethod
|
|
497
497
|
def resolve_dependencies(
|
|
498
498
|
packages: list[UvPackage],
|
|
499
|
+
python_versions: list[str] | None = None,
|
|
499
500
|
) -> tuple[DependencyList, DependencyList]:
|
|
500
|
-
"""Resolve the dependencies for the given packages.
|
|
501
|
-
|
|
502
|
-
|
|
501
|
+
"""Resolve the dependencies for the given packages.
|
|
502
|
+
|
|
503
|
+
Args:
|
|
504
|
+
packages: List of packages to resolve dependencies for.
|
|
505
|
+
python_versions: List of Python versions to resolve for (e.g., ["3.13", "3.14"]).
|
|
506
|
+
If None, defaults to ["3.13", "3.14"] for backwards compatibility.
|
|
507
|
+
|
|
508
|
+
Returns:
|
|
509
|
+
Tuple of (py313_dependencies, py314_dependencies).
|
|
510
|
+
"""
|
|
511
|
+
python_versions = python_versions or ["3.13", "3.14"]
|
|
512
|
+
resolve_both = len(python_versions) == 2
|
|
513
|
+
|
|
514
|
+
py313_wheels, py314_wheels = [], []
|
|
503
515
|
|
|
504
516
|
for package in packages:
|
|
505
|
-
wheel_313 = package.resolve_py313()
|
|
506
|
-
wheel_314 = package.resolve_py314()
|
|
507
|
-
|
|
508
|
-
if wheel_313 == wheel_314
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
+
wheel_313 = package.resolve_py313() if "3.13" in python_versions else None
|
|
518
|
+
wheel_314 = package.resolve_py314() if "3.14" in python_versions else None
|
|
519
|
+
|
|
520
|
+
prefix = "shared" if not resolve_both or wheel_313 == wheel_314 else None
|
|
521
|
+
|
|
522
|
+
if wheel_313:
|
|
523
|
+
wheel_313.add_platform_prefix(prefix or "python313")
|
|
524
|
+
py313_wheels.append(wheel_313)
|
|
525
|
+
|
|
526
|
+
if wheel_314:
|
|
527
|
+
wheel_314.add_platform_prefix(prefix or "python314")
|
|
528
|
+
py314_wheels.append(wheel_314)
|
|
517
529
|
|
|
518
530
|
return DependencyList(wheel=py313_wheels), DependencyList(wheel=py314_wheels)
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import textwrap
|
|
2
|
+
import pytest
|
|
3
|
+
from unittest import mock
|
|
4
|
+
|
|
5
|
+
from soar_sdk.cli.manifests.processors import ManifestProcessor
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class TestGetTargetPythonVersions:
|
|
9
|
+
"""Test the get_target_python_versions method that determines which Python versions to build for."""
|
|
10
|
+
|
|
11
|
+
@pytest.fixture
|
|
12
|
+
def mock_pyproject_toml(self, tmp_path):
|
|
13
|
+
"""Create a temporary directory for test pyproject.toml files."""
|
|
14
|
+
return tmp_path
|
|
15
|
+
|
|
16
|
+
def test_both_versions_when_no_constraint(self, mock_pyproject_toml):
|
|
17
|
+
"""When no requires-python is specified, should return all SDK-supported versions."""
|
|
18
|
+
pyproject_content = textwrap.dedent(
|
|
19
|
+
"""
|
|
20
|
+
[project]
|
|
21
|
+
name = "test-app"
|
|
22
|
+
version = "1.0.0"
|
|
23
|
+
"""
|
|
24
|
+
)
|
|
25
|
+
(mock_pyproject_toml / "pyproject.toml").write_text(pyproject_content)
|
|
26
|
+
|
|
27
|
+
processor = ManifestProcessor(
|
|
28
|
+
"manifest.json", project_context=str(mock_pyproject_toml)
|
|
29
|
+
)
|
|
30
|
+
versions = processor.get_target_python_versions()
|
|
31
|
+
|
|
32
|
+
assert versions == ["3.13", "3.14"]
|
|
33
|
+
|
|
34
|
+
def test_only_313_when_constrained(self, mock_pyproject_toml):
|
|
35
|
+
"""When requires-python excludes 3.14, should return only 3.13."""
|
|
36
|
+
pyproject_content = textwrap.dedent(
|
|
37
|
+
"""
|
|
38
|
+
[project]
|
|
39
|
+
name = "test-app"
|
|
40
|
+
version = "1.0.0"
|
|
41
|
+
requires-python = ">=3.13, <3.14"
|
|
42
|
+
"""
|
|
43
|
+
)
|
|
44
|
+
(mock_pyproject_toml / "pyproject.toml").write_text(pyproject_content)
|
|
45
|
+
|
|
46
|
+
processor = ManifestProcessor(
|
|
47
|
+
"manifest.json", project_context=str(mock_pyproject_toml)
|
|
48
|
+
)
|
|
49
|
+
versions = processor.get_target_python_versions()
|
|
50
|
+
|
|
51
|
+
assert versions == ["3.13"]
|
|
52
|
+
|
|
53
|
+
def test_only_314_when_constrained(self, mock_pyproject_toml):
|
|
54
|
+
"""When requires-python excludes 3.13, should return only 3.14."""
|
|
55
|
+
pyproject_content = textwrap.dedent(
|
|
56
|
+
"""
|
|
57
|
+
[project]
|
|
58
|
+
name = "test-app"
|
|
59
|
+
version = "1.0.0"
|
|
60
|
+
requires-python = ">=3.14"
|
|
61
|
+
"""
|
|
62
|
+
)
|
|
63
|
+
(mock_pyproject_toml / "pyproject.toml").write_text(pyproject_content)
|
|
64
|
+
|
|
65
|
+
processor = ManifestProcessor(
|
|
66
|
+
"manifest.json", project_context=str(mock_pyproject_toml)
|
|
67
|
+
)
|
|
68
|
+
versions = processor.get_target_python_versions()
|
|
69
|
+
|
|
70
|
+
assert versions == ["3.14"]
|
|
71
|
+
|
|
72
|
+
def test_both_versions_with_inclusive_range(self, mock_pyproject_toml):
|
|
73
|
+
"""When requires-python includes both 3.13 and 3.14, should return both."""
|
|
74
|
+
pyproject_content = textwrap.dedent(
|
|
75
|
+
"""
|
|
76
|
+
[project]
|
|
77
|
+
name = "test-app"
|
|
78
|
+
version = "1.0.0"
|
|
79
|
+
requires-python = ">=3.13, <=3.14"
|
|
80
|
+
"""
|
|
81
|
+
)
|
|
82
|
+
(mock_pyproject_toml / "pyproject.toml").write_text(pyproject_content)
|
|
83
|
+
|
|
84
|
+
processor = ManifestProcessor(
|
|
85
|
+
"manifest.json", project_context=str(mock_pyproject_toml)
|
|
86
|
+
)
|
|
87
|
+
versions = processor.get_target_python_versions()
|
|
88
|
+
|
|
89
|
+
assert versions == ["3.13", "3.14"]
|
|
90
|
+
|
|
91
|
+
def test_empty_when_no_match(self, mock_pyproject_toml):
|
|
92
|
+
"""When requires-python doesn't match any SDK versions, should return empty."""
|
|
93
|
+
pyproject_content = textwrap.dedent(
|
|
94
|
+
"""
|
|
95
|
+
[project]
|
|
96
|
+
name = "test-app"
|
|
97
|
+
version = "1.0.0"
|
|
98
|
+
requires-python = ">=3.15"
|
|
99
|
+
"""
|
|
100
|
+
)
|
|
101
|
+
(mock_pyproject_toml / "pyproject.toml").write_text(pyproject_content)
|
|
102
|
+
|
|
103
|
+
processor = ManifestProcessor(
|
|
104
|
+
"manifest.json", project_context=str(mock_pyproject_toml)
|
|
105
|
+
)
|
|
106
|
+
versions = processor.get_target_python_versions()
|
|
107
|
+
|
|
108
|
+
assert versions == []
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
class TestResolveDependencies:
|
|
112
|
+
"""Test the resolve_dependencies method that determines which wheels to include."""
|
|
113
|
+
|
|
114
|
+
@pytest.fixture
|
|
115
|
+
def mock_package(self):
|
|
116
|
+
"""Create a mock package with resolve methods that return DependencyWheel objects."""
|
|
117
|
+
from soar_sdk.meta.dependencies import DependencyWheel, UvWheel
|
|
118
|
+
|
|
119
|
+
package = mock.Mock()
|
|
120
|
+
|
|
121
|
+
# Create proper DependencyWheel objects
|
|
122
|
+
wheel_313 = DependencyWheel(
|
|
123
|
+
module="test_package",
|
|
124
|
+
input_file="test_package-1.0.0-cp313-cp313-manylinux.whl",
|
|
125
|
+
wheel=UvWheel(
|
|
126
|
+
filename="test_package-1.0.0-cp313-cp313-manylinux.whl",
|
|
127
|
+
hash="sha256:abc123",
|
|
128
|
+
),
|
|
129
|
+
)
|
|
130
|
+
wheel_314 = DependencyWheel(
|
|
131
|
+
module="test_package",
|
|
132
|
+
input_file="test_package-1.0.0-cp314-cp314-manylinux.whl",
|
|
133
|
+
wheel=UvWheel(
|
|
134
|
+
filename="test_package-1.0.0-cp314-cp314-manylinux.whl",
|
|
135
|
+
hash="sha256:def456",
|
|
136
|
+
),
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
package.resolve_py313.return_value = wheel_313
|
|
140
|
+
package.resolve_py314.return_value = wheel_314
|
|
141
|
+
|
|
142
|
+
return package, wheel_313, wheel_314
|
|
143
|
+
|
|
144
|
+
def test_resolve_both_versions_by_default(self, mock_package):
|
|
145
|
+
"""When no python_versions specified, should resolve both 3.13 and 3.14."""
|
|
146
|
+
from soar_sdk.meta.dependencies import UvLock
|
|
147
|
+
|
|
148
|
+
package, wheel_313, wheel_314 = mock_package
|
|
149
|
+
|
|
150
|
+
py313_deps, py314_deps = UvLock.resolve_dependencies([package])
|
|
151
|
+
|
|
152
|
+
package.resolve_py313.assert_called_once()
|
|
153
|
+
package.resolve_py314.assert_called_once()
|
|
154
|
+
assert len(py313_deps.wheel) == 1
|
|
155
|
+
assert len(py314_deps.wheel) == 1
|
|
156
|
+
# Should use version-specific prefixes since wheels are different
|
|
157
|
+
assert "python313" in py313_deps.wheel[0].input_file
|
|
158
|
+
assert "python314" in py314_deps.wheel[0].input_file
|
|
159
|
+
|
|
160
|
+
def test_resolve_only_313(self, mock_package):
|
|
161
|
+
"""When python_versions=["3.13"], should only resolve 3.13."""
|
|
162
|
+
from soar_sdk.meta.dependencies import UvLock
|
|
163
|
+
|
|
164
|
+
package, wheel_313, wheel_314 = mock_package
|
|
165
|
+
|
|
166
|
+
py313_deps, py314_deps = UvLock.resolve_dependencies(
|
|
167
|
+
[package], python_versions=["3.13"]
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
package.resolve_py313.assert_called_once()
|
|
171
|
+
package.resolve_py314.assert_not_called()
|
|
172
|
+
assert len(py313_deps.wheel) == 1
|
|
173
|
+
assert len(py314_deps.wheel) == 0
|
|
174
|
+
# Should use shared prefix since only one version
|
|
175
|
+
assert "shared" in py313_deps.wheel[0].input_file
|
|
176
|
+
|
|
177
|
+
def test_resolve_only_314(self, mock_package):
|
|
178
|
+
"""When python_versions=["3.14"], should only resolve 3.14."""
|
|
179
|
+
from soar_sdk.meta.dependencies import UvLock
|
|
180
|
+
|
|
181
|
+
package, wheel_313, wheel_314 = mock_package
|
|
182
|
+
|
|
183
|
+
py313_deps, py314_deps = UvLock.resolve_dependencies(
|
|
184
|
+
[package], python_versions=["3.14"]
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
package.resolve_py313.assert_not_called()
|
|
188
|
+
package.resolve_py314.assert_called_once()
|
|
189
|
+
assert len(py313_deps.wheel) == 0
|
|
190
|
+
assert len(py314_deps.wheel) == 1
|
|
191
|
+
# Should use shared prefix since only one version
|
|
192
|
+
assert "shared" in py314_deps.wheel[0].input_file
|
|
193
|
+
|
|
194
|
+
def test_shared_prefix_when_wheels_identical(self):
|
|
195
|
+
"""When both versions resolve to identical wheels, should use 'shared' prefix."""
|
|
196
|
+
from soar_sdk.meta.dependencies import UvLock, DependencyWheel, UvWheel
|
|
197
|
+
|
|
198
|
+
package = mock.Mock()
|
|
199
|
+
|
|
200
|
+
# Create identical wheels
|
|
201
|
+
identical_wheel = DependencyWheel(
|
|
202
|
+
module="test_package",
|
|
203
|
+
input_file="test_package-1.0.0-py3-none-any.whl",
|
|
204
|
+
wheel=UvWheel(
|
|
205
|
+
filename="test_package-1.0.0-py3-none-any.whl",
|
|
206
|
+
hash="sha256:same",
|
|
207
|
+
),
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
package.resolve_py313.return_value = identical_wheel
|
|
211
|
+
package.resolve_py314.return_value = identical_wheel
|
|
212
|
+
|
|
213
|
+
py313_deps, py314_deps = UvLock.resolve_dependencies(
|
|
214
|
+
[package], python_versions=["3.13", "3.14"]
|
|
215
|
+
)
|
|
216
|
+
|
|
217
|
+
# Both should use shared prefix
|
|
218
|
+
assert "shared" in py313_deps.wheel[0].input_file
|
|
219
|
+
assert "shared" in py314_deps.wheel[0].input_file
|
|
220
|
+
|
|
221
|
+
def test_version_specific_prefix_when_wheels_different(self, mock_package):
|
|
222
|
+
"""When wheels differ between versions, should use version-specific prefixes."""
|
|
223
|
+
from soar_sdk.meta.dependencies import UvLock
|
|
224
|
+
|
|
225
|
+
package, wheel_313, wheel_314 = mock_package
|
|
226
|
+
|
|
227
|
+
py313_deps, py314_deps = UvLock.resolve_dependencies(
|
|
228
|
+
[package], python_versions=["3.13", "3.14"]
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
# Should use version-specific prefixes since wheels are different
|
|
232
|
+
assert "python313" in py313_deps.wheel[0].input_file
|
|
233
|
+
assert "python314" in py314_deps.wheel[0].input_file
|
|
234
|
+
|
|
235
|
+
def test_shared_prefix_when_only_one_version(self, mock_package):
|
|
236
|
+
"""When only one version is requested, should use 'shared' prefix."""
|
|
237
|
+
from soar_sdk.meta.dependencies import UvLock
|
|
238
|
+
|
|
239
|
+
package, wheel_313, wheel_314 = mock_package
|
|
240
|
+
|
|
241
|
+
py313_deps, py314_deps = UvLock.resolve_dependencies(
|
|
242
|
+
[package], python_versions=["3.13"]
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
assert len(py313_deps.wheel) == 1
|
|
246
|
+
assert "shared" in py313_deps.wheel[0].input_file
|
|
247
|
+
|
|
248
|
+
def test_empty_list_for_unresolved_version(self, mock_package):
|
|
249
|
+
"""When a version is not in python_versions, its dependency list should be empty."""
|
|
250
|
+
from soar_sdk.meta.dependencies import UvLock
|
|
251
|
+
|
|
252
|
+
package, wheel_313, wheel_314 = mock_package
|
|
253
|
+
|
|
254
|
+
# Only resolve 3.13
|
|
255
|
+
py313_deps, py314_deps = UvLock.resolve_dependencies(
|
|
256
|
+
[package], python_versions=["3.13"]
|
|
257
|
+
)
|
|
258
|
+
|
|
259
|
+
# 3.14 list should be empty
|
|
260
|
+
assert len(py314_deps.wheel) == 0
|
|
261
|
+
assert py314_deps.wheel == []
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
class TestIntegration:
|
|
265
|
+
"""Integration tests for the complete workflow."""
|
|
266
|
+
|
|
267
|
+
def test_313_only_project_skips_314_resolution(self, tmp_path):
|
|
268
|
+
"""Test that a project with requires-python='>=3.13, <3.14' doesn't try to resolve 3.14 wheels."""
|
|
269
|
+
pyproject_content = textwrap.dedent(
|
|
270
|
+
"""
|
|
271
|
+
[project]
|
|
272
|
+
name = "test-app"
|
|
273
|
+
version = "1.0.0"
|
|
274
|
+
requires-python = ">=3.13, <3.14"
|
|
275
|
+
dependencies = ["httpx"]
|
|
276
|
+
"""
|
|
277
|
+
)
|
|
278
|
+
(tmp_path / "pyproject.toml").write_text(pyproject_content)
|
|
279
|
+
|
|
280
|
+
processor = ManifestProcessor("manifest.json", project_context=str(tmp_path))
|
|
281
|
+
versions = processor.get_target_python_versions()
|
|
282
|
+
|
|
283
|
+
# Should only get 3.13
|
|
284
|
+
assert versions == ["3.13"]
|
|
285
|
+
|
|
286
|
+
# Verify this would be passed to resolve_dependencies
|
|
287
|
+
# (actual resolution would happen in build(), but we can verify the input)
|
|
288
|
+
assert "3.14" not in versions
|
|
@@ -454,22 +454,42 @@ wheels = [
|
|
|
454
454
|
|
|
455
455
|
[[package]]
|
|
456
456
|
name = "markupsafe"
|
|
457
|
-
version = "3.0.
|
|
458
|
-
source = { registry = "https://pypi.python.org/simple" }
|
|
459
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
460
|
-
wheels = [
|
|
461
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
462
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
463
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
464
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
465
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
466
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
467
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
468
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
469
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
470
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
471
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
472
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
457
|
+
version = "3.0.3"
|
|
458
|
+
source = { registry = "https://pypi.python.org/simple" }
|
|
459
|
+
sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" }
|
|
460
|
+
wheels = [
|
|
461
|
+
{ url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" },
|
|
462
|
+
{ url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" },
|
|
463
|
+
{ url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" },
|
|
464
|
+
{ url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" },
|
|
465
|
+
{ url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" },
|
|
466
|
+
{ url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" },
|
|
467
|
+
{ url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" },
|
|
468
|
+
{ url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" },
|
|
469
|
+
{ url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" },
|
|
470
|
+
{ url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" },
|
|
471
|
+
{ url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" },
|
|
472
|
+
{ url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" },
|
|
473
|
+
{ url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" },
|
|
474
|
+
{ url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" },
|
|
475
|
+
{ url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" },
|
|
476
|
+
{ url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" },
|
|
477
|
+
{ url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" },
|
|
478
|
+
{ url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" },
|
|
479
|
+
{ url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" },
|
|
480
|
+
{ url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" },
|
|
481
|
+
{ url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" },
|
|
482
|
+
{ url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" },
|
|
483
|
+
{ url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" },
|
|
484
|
+
{ url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" },
|
|
485
|
+
{ url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" },
|
|
486
|
+
{ url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" },
|
|
487
|
+
{ url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" },
|
|
488
|
+
{ url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" },
|
|
489
|
+
{ url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" },
|
|
490
|
+
{ url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" },
|
|
491
|
+
{ url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" },
|
|
492
|
+
{ url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" },
|
|
473
493
|
]
|
|
474
494
|
|
|
475
495
|
[[package]]
|
|
@@ -1131,7 +1151,7 @@ wheels = [
|
|
|
1131
1151
|
|
|
1132
1152
|
[[package]]
|
|
1133
1153
|
name = "splunk-soar-sdk"
|
|
1134
|
-
version = "3.2.
|
|
1154
|
+
version = "3.2.3"
|
|
1135
1155
|
source = { editable = "." }
|
|
1136
1156
|
dependencies = [
|
|
1137
1157
|
{ name = "beautifulsoup4", marker = "(platform_machine == 'arm64' and sys_platform == 'darwin') or (platform_machine == 'x86_64' and sys_platform == 'darwin') or (platform_machine == 'aarch64' and sys_platform == 'linux') or (platform_machine == 'x86_64' and sys_platform == 'linux')" },
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
## [3.2.1](https://github.com/phantomcyber/splunk-soar-sdk/compare/3.2.0...3.2.1) (2025-11-06)
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
### Bug Fixes
|
|
5
|
-
|
|
6
|
-
* fix abi3 wheel matching ([719028d](https://github.com/phantomcyber/splunk-soar-sdk/commit/719028dfe3e76f78e4a60b9c3487dba8ca0015d7))
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
## [3.2.1](https://github.com/phantomcyber/splunk-soar-sdk/compare/3.2.0...3.2.1) (2025-11-06)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
### Bug Fixes
|
|
16
|
-
|
|
17
|
-
* fix abi3 wheel matching ([719028d](https://github.com/phantomcyber/splunk-soar-sdk/commit/719028dfe3e76f78e4a60b9c3487dba8ca0015d7))
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
3.2.1
|
|
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
|
{splunk_soar_sdk-3.2.1 → splunk_soar_sdk-3.2.3}/docs/app_structure/pre-commit-config.yaml.rst
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
|