splunk-soar-sdk 2.0.1__tar.gz → 2.1.1__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.
Files changed (219) hide show
  1. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/PKG-INFO +1 -1
  2. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/pyproject.toml +1 -1
  3. splunk_soar_sdk-2.1.1/release_notes.txt +21 -0
  4. splunk_soar_sdk-2.1.1/release_version.txt +1 -0
  5. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/app.py +15 -2
  6. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/decorators/action.py +3 -0
  7. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/meta/actions.py +5 -0
  8. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/example_app/app.json +76 -0
  9. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/example_app/src/app.py +19 -0
  10. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/meta/test_actions.py +21 -0
  11. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_app_action.py +23 -0
  12. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/uv.lock +1 -1
  13. splunk_soar_sdk-2.0.1/release_notes.txt +0 -21
  14. splunk_soar_sdk-2.0.1/release_version.txt +0 -1
  15. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/.github/ISSUE_TEMPLATE/bug.md +0 -0
  16. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  17. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/.github/pull_request_template.md +0 -0
  18. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/.github/utils/github.js +0 -0
  19. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/.github/utils/update_version.py +0 -0
  20. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/.github/workflows/code_quality.yml +0 -0
  21. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/.github/workflows/commit_hygiene.yml +0 -0
  22. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/.github/workflows/generate_docs.yml +0 -0
  23. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/.github/workflows/semantic_release.yml +0 -0
  24. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/.gitignore +0 -0
  25. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/.pre-commit-config.yaml +0 -0
  26. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/.releaserc +0 -0
  27. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/LICENSE +0 -0
  28. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/README.md +0 -0
  29. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/commitlint.config.js +0 -0
  30. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/docs/api_reference.rst +0 -0
  31. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/docs/app_structure/index.rst +0 -0
  32. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/docs/app_structure/pre-commit-config.yaml.rst +0 -0
  33. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/docs/app_structure/pyproject.toml.rst +0 -0
  34. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/docs/app_structure/src_app.rst +0 -0
  35. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/docs/changelog.rst +0 -0
  36. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/docs/cli_reference.rst +0 -0
  37. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/docs/conf.py +0 -0
  38. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/docs/custom_views/index.rst +0 -0
  39. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/docs/custom_views/reusable_components.md +0 -0
  40. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/docs/custom_views/templates.md +0 -0
  41. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/docs/custom_views/view_handlers.md +0 -0
  42. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/docs/getting_started/defining_asset.rst +0 -0
  43. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/docs/getting_started/first_action.rst +0 -0
  44. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/docs/getting_started/index.rst +0 -0
  45. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/docs/getting_started/init_app.rst +0 -0
  46. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/docs/getting_started/installation.rst +0 -0
  47. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/docs/getting_started/testing_and_building.rst +0 -0
  48. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/docs/index.rst +0 -0
  49. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/__init__.py +0 -0
  50. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/abstract.py +0 -0
  51. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/action_results.py +0 -0
  52. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/actions_manager.py +0 -0
  53. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/apis/__init__.py +0 -0
  54. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/apis/artifact.py +0 -0
  55. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/apis/container.py +0 -0
  56. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/apis/utils.py +0 -0
  57. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/apis/vault.py +0 -0
  58. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/app_cli_runner.py +0 -0
  59. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/app_client.py +0 -0
  60. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/app_templates/basic_app/.gitignore +0 -0
  61. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/app_templates/basic_app/.pre-commit-config.yaml +0 -0
  62. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/app_templates/basic_app/logo.svg +0 -0
  63. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/app_templates/basic_app/logo_dark.svg +0 -0
  64. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/app_templates/basic_app/src/__init__.py +0 -0
  65. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/app_templates/basic_app/uv.lock +0 -0
  66. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/asset.py +0 -0
  67. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/async_utils.py +0 -0
  68. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/cli/__init__.py +0 -0
  69. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/cli/cli.py +0 -0
  70. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/cli/init/__init__.py +0 -0
  71. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/cli/init/cli.py +0 -0
  72. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/cli/manifests/__init__.py +0 -0
  73. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/cli/manifests/cli.py +0 -0
  74. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/cli/manifests/deserializers.py +0 -0
  75. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/cli/manifests/processors.py +0 -0
  76. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/cli/manifests/serializers.py +0 -0
  77. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/cli/package/cli.py +0 -0
  78. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/cli/package/utils.py +0 -0
  79. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/cli/path_utils.py +0 -0
  80. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/cli/utils.py +0 -0
  81. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/code_renderers/__init__.py +0 -0
  82. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/code_renderers/action_renderer.py +0 -0
  83. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/code_renderers/app_renderer.py +0 -0
  84. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/code_renderers/asset_renderer.py +0 -0
  85. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/code_renderers/renderer.py +0 -0
  86. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/code_renderers/templates/pyproject.toml.jinja +0 -0
  87. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/code_renderers/toml_renderer.py +0 -0
  88. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/colors.py +0 -0
  89. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/compat.py +0 -0
  90. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/crypto.py +0 -0
  91. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/decorators/__init__.py +0 -0
  92. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/decorators/make_request.py +0 -0
  93. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/decorators/on_poll.py +0 -0
  94. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/decorators/test_connectivity.py +0 -0
  95. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/decorators/view_handler.py +0 -0
  96. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/decorators/webhook.py +0 -0
  97. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/exceptions.py +0 -0
  98. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/input_spec.py +0 -0
  99. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/logging.py +0 -0
  100. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/meta/__init__.py +0 -0
  101. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/meta/adapters.py +0 -0
  102. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/meta/app.py +0 -0
  103. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/meta/datatypes.py +0 -0
  104. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/meta/dependencies.py +0 -0
  105. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/meta/webhooks.py +0 -0
  106. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/models/__init__.py +0 -0
  107. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/models/artifact.py +0 -0
  108. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/models/container.py +0 -0
  109. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/models/vault_attachment.py +0 -0
  110. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/models/view.py +0 -0
  111. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/params.py +0 -0
  112. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/paths.py +0 -0
  113. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/py.typed +0 -0
  114. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/shims/phantom/action_result.py +0 -0
  115. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/shims/phantom/app.py +0 -0
  116. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/shims/phantom/base_connector.py +0 -0
  117. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/shims/phantom/connector_result.py +0 -0
  118. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/shims/phantom/consts.py +0 -0
  119. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/shims/phantom/encryption_helper.py +0 -0
  120. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/shims/phantom/install_info.py +0 -0
  121. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/shims/phantom/json_keys.py +0 -0
  122. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/shims/phantom/ph_ipc.py +0 -0
  123. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/shims/phantom/vault.py +0 -0
  124. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/shims/phantom_common/app_interface/app_interface.py +0 -0
  125. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/shims/phantom_common/encryption/encryption_manager_factory.py +0 -0
  126. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/templates/base/base_template.html +0 -0
  127. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/templates/base/error.html +0 -0
  128. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/templates/base/header.html +0 -0
  129. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/templates/base/logo_header.html +0 -0
  130. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/templates/components/pie_chart.html +0 -0
  131. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/templates/widgets/widget_resize_snippet.html +0 -0
  132. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/templates/widgets/widget_template.html +0 -0
  133. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/types.py +0 -0
  134. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/views/__init__.py +0 -0
  135. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/views/component_registry.py +0 -0
  136. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/views/components/__init__.py +0 -0
  137. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/views/components/pie_chart.py +0 -0
  138. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/views/template_filters.py +0 -0
  139. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/views/template_renderer.py +0 -0
  140. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/views/view_parser.py +0 -0
  141. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/webhooks/__init__.py +0 -0
  142. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/webhooks/models.py +0 -0
  143. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/src/soar_sdk/webhooks/routing.py +0 -0
  144. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/test.png +0 -0
  145. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/test.txt +0 -0
  146. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/__init__.py +0 -0
  147. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/cli/__init__.py +0 -0
  148. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/cli/datapath_parse.py +0 -0
  149. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/cli/manifests/__init__.py +0 -0
  150. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/cli/manifests/test_processors.py +0 -0
  151. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/cli/test_assets/converted_app/actions.py.txt +0 -0
  152. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/cli/test_cli.py +0 -0
  153. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/cli/test_convert_cli.py +0 -0
  154. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/cli/test_deserializers.py +0 -0
  155. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/cli/test_init_cli.py +0 -0
  156. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/cli/test_manifests_cli.py +0 -0
  157. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/cli/test_package_cli.py +0 -0
  158. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/cli/test_serializers.py +0 -0
  159. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/cli/test_utils.py +0 -0
  160. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/code_renderers/test_action_renderer.py +0 -0
  161. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/conftest.py +0 -0
  162. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/example_app/example_asset.json +0 -0
  163. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/example_app/logo.svg +0 -0
  164. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/example_app/logo_dark.svg +0 -0
  165. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/example_app/pyproject.toml +0 -0
  166. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/example_app/src/__init__.py +0 -0
  167. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/example_app/src/actions/__init__.py +0 -0
  168. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/example_app/src/actions/async_action.py +0 -0
  169. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/example_app/src/actions/generate_category.py +0 -0
  170. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/example_app/src/actions/reverse_string.py +0 -0
  171. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/example_app/src/ignoreme.txt +0 -0
  172. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/example_app/templates/reverse_string.html +0 -0
  173. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/example_app/uv.lock +0 -0
  174. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/example_app_with_webhook/app.json +0 -0
  175. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/example_app_with_webhook/logo.svg +0 -0
  176. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/example_app_with_webhook/logo_dark.svg +0 -0
  177. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/example_app_with_webhook/pyproject.toml +0 -0
  178. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/example_app_with_webhook/src/__init__.py +0 -0
  179. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/example_app_with_webhook/src/app.py +0 -0
  180. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/example_app_with_webhook/uv.lock +0 -0
  181. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/interfaces/__init__.py +0 -0
  182. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/interfaces/test_artifact_interface.py +0 -0
  183. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/interfaces/test_container_interface.py +0 -0
  184. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/interfaces/test_vault_interface.py +0 -0
  185. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/meta/__init__.py +0 -0
  186. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/meta/test_adapters.py +0 -0
  187. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/meta/test_datatypes.py +0 -0
  188. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/meta/test_dependencies.py +0 -0
  189. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/meta/test_webhooks.py +0 -0
  190. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/mocks/__init__.py +0 -0
  191. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/mocks/dynamic_mocks.py +0 -0
  192. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/mocks/importable_action.py +0 -0
  193. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/stubs.py +0 -0
  194. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_action_results.py +0 -0
  195. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_actions_manager.py +0 -0
  196. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_app.py +0 -0
  197. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_app_action_params.py +0 -0
  198. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_app_action_results.py +0 -0
  199. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_app_client.py +0 -0
  200. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_app_runner.py +0 -0
  201. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_asset.py +0 -0
  202. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_assets/splunk-sdk-2.1.0.tar.gz +0 -0
  203. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_async_integration.py +0 -0
  204. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_async_utils.py +0 -0
  205. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_code_renderers.py +0 -0
  206. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_compat.py +0 -0
  207. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_container.py +0 -0
  208. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_custom_views.py +0 -0
  209. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_encryption.py +0 -0
  210. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_logging.py +0 -0
  211. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_make_request_action.py +0 -0
  212. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_on_poll.py +0 -0
  213. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_params.py +0 -0
  214. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_template_filters.py +0 -0
  215. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_template_renderer.py +0 -0
  216. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_test_connectivity.py +0 -0
  217. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/test_view_parser.py +0 -0
  218. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/tests/webhooks/test_models.py +0 -0
  219. {splunk_soar_sdk-2.0.1 → splunk_soar_sdk-2.1.1}/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: 2.0.1
3
+ Version: 2.1.1
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "splunk-soar-sdk"
3
- version = "2.0.1"
3
+ version = "2.1.1"
4
4
  description = "The official framework for developing and testing Splunk SOAR Apps"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.9, <3.14"
@@ -0,0 +1,21 @@
1
+ ## [2.1.1](https://github.com/phantomcyber/splunk-soar-sdk/compare/2.1.0...2.1.1) (2025-09-30)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * list output fixes ([f1d9b89](https://github.com/phantomcyber/splunk-soar-sdk/commit/f1d9b8998cbed7a82e83b3813b7fa0b61de13180))
7
+
8
+
9
+
10
+
11
+
12
+ ## [2.1.1](https://github.com/phantomcyber/splunk-soar-sdk/compare/2.1.0...2.1.1) (2025-09-30)
13
+
14
+
15
+ ### Bug Fixes
16
+
17
+ * list output fixes ([f1d9b89](https://github.com/phantomcyber/splunk-soar-sdk/commit/f1d9b8998cbed7a82e83b3813b7fa0b61de13180))
18
+
19
+
20
+
21
+
@@ -0,0 +1 @@
1
+ 2.1.1
@@ -241,6 +241,7 @@ class App:
241
241
  view_template: Optional[str] = None,
242
242
  versions: str = "EQ(*)",
243
243
  summary_type: Optional[type[ActionOutput]] = None,
244
+ enable_concurrency_lock: bool = False,
244
245
  ) -> Action:
245
246
  """Dynamically register an action function defined in another module.
246
247
 
@@ -301,6 +302,7 @@ class App:
301
302
  versions: Version constraint string for when this action is available.
302
303
  Defaults to "EQ(*)" (all versions).
303
304
  summary_type: Pydantic model class for structuring action summary output.
305
+ enable_concurrency_lock: Whether to enable a concurrency lock for this action. Defaults to False.
304
306
 
305
307
  Returns:
306
308
  The registered Action instance with all metadata and handlers configured.
@@ -356,6 +358,7 @@ class App:
356
358
  view_handler=view_handler,
357
359
  versions=versions,
358
360
  summary_type=summary_type,
361
+ enable_concurrency_lock=enable_concurrency_lock,
359
362
  )(action)
360
363
 
361
364
  def _resolve_function_import(self, action_path: str) -> Callable:
@@ -421,6 +424,7 @@ class App:
421
424
  view_handler: Optional[Callable] = None,
422
425
  versions: str = "EQ(*)",
423
426
  summary_type: Optional[type[ActionOutput]] = None,
427
+ enable_concurrency_lock: bool = False,
424
428
  ) -> ActionDecorator:
425
429
  """Decorator for registering an action function.
426
430
 
@@ -439,6 +443,7 @@ class App:
439
443
  view_handler=view_handler,
440
444
  versions=versions,
441
445
  summary_type=summary_type,
446
+ enable_concurrency_lock=enable_concurrency_lock,
442
447
  )
443
448
 
444
449
  def test_connectivity(self) -> ConnectivityTestDecorator:
@@ -642,9 +647,17 @@ class App:
642
647
  statuses = []
643
648
  for item in result:
644
649
  statuses.append(
645
- App._adapt_action_result(item, actions_manager, action_params)
650
+ App._adapt_action_result(
651
+ item, actions_manager, action_params, message, summary
652
+ )
653
+ )
654
+ # Handle empty list/iterator case
655
+ if not statuses:
656
+ result = ActionOutput(
657
+ status=True, message=message or "Action completed successfully"
646
658
  )
647
- return all(statuses)
659
+ else:
660
+ return all(statuses)
648
661
 
649
662
  if isinstance(result, ActionOutput):
650
663
  output_dict = result.dict(by_alias=True)
@@ -42,6 +42,7 @@ class ActionDecorator:
42
42
  view_handler: Optional[Callable] = None,
43
43
  versions: str = "EQ(*)",
44
44
  summary_type: Optional[type[ActionOutput]] = None,
45
+ enable_concurrency_lock: bool = False,
45
46
  ) -> None:
46
47
  self.app = app
47
48
  self.name = name
@@ -55,6 +56,7 @@ class ActionDecorator:
55
56
  self.view_handler = view_handler
56
57
  self.versions = versions
57
58
  self.summary_type = summary_type
59
+ self.enable_concurrency_lock = enable_concurrency_lock
58
60
 
59
61
  def __call__(self, function: Callable) -> Action:
60
62
  """Decorator for the action handling function.
@@ -152,6 +154,7 @@ class ActionDecorator:
152
154
  versions=self.versions,
153
155
  view_handler=self.view_handler,
154
156
  summary_type=self.summary_type,
157
+ enable_concurrency_lock=self.enable_concurrency_lock,
155
158
  )
156
159
 
157
160
  self.app.actions_manager.set_action(action_identifier, inner)
@@ -22,6 +22,7 @@ class ActionMeta(BaseModel):
22
22
  output: Type[ActionOutput] = Field(default=ActionOutput) # noqa: UP006
23
23
  view_handler: Optional[Callable] = None
24
24
  summary_type: Optional[Type[ActionOutput]] = Field(default=None, exclude=True) # noqa: UP006
25
+ enable_concurrency_lock: bool = False
25
26
 
26
27
  def dict(self, *args: Any, **kwargs: Any) -> dict[str, Any]: # noqa: ANN401
27
28
  """Serializes the action metadata to a dictionary."""
@@ -52,4 +53,8 @@ class ActionMeta(BaseModel):
52
53
  # Remove view_handler from the output since in render
53
54
  data.pop("view_handler", None)
54
55
 
56
+ if self.enable_concurrency_lock:
57
+ data["lock"] = {"enabled": True}
58
+ data.pop("enable_concurrency_lock", None)
59
+
55
60
  return data
@@ -99,6 +99,82 @@
99
99
  }
100
100
  ]
101
101
  },
102
+ {
103
+ "action": "test summary with list output",
104
+ "description": "test summary with list output",
105
+ "identifier": "test_summary_with_list_output",
106
+ "output": [
107
+ {
108
+ "data_path": "action_result.status",
109
+ "data_type": "string",
110
+ "example_values": [
111
+ "success",
112
+ "failure"
113
+ ]
114
+ },
115
+ {
116
+ "data_path": "action_result.message",
117
+ "data_type": "string"
118
+ },
119
+ {
120
+ "data_path": "summary.total_objects",
121
+ "data_type": "numeric",
122
+ "example_values": [
123
+ 1
124
+ ]
125
+ },
126
+ {
127
+ "data_path": "summary.total_objects_successful",
128
+ "data_type": "numeric",
129
+ "example_values": [
130
+ 1
131
+ ]
132
+ }
133
+ ],
134
+ "parameters": {},
135
+ "read_only": true,
136
+ "type": "generic",
137
+ "verbose": "",
138
+ "versions": "EQ(*)"
139
+ },
140
+ {
141
+ "action": "test empty list output",
142
+ "description": "test empty list output",
143
+ "identifier": "test_empty_list_output",
144
+ "output": [
145
+ {
146
+ "data_path": "action_result.status",
147
+ "data_type": "string",
148
+ "example_values": [
149
+ "success",
150
+ "failure"
151
+ ]
152
+ },
153
+ {
154
+ "data_path": "action_result.message",
155
+ "data_type": "string"
156
+ },
157
+ {
158
+ "data_path": "summary.total_objects",
159
+ "data_type": "numeric",
160
+ "example_values": [
161
+ 1
162
+ ]
163
+ },
164
+ {
165
+ "data_path": "summary.total_objects_successful",
166
+ "data_type": "numeric",
167
+ "example_values": [
168
+ 1
169
+ ]
170
+ }
171
+ ],
172
+ "parameters": {},
173
+ "read_only": true,
174
+ "type": "generic",
175
+ "verbose": "",
176
+ "versions": "EQ(*)"
177
+ },
102
178
  {
103
179
  "action": "reverse string",
104
180
  "identifier": "reverse_string",
@@ -53,6 +53,25 @@ def test_connectivity(soar: SOARClient, asset: Asset) -> None:
53
53
  logger.progress("this is a progress message")
54
54
 
55
55
 
56
+ class ActionOutputSummary(ActionOutput):
57
+ is_success: bool
58
+
59
+
60
+ @app.action()
61
+ def test_summary_with_list_output(
62
+ params: Params, asset: Asset, soar: SOARClient
63
+ ) -> list[ActionOutput]:
64
+ soar.set_summary(ActionOutputSummary(is_success=True))
65
+ return [ActionOutput(), ActionOutput()]
66
+
67
+
68
+ @app.action()
69
+ def test_empty_list_output(
70
+ params: Params, asset: Asset, soar: SOARClient
71
+ ) -> list[ActionOutput]:
72
+ return []
73
+
74
+
56
75
  app.register_action(
57
76
  "actions.reverse_string:reverse_string",
58
77
  action_type="investigate",
@@ -70,3 +70,24 @@ def test_action_meta_dict_without_view_handler():
70
70
 
71
71
  assert "render" not in result
72
72
  assert "view_handler" not in result
73
+
74
+
75
+ def test_action_meta_dict_with_concurrency_lock():
76
+ """Test ActionMeta.dict() with enable_concurrency_lock set to True."""
77
+
78
+ meta = ActionMeta(
79
+ action="test_action",
80
+ identifier="test_identifier",
81
+ description="Test description",
82
+ verbose="Test verbose",
83
+ type="generic",
84
+ read_only=True,
85
+ versions="EQ(*)",
86
+ enable_concurrency_lock=True,
87
+ )
88
+
89
+ result = meta.dict()
90
+
91
+ assert "lock" in result
92
+ assert result["lock"]["enabled"] is True
93
+ assert "enable_concurrency_lock" not in result
@@ -506,3 +506,26 @@ def test_register_action_with_view_handler_module_not_in_sys_modules(simple_app:
506
506
  view_handler=fake_module_view_handler,
507
507
  view_template="sample_template.html",
508
508
  )
509
+
510
+
511
+ def test_empty_list_output(simple_app: App, mocker: pytest_mock.MockerFixture):
512
+ @simple_app.action()
513
+ def action_example(params: Params, soar: SOARClient) -> list[ActionOutput]:
514
+ return []
515
+
516
+ add_result_mock = mocker.patch.object(simple_app.actions_manager, "add_result")
517
+ result = action_example(Params(), soar=simple_app.soar_client)
518
+ assert result is True
519
+ assert add_result_mock.call_count == 1
520
+
521
+
522
+ def test_list_output_with_summary(simple_app: App, mocker: pytest_mock.MockerFixture):
523
+ @simple_app.action()
524
+ def action_example(params: Params, soar: SOARClient) -> list[ActionOutput]:
525
+ soar.set_summary(ActionOutput())
526
+ return [ActionOutput()]
527
+
528
+ set_summary_mock = mocker.patch.object(simple_app.soar_client, "set_summary")
529
+ result = action_example(Params(), soar=simple_app.soar_client)
530
+ assert result is True
531
+ assert set_summary_mock.call_count == 1
@@ -1291,7 +1291,7 @@ wheels = [
1291
1291
 
1292
1292
  [[package]]
1293
1293
  name = "splunk-soar-sdk"
1294
- version = "2.0.1"
1294
+ version = "2.1.1"
1295
1295
  source = { editable = "." }
1296
1296
  dependencies = [
1297
1297
  { name = "beautifulsoup4", marker = "(python_full_version < '3.10' and platform_machine == 'arm64' and sys_platform == 'darwin') or (python_full_version >= '3.13' and platform_machine == 'arm64' and sys_platform == 'darwin') or (python_full_version < '3.10' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'darwin') or (python_full_version < '3.10' and platform_machine == 'aarch64' and sys_platform == 'linux') or (python_full_version >= '3.13' and platform_machine == 'aarch64' and sys_platform == 'linux') or (python_full_version < '3.10' and platform_machine == 'x86_64' and sys_platform == 'linux') or (python_full_version >= '3.13' and platform_machine == 'x86_64' and sys_platform == 'linux')" },
@@ -1,21 +0,0 @@
1
- ## [2.0.1](https://github.com/phantomcyber/splunk-soar-sdk/compare/2.0.0...2.0.1) (2025-09-25)
2
-
3
-
4
- ### Bug Fixes
5
-
6
- * handle lists and optionals of nested types properly ([98a84b5](https://github.com/phantomcyber/splunk-soar-sdk/commit/98a84b52fa79aaf08b4ce7493abef76df94cfb37))
7
-
8
-
9
-
10
-
11
-
12
- ## [2.0.1](https://github.com/phantomcyber/splunk-soar-sdk/compare/2.0.0...2.0.1) (2025-09-25)
13
-
14
-
15
- ### Bug Fixes
16
-
17
- * handle lists and optionals of nested types properly ([98a84b5](https://github.com/phantomcyber/splunk-soar-sdk/commit/98a84b52fa79aaf08b4ce7493abef76df94cfb37))
18
-
19
-
20
-
21
-
@@ -1 +0,0 @@
1
- 2.0.1
File without changes