splunk-soar-sdk 1.6.3__tar.gz → 2.0.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 (220) hide show
  1. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/PKG-INFO +1 -1
  2. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/docs/api_reference.rst +6 -6
  3. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/docs/app_structure/src_app.rst +3 -3
  4. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/pyproject.toml +40 -55
  5. splunk_soar_sdk-2.0.1/release_notes.txt +21 -0
  6. splunk_soar_sdk-2.0.1/release_version.txt +1 -0
  7. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/action_results.py +23 -27
  8. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/app.py +14 -19
  9. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/cli/manifests/serializers.py +1 -9
  10. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/decorators/__init__.py +2 -2
  11. splunk_soar_sdk-1.6.3/src/soar_sdk/decorators/generic_action.py → splunk_soar_sdk-2.0.1/src/soar_sdk/decorators/make_request.py +20 -20
  12. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/params.py +2 -2
  13. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/cli/test_serializers.py +0 -16
  14. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/example_app/app.json +4 -4
  15. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/example_app/src/app.py +7 -5
  16. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_action_results.py +25 -1
  17. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_actions_manager.py +1 -23
  18. splunk_soar_sdk-2.0.1/tests/test_make_request_action.py +173 -0
  19. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/uv.lock +1 -1
  20. splunk_soar_sdk-1.6.3/release_notes.txt +0 -21
  21. splunk_soar_sdk-1.6.3/release_version.txt +0 -1
  22. splunk_soar_sdk-1.6.3/tests/test_generic_action.py +0 -173
  23. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/.github/ISSUE_TEMPLATE/bug.md +0 -0
  24. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  25. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/.github/pull_request_template.md +0 -0
  26. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/.github/utils/github.js +0 -0
  27. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/.github/utils/update_version.py +0 -0
  28. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/.github/workflows/code_quality.yml +0 -0
  29. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/.github/workflows/commit_hygiene.yml +0 -0
  30. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/.github/workflows/generate_docs.yml +0 -0
  31. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/.github/workflows/semantic_release.yml +0 -0
  32. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/.gitignore +0 -0
  33. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/.pre-commit-config.yaml +0 -0
  34. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/.releaserc +0 -0
  35. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/LICENSE +0 -0
  36. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/README.md +0 -0
  37. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/commitlint.config.js +0 -0
  38. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/docs/app_structure/index.rst +0 -0
  39. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/docs/app_structure/pre-commit-config.yaml.rst +0 -0
  40. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/docs/app_structure/pyproject.toml.rst +0 -0
  41. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/docs/changelog.rst +0 -0
  42. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/docs/cli_reference.rst +0 -0
  43. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/docs/conf.py +0 -0
  44. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/docs/custom_views/index.rst +0 -0
  45. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/docs/custom_views/reusable_components.md +0 -0
  46. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/docs/custom_views/templates.md +0 -0
  47. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/docs/custom_views/view_handlers.md +0 -0
  48. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/docs/getting_started/defining_asset.rst +0 -0
  49. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/docs/getting_started/first_action.rst +0 -0
  50. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/docs/getting_started/index.rst +0 -0
  51. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/docs/getting_started/init_app.rst +0 -0
  52. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/docs/getting_started/installation.rst +0 -0
  53. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/docs/getting_started/testing_and_building.rst +0 -0
  54. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/docs/index.rst +0 -0
  55. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/__init__.py +0 -0
  56. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/abstract.py +0 -0
  57. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/actions_manager.py +0 -0
  58. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/apis/__init__.py +0 -0
  59. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/apis/artifact.py +0 -0
  60. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/apis/container.py +0 -0
  61. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/apis/utils.py +0 -0
  62. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/apis/vault.py +0 -0
  63. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/app_cli_runner.py +0 -0
  64. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/app_client.py +0 -0
  65. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/app_templates/basic_app/.gitignore +0 -0
  66. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/app_templates/basic_app/.pre-commit-config.yaml +0 -0
  67. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/app_templates/basic_app/logo.svg +0 -0
  68. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/app_templates/basic_app/logo_dark.svg +0 -0
  69. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/app_templates/basic_app/src/__init__.py +0 -0
  70. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/app_templates/basic_app/uv.lock +0 -0
  71. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/asset.py +0 -0
  72. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/async_utils.py +0 -0
  73. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/cli/__init__.py +0 -0
  74. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/cli/cli.py +0 -0
  75. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/cli/init/__init__.py +0 -0
  76. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/cli/init/cli.py +0 -0
  77. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/cli/manifests/__init__.py +0 -0
  78. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/cli/manifests/cli.py +0 -0
  79. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/cli/manifests/deserializers.py +0 -0
  80. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/cli/manifests/processors.py +0 -0
  81. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/cli/package/cli.py +0 -0
  82. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/cli/package/utils.py +0 -0
  83. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/cli/path_utils.py +0 -0
  84. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/cli/utils.py +0 -0
  85. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/code_renderers/__init__.py +0 -0
  86. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/code_renderers/action_renderer.py +0 -0
  87. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/code_renderers/app_renderer.py +0 -0
  88. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/code_renderers/asset_renderer.py +0 -0
  89. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/code_renderers/renderer.py +0 -0
  90. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/code_renderers/templates/pyproject.toml.jinja +0 -0
  91. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/code_renderers/toml_renderer.py +0 -0
  92. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/colors.py +0 -0
  93. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/compat.py +0 -0
  94. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/crypto.py +0 -0
  95. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/decorators/action.py +0 -0
  96. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/decorators/on_poll.py +0 -0
  97. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/decorators/test_connectivity.py +0 -0
  98. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/decorators/view_handler.py +0 -0
  99. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/decorators/webhook.py +0 -0
  100. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/exceptions.py +0 -0
  101. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/input_spec.py +0 -0
  102. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/logging.py +0 -0
  103. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/meta/__init__.py +0 -0
  104. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/meta/actions.py +0 -0
  105. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/meta/adapters.py +0 -0
  106. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/meta/app.py +0 -0
  107. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/meta/datatypes.py +0 -0
  108. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/meta/dependencies.py +0 -0
  109. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/meta/webhooks.py +0 -0
  110. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/models/__init__.py +0 -0
  111. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/models/artifact.py +0 -0
  112. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/models/container.py +0 -0
  113. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/models/vault_attachment.py +0 -0
  114. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/models/view.py +0 -0
  115. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/paths.py +0 -0
  116. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/py.typed +0 -0
  117. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/shims/phantom/action_result.py +0 -0
  118. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/shims/phantom/app.py +0 -0
  119. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/shims/phantom/base_connector.py +0 -0
  120. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/shims/phantom/connector_result.py +0 -0
  121. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/shims/phantom/consts.py +0 -0
  122. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/shims/phantom/encryption_helper.py +0 -0
  123. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/shims/phantom/install_info.py +0 -0
  124. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/shims/phantom/json_keys.py +0 -0
  125. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/shims/phantom/ph_ipc.py +0 -0
  126. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/shims/phantom/vault.py +0 -0
  127. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/shims/phantom_common/app_interface/app_interface.py +0 -0
  128. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/shims/phantom_common/encryption/encryption_manager_factory.py +0 -0
  129. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/templates/base/base_template.html +0 -0
  130. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/templates/base/error.html +0 -0
  131. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/templates/base/header.html +0 -0
  132. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/templates/base/logo_header.html +0 -0
  133. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/templates/components/pie_chart.html +0 -0
  134. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/templates/widgets/widget_resize_snippet.html +0 -0
  135. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/templates/widgets/widget_template.html +0 -0
  136. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/types.py +0 -0
  137. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/views/__init__.py +0 -0
  138. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/views/component_registry.py +0 -0
  139. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/views/components/__init__.py +0 -0
  140. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/views/components/pie_chart.py +0 -0
  141. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/views/template_filters.py +0 -0
  142. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/views/template_renderer.py +0 -0
  143. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/views/view_parser.py +0 -0
  144. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/webhooks/__init__.py +0 -0
  145. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/webhooks/models.py +0 -0
  146. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/src/soar_sdk/webhooks/routing.py +0 -0
  147. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/test.png +0 -0
  148. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/test.txt +0 -0
  149. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/__init__.py +0 -0
  150. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/cli/__init__.py +0 -0
  151. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/cli/datapath_parse.py +0 -0
  152. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/cli/manifests/__init__.py +0 -0
  153. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/cli/manifests/test_processors.py +0 -0
  154. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/cli/test_assets/converted_app/actions.py.txt +0 -0
  155. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/cli/test_cli.py +0 -0
  156. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/cli/test_convert_cli.py +0 -0
  157. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/cli/test_deserializers.py +0 -0
  158. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/cli/test_init_cli.py +0 -0
  159. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/cli/test_manifests_cli.py +0 -0
  160. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/cli/test_package_cli.py +0 -0
  161. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/cli/test_utils.py +0 -0
  162. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/code_renderers/test_action_renderer.py +0 -0
  163. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/conftest.py +0 -0
  164. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/example_app/example_asset.json +0 -0
  165. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/example_app/logo.svg +0 -0
  166. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/example_app/logo_dark.svg +0 -0
  167. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/example_app/pyproject.toml +0 -0
  168. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/example_app/src/__init__.py +0 -0
  169. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/example_app/src/actions/__init__.py +0 -0
  170. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/example_app/src/actions/async_action.py +0 -0
  171. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/example_app/src/actions/generate_category.py +0 -0
  172. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/example_app/src/actions/reverse_string.py +0 -0
  173. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/example_app/src/ignoreme.txt +0 -0
  174. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/example_app/templates/reverse_string.html +0 -0
  175. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/example_app/uv.lock +0 -0
  176. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/example_app_with_webhook/app.json +0 -0
  177. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/example_app_with_webhook/logo.svg +0 -0
  178. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/example_app_with_webhook/logo_dark.svg +0 -0
  179. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/example_app_with_webhook/pyproject.toml +0 -0
  180. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/example_app_with_webhook/src/__init__.py +0 -0
  181. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/example_app_with_webhook/src/app.py +0 -0
  182. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/example_app_with_webhook/uv.lock +0 -0
  183. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/interfaces/__init__.py +0 -0
  184. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/interfaces/test_artifact_interface.py +0 -0
  185. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/interfaces/test_container_interface.py +0 -0
  186. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/interfaces/test_vault_interface.py +0 -0
  187. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/meta/__init__.py +0 -0
  188. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/meta/test_actions.py +0 -0
  189. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/meta/test_adapters.py +0 -0
  190. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/meta/test_datatypes.py +0 -0
  191. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/meta/test_dependencies.py +0 -0
  192. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/meta/test_webhooks.py +0 -0
  193. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/mocks/__init__.py +0 -0
  194. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/mocks/dynamic_mocks.py +0 -0
  195. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/mocks/importable_action.py +0 -0
  196. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/stubs.py +0 -0
  197. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_app.py +0 -0
  198. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_app_action.py +0 -0
  199. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_app_action_params.py +0 -0
  200. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_app_action_results.py +0 -0
  201. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_app_client.py +0 -0
  202. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_app_runner.py +0 -0
  203. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_asset.py +0 -0
  204. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_assets/splunk-sdk-2.1.0.tar.gz +0 -0
  205. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_async_integration.py +0 -0
  206. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_async_utils.py +0 -0
  207. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_code_renderers.py +0 -0
  208. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_compat.py +0 -0
  209. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_container.py +0 -0
  210. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_custom_views.py +0 -0
  211. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_encryption.py +0 -0
  212. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_logging.py +0 -0
  213. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_on_poll.py +0 -0
  214. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_params.py +0 -0
  215. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_template_filters.py +0 -0
  216. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_template_renderer.py +0 -0
  217. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_test_connectivity.py +0 -0
  218. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/test_view_parser.py +0 -0
  219. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.1}/tests/webhooks/test_models.py +0 -0
  220. {splunk_soar_sdk-1.6.3 → splunk_soar_sdk-2.0.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: 1.6.3
3
+ Version: 2.0.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
@@ -114,11 +114,11 @@ On poll functions require a specific parameter class called `OnPollParams`. YYou
114
114
 
115
115
  .. autoclass:: soar_sdk.params.OnPollParams
116
116
 
117
- Parameters for the Generic Action
117
+ Parameters for the Make Request Action
118
118
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
119
- Generic action functions require a specific parameter class called `GenericActionParams`. You should use this class as-is, instead of overriding it.
119
+ Make Request action functions require a specific parameter class called :class:`~soar_sdk.params.MakeRequestParams`. You should use this class as-is, instead of overriding it.
120
120
 
121
- .. autoclass:: soar_sdk.params.GenericActionParams
121
+ .. autoclass:: soar_sdk.params.MakeRequestParams
122
122
 
123
123
 
124
124
  .. _action-output-label:
@@ -183,11 +183,11 @@ Defining Action Outputs
183
183
 
184
184
  .. autofunction:: soar_sdk.action_results.OutputField
185
185
 
186
- Generic Action Output
186
+ Make Request Action Output
187
187
  ^^^^^^^^^^^^^^^^^^^^^
188
- For generic action functions we have provided a convenience class called `GenericActionOutput`. This class extends the `ActionOutput` class and adds a status_code and response_body field. You can use this class to return the response from the generic action.
188
+ For ``make request`` functions, we have provided a convenience class called :class:`~soar_sdk.action_results.MakeRequestOutput`. This class extends the :class:`~soar_sdk.action_results.ActionOutput` class and adds a ``status_code`` and ``response_body`` field. You can use this class to return the response from the ``make request`` action.
189
189
 
190
- .. autoclass:: soar_sdk.action_results.GenericActionOutput
190
+ .. autoclass:: soar_sdk.action_results.MakeRequestOutput
191
191
 
192
192
  .. _soar-client-label:
193
193
 
@@ -205,16 +205,16 @@ A successful ``test connectivity`` action should return ``None``, and a failure
205
205
 
206
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 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
- Generic Action
208
+ Make Request Action
209
209
  ^^^^^^^^^^^^^^
210
210
 
211
211
  .. literalinclude:: ../../tests/example_app/src/app.py
212
- :caption: Generic action definition
212
+ :caption: Make request action definition
213
213
  :language: python
214
214
  :lineno-match:
215
215
  :pyobject: http_action
216
216
 
217
- Apps may define a special "generic HTTP" action, which can be used to interact with the underlying external service's REST API directly. Having this action available can be useful when there are parts of the REST API that don't have dedicated actions implemented in the app. These
217
+ Apps may define a special "make request" action, which can be used to interact with the underlying external service's REST API directly. Having this action available can be useful when there are parts of the REST API that don't have dedicated actions implemented in the app.
218
218
 
219
219
  We create an action by decorating a function with the ``app.action`` decorator. The default ``action_type``
220
220
  is ``generic``, so usually you will not have to provide this argument for the decorator. This is not the
@@ -1,20 +1,12 @@
1
1
  [project]
2
2
  name = "splunk-soar-sdk"
3
- version = "1.6.3"
3
+ version = "2.0.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"
7
7
  license = "Apache-2.0"
8
8
  license-files = ["LICENSE"]
9
- keywords = [
10
- "cisco",
11
- "splunk",
12
- "soar",
13
- "phantom",
14
- "app",
15
- "connector",
16
- "sdk",
17
- ]
9
+ keywords = ["cisco", "splunk", "soar", "phantom", "app", "connector", "sdk"]
18
10
 
19
11
  authors = [
20
12
  { name = "Jacob Davis", email = "jacobd@splunk.com" },
@@ -23,7 +15,7 @@ authors = [
23
15
  { name = "Michael Nordby", email = "mnordby@splunk.com" },
24
16
  { name = "Scott Odle", email = "sodle@splunk.com" },
25
17
  { name = "Michał Posłuszny", email = "mposluszny@splunk.com" },
26
- { name = "Ian Rokas", email = "grokas@splunk.com" }
18
+ { name = "Ian Rokas", email = "grokas@splunk.com" },
27
19
  ]
28
20
  classifiers = [
29
21
  "Development Status :: 5 - Production/Stable",
@@ -130,26 +122,22 @@ addopts = "--ignore=src/soar_sdk/app_templates --ignore=app_templates --cov-fail
130
122
 
131
123
  [tool.coverage.run]
132
124
  branch = true
133
- concurrency = [
134
- "multiprocessing",
135
- ]
136
- source = [
137
- "src/soar_sdk"
138
- ]
125
+ concurrency = ["multiprocessing"]
126
+ source = ["src/soar_sdk"]
139
127
  omit = [
140
- "src/soar_sdk/shims/*", # shims for BaseConnector, should not need testing
141
- "src/soar_sdk/code_renderers/templates/*" # jinja templates, not code
128
+ "src/soar_sdk/shims/*", # shims for BaseConnector, should not need testing
129
+ "src/soar_sdk/code_renderers/templates/*", # jinja templates, not code
142
130
  ]
143
131
 
144
132
  [tool.coverage.report]
145
133
  show_missing = true
146
134
  exclude_lines = [
147
135
  '# pragma: no cover',
148
- 'if (typing\.)?TYPE_CHECKING:', # ignore type checking blocks
149
- 'if __name__ == "__main__":', # ignore main blocks
150
- 'raise NotImplementedError', # ignore NotImplementedError
151
- '^ *(pass|\.\.\.)( *#.+)?$', # ignore pass and ...
152
- '^ *def .+: \.\.\.( *#.+)?$', # ignore def f(): ...
136
+ 'if (typing\.)?TYPE_CHECKING:', # ignore type checking blocks
137
+ 'if __name__ == "__main__":', # ignore main blocks
138
+ 'raise NotImplementedError', # ignore NotImplementedError
139
+ '^ *(pass|\.\.\.)( *#.+)?$', # ignore pass and ...
140
+ '^ *def .+: \.\.\.( *#.+)?$', # ignore def f(): ...
153
141
  ]
154
142
 
155
143
 
@@ -160,32 +148,32 @@ target-version = "py39"
160
148
 
161
149
  [tool.ruff.lint]
162
150
  select = [
163
- "ERA", # commented out code
164
- "YTT", # bad use of sys.version_info
165
- "ANN", # type annotations
166
- "S", # security issues
167
- "B", # bugbear
168
- "A", # builtins
169
- "DTZ", # datetime footguns
170
- "T10", # breakpoints
171
- "ISC", # implicit string concatenation
172
- "PT", # pytest style
173
- "SIM", # simplify
174
- "PTH", # use pathlib
175
- "E", # pycodestyle errors
176
- "F", # pyflakes
177
- "W", # pycodestyle warnings
178
- "PL", # pylint
179
- "UP", # pyupgrade
180
- "RUF", # ruff's own rules
151
+ "ERA", # commented out code
152
+ "YTT", # bad use of sys.version_info
153
+ "ANN", # type annotations
154
+ "S", # security issues
155
+ "B", # bugbear
156
+ "A", # builtins
157
+ "DTZ", # datetime footguns
158
+ "T10", # breakpoints
159
+ "ISC", # implicit string concatenation
160
+ "PT", # pytest style
161
+ "SIM", # simplify
162
+ "PTH", # use pathlib
163
+ "E", # pycodestyle errors
164
+ "F", # pyflakes
165
+ "W", # pycodestyle warnings
166
+ "PL", # pylint
167
+ "UP", # pyupgrade
168
+ "RUF", # ruff's own rules
181
169
  ]
182
170
  ignore = [
183
- "E402", # Module level import not at top of file.
184
- "E501", # Line too long. Format covers this.
185
- "PT006", # Opinions about types for pytest.parametrize
186
- "PT007", # Opinions about types for pytest.parametrize
187
- "PTH123", # Allow builtin open()
188
- "PLR", # pylint refactors
171
+ "E402", # Module level import not at top of file.
172
+ "E501", # Line too long. Format covers this.
173
+ "PT006", # Opinions about types for pytest.parametrize
174
+ "PT007", # Opinions about types for pytest.parametrize
175
+ "PTH123", # Allow builtin open()
176
+ "PLR", # pylint refactors
189
177
  ]
190
178
 
191
179
  # Allow unused variables when underscore-prefixed.
@@ -193,11 +181,11 @@ dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
193
181
 
194
182
  [tool.ruff.lint.per-file-ignores]
195
183
  "tests/**/*" = [
196
- "ANN", # Disable flake8-annotations rules for test files
197
- "S", # Disable flake8-bandit rules for test files
184
+ "ANN", # Disable flake8-annotations rules for test files
185
+ "S", # Disable flake8-bandit rules for test files
198
186
  ]
199
187
  "src/**/*" = [
200
- "PT", # Disable pytest rules for src files
188
+ "PT", # Disable pytest rules for src files
201
189
  ]
202
190
 
203
191
  [tool.ruff.lint.pyupgrade]
@@ -222,10 +210,7 @@ no_implicit_optional = true
222
210
  show_error_context = true
223
211
  strict_equality = true
224
212
  check_untyped_defs = true
225
- exclude = [
226
- 'tests/.*',
227
- 'dist/.*',
228
- ]
213
+ exclude = ['tests/.*', 'dist/.*']
229
214
 
230
215
  [[tool.mypy.overrides]]
231
216
  module = "phantom.*"
@@ -0,0 +1,21 @@
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
+
@@ -0,0 +1 @@
1
+ 2.0.1
@@ -150,19 +150,6 @@ class ActionOutput(BaseModel):
150
150
  Nested ActionOutput classes are supported for complex data structures.
151
151
  """
152
152
 
153
- def generate_action_summary_message(self) -> str:
154
- """Generate a summary message for the action output.
155
-
156
- This method provides a human-readable summary of the action results,
157
- which appears when running the action in a SOAR playbook or container.
158
-
159
- Returns:
160
- A string summarizing the action output.
161
-
162
- .. deprecated:: 1.3.0
163
- """
164
- return "Action completed successfully."
165
-
166
153
  @classmethod
167
154
  def _to_json_schema(
168
155
  cls, parent_datapath: str = "action_result.data.*"
@@ -195,20 +182,29 @@ class ActionOutput(BaseModel):
195
182
  field_type = field.annotation
196
183
  datapath = parent_datapath + f".{field_name}"
197
184
 
198
- # Handle list types, even nested ones
199
- while get_origin(field_type) is list:
200
- field_type = get_args(field_type)[0]
201
- datapath += ".*"
202
-
203
- if get_origin(field_type) is Union or get_origin(field_type) is Optional:
185
+ # Handle lists and optional types, even nested ones
186
+ origin = get_origin(field_type)
187
+ while origin in [list, Union, Optional]:
204
188
  type_args = [
205
- arg for arg in get_args(field_type) if arg is not type(None)
189
+ arg
190
+ for arg in get_args(field_type)
191
+ if arg is not type(None) and arg is not None
206
192
  ]
207
- if len(type_args) > 1:
208
- raise TypeError(
209
- f"Output field {field_name} is invalid: the only valid Union type is Optional, or Union[X, None]."
210
- )
193
+
194
+ if origin is list:
195
+ if len(type_args) != 1:
196
+ raise TypeError(
197
+ f"Output field {field_name} is invalid: List types must have exactly one non-null type argument."
198
+ )
199
+ datapath += ".*"
200
+ else:
201
+ if len(type_args) != 1:
202
+ raise TypeError(
203
+ f"Output field {field_name} is invalid: the only valid Union type is Optional, or Union[X, None]."
204
+ )
205
+
211
206
  field_type = type_args[0]
207
+ origin = get_origin(field_type)
212
208
 
213
209
  if issubclass(field_type, ActionOutput):
214
210
  # If the field is another ActionOutput, recursively call _to_json_schema
@@ -237,13 +233,13 @@ class ActionOutput(BaseModel):
237
233
  yield schema_field
238
234
 
239
235
 
240
- class GenericActionOutput(ActionOutput):
241
- """Output class for generic actions.
236
+ class MakeRequestOutput(ActionOutput):
237
+ """Output class for ``make request`` action.
242
238
 
243
239
  This class extends the `ActionOutput` class and adds a status_code and response_body field. You can use this class as is or extend it to add more fields.
244
240
 
245
241
  Example:
246
- >>> class CustomGenericActionOutput(GenericActionOutput):
242
+ >>> class CustomMakeRequestOutput(MakeRequestOutput):
247
243
  ... error: str = OutputField(example_values=["Invalid credentials"])
248
244
 
249
245
  Note:
@@ -12,7 +12,6 @@ from soar_sdk.input_spec import InputSpecification
12
12
  from soar_sdk.compat import (
13
13
  MIN_PHANTOM_VERSION,
14
14
  PythonVersion,
15
- remove_when_soar_newer_than,
16
15
  )
17
16
  from soar_sdk.shims.phantom_common.app_interface.app_interface import SoarRestClient
18
17
  from soar_sdk.shims.phantom_common.encryption.encryption_manager_factory import (
@@ -39,7 +38,7 @@ from soar_sdk.decorators import (
39
38
  ViewHandlerDecorator,
40
39
  OnPollDecorator,
41
40
  WebhookDecorator,
42
- GenericActionDecorator,
41
+ MakeRequestDecorator,
43
42
  )
44
43
 
45
44
 
@@ -516,33 +515,33 @@ class App:
516
515
  """
517
516
  return ViewHandlerDecorator(self, template=template)
518
517
 
519
- def generic_action(
518
+ def make_request(
520
519
  self, output_class: Optional[type[ActionOutput]] = None
521
- ) -> GenericActionDecorator:
522
- """Decorator for registering a generic action function.
520
+ ) -> MakeRequestDecorator:
521
+ """Decorator for registering a ``make request`` action function.
523
522
 
524
- This decorator marks a function as the generic action for the app. Generic action is used to call any endpoint of the underlying API service this app implements.
525
- Only one generic action is allowed per app. The function you define needs to accept at least one parameter of type `GenericActionParams` and can accept any other parameters you need.
523
+ This decorator marks a function as the ``make request`` action for the app. ``make request`` is used to call any endpoint of the underlying API service this app implements.
524
+ Only one ``make request`` action is allowed per app. The function you define needs to accept at least one parameter of type :class:`~soar_sdk.params.MakeRequestParams` and can accept any other parameters you need.
526
525
  Other useful parameters to accept are the SOARClient and the asset.
527
526
 
528
527
  Returns:
529
- GenericActionDecorator: A decorator instance that handles generic action registration.
528
+ MakeRequestActionDecorator: A decorator instance that handles ``make request`` action registration.
530
529
 
531
530
  Example:
532
- >>> @app.generic_action()
531
+ >>> @app.make_request()
533
532
  ... def http_action(
534
- ... self, params: GenericActionParams, asset: Asset
535
- ... ) -> GenericActionOutput:
533
+ ... self, params: MakeRequestParams, asset: Asset
534
+ ... ) -> MakeRequestOutput:
536
535
  ... logger.info(f"testing connectivity against {asset.base_url}")
537
- ... return GenericActionOutput(
536
+ ... return MakeRequestOutput(
538
537
  ... status_code=200,
539
538
  ... response_body=f"Base url is {asset.base_url}",
540
539
  ... )
541
540
 
542
541
  Note:
543
- The generic action function should return either a GenericActionOutput object or an output class derived from ActionOutput/GenericActionOutput.
542
+ The ``make request`` action function should return either a :class:`~soar_sdk.action_results.MakeRequestOutput` object or of an output class derived from it.
544
543
  """
545
- return GenericActionDecorator(self, output_class=output_class)
544
+ return MakeRequestDecorator(self, output_class=output_class)
546
545
 
547
546
  @staticmethod
548
547
  def _validate_params_class(
@@ -652,11 +651,7 @@ class App:
652
651
  param_dict = action_params.dict() if action_params else None
653
652
 
654
653
  if not message:
655
- remove_when_soar_newer_than(
656
- "7.0.0",
657
- 'Setting action_result.message in this way was deprecated in SDK 1.3.0. Developers must use SOARClient.set_message instead. We should replace the following method call with a static "Action succeeded" message.',
658
- )
659
- message = result.generate_action_summary_message()
654
+ message = "Action completed successfully"
660
655
 
661
656
  result = ActionResult(
662
657
  status=True,
@@ -47,15 +47,7 @@ class OutputsSerializer:
47
47
  outputs_class: type[ActionOutput],
48
48
  summary_class: Optional[type[ActionOutput]] = None,
49
49
  ) -> list[OutputFieldSpecification]:
50
- """Serializes the data paths of an ActionOutput class to JSON schema."""
51
- if (
52
- outputs_class.generate_action_summary_message
53
- != ActionOutput.generate_action_summary_message
54
- ):
55
- logger.warning(
56
- f"Overriding ActionOutput.generate_action_summary_message is deprecated. Please call SOARClient.set_message from your action handler instead. [in {outputs_class.__name__}]"
57
- )
58
-
50
+ """Serializes the data paths of an action to JSON schema."""
59
51
  status = OutputFieldSpecification(
60
52
  data_path="action_result.status",
61
53
  data_type="string",
@@ -5,12 +5,12 @@ from .test_connectivity import ConnectivityTestDecorator
5
5
  from .view_handler import ViewHandlerDecorator
6
6
  from .on_poll import OnPollDecorator
7
7
  from .webhook import WebhookDecorator
8
- from .generic_action import GenericActionDecorator
8
+ from .make_request import MakeRequestDecorator
9
9
 
10
10
  __all__ = [
11
11
  "ActionDecorator",
12
12
  "ConnectivityTestDecorator",
13
- "GenericActionDecorator",
13
+ "MakeRequestDecorator",
14
14
  "OnPollDecorator",
15
15
  "ViewHandlerDecorator",
16
16
  "WebhookDecorator",
@@ -2,9 +2,9 @@ import inspect
2
2
 
3
3
  from soar_sdk.abstract import SOARClient
4
4
  from soar_sdk.action_results import ActionResult
5
- from soar_sdk.params import GenericActionParams
5
+ from soar_sdk.params import MakeRequestParams
6
6
  from soar_sdk.meta.actions import ActionMeta
7
- from soar_sdk.action_results import ActionOutput, GenericActionOutput
7
+ from soar_sdk.action_results import ActionOutput, MakeRequestOutput
8
8
  from soar_sdk.types import Action, action_protocol
9
9
  from soar_sdk.exceptions import ActionFailure
10
10
  from soar_sdk.async_utils import run_async_if_needed
@@ -18,8 +18,8 @@ if TYPE_CHECKING:
18
18
  from soar_sdk.app import App
19
19
 
20
20
 
21
- class GenericActionDecorator:
22
- """Class-based decorator for generic action functionality."""
21
+ class MakeRequestDecorator:
22
+ """Class-based decorator for ``make request`` action functionality."""
23
23
 
24
24
  def __init__(
25
25
  self,
@@ -30,32 +30,32 @@ class GenericActionDecorator:
30
30
  self.output_class = output_class
31
31
 
32
32
  def __call__(self, function: Callable) -> Action:
33
- """Decorator for the generic HTTP API action.
33
+ """Decorator for the ``make request`` HTTP API action.
34
34
 
35
- The decorated function implements a generic action that can be used to call any endpoint of the underlying API service this app implements.
35
+ The decorated function implements a ``make request`` action that can be used to call any endpoint of the underlying API service this app implements.
36
36
 
37
37
  Usage:
38
- This decorated function automatically gets all the parameters from the GenericActionParams class and passes them to the function. GenericActionParams represents the parameters required for most http requests.
38
+ This decorated function automatically gets all the parameters from the :class:`~soar_sdk.params.MakeRequestParams` class and passes them to the function. ``MakeRequestParams`` represents the parameters required for most http requests.
39
39
  You should use your existing asset interface to make this request.
40
40
  """
41
- if self.app.actions_manager.get_action("generic_action"):
41
+ if self.app.actions_manager.get_action("make_request"):
42
42
  raise TypeError(
43
- "The 'generic_action' decorator can only be used once per App instance."
43
+ "The 'make_request' decorator can only be used once per App instance."
44
44
  )
45
45
 
46
- # Validate function signature - must have at least one parameter of type GenericActionParams
46
+ # Validate function signature - must have at least one parameter of type MakeRequestParams
47
47
  signature = inspect.signature(function)
48
48
  params = list(signature.parameters.values())
49
49
 
50
- if not any(param.annotation == GenericActionParams for param in params):
50
+ if not any(param.annotation == MakeRequestParams for param in params):
51
51
  raise TypeError(
52
- f"Generic action function must have at least one parameter of type GenericActionParams, got {params[0].annotation}"
52
+ f"Make request action function must have at least one parameter of type MakeRequestParams, got {params[0].annotation}"
53
53
  )
54
54
 
55
- action_identifier = "generic_action"
56
- action_name = "generic action"
57
- # for generic action use GenericActionParams
58
- validated_params_class = GenericActionParams
55
+ action_identifier = "make_request"
56
+ action_name = "make request"
57
+ # for make request action use MakeRequestParams
58
+ validated_params_class = MakeRequestParams
59
59
 
60
60
  return_type = inspect.signature(function).return_annotation
61
61
  if return_type is not inspect.Signature.empty:
@@ -68,10 +68,10 @@ class GenericActionDecorator:
68
68
  )
69
69
 
70
70
  if not issubclass(validated_output_class, ActionOutput) and not isinstance(
71
- validated_output_class, GenericActionOutput
71
+ validated_output_class, MakeRequestOutput
72
72
  ):
73
73
  raise TypeError(
74
- "Return type for action function must be either GenericActionOutput or derived from ActionOutput or GenericActionOutput class."
74
+ "Return type for action function must be either MakeRequestOutput or derived from ActionOutput or MakeRequestOutput class."
75
75
  )
76
76
 
77
77
  logger = getLogger()
@@ -79,7 +79,7 @@ class GenericActionDecorator:
79
79
  @action_protocol
80
80
  @wraps(function)
81
81
  def inner(
82
- params: GenericActionParams,
82
+ params: MakeRequestParams,
83
83
  soar: SOARClient = self.app.soar_client,
84
84
  *args: Any, # noqa: ANN401
85
85
  **kwargs: Any, # noqa: ANN401
@@ -122,7 +122,7 @@ class GenericActionDecorator:
122
122
  action=action_name,
123
123
  identifier=action_identifier,
124
124
  description=inspect.getdoc(function) or action_name,
125
- verbose="Generic action for the app.",
125
+ verbose="'make request' action for the app. Used to handle arbitrary HTTP requests with the app's asset",
126
126
  type="generic",
127
127
  parameters=validated_params_class,
128
128
  output=validated_output_class,
@@ -170,8 +170,8 @@ class OnPollParams(Params):
170
170
  )
171
171
 
172
172
 
173
- class GenericActionParams(Params):
174
- """Canonical parameters for the special generic HTTP actions."""
173
+ class MakeRequestParams(Params):
174
+ """Canonical parameters for the special make request action."""
175
175
 
176
176
  http_method: str = Param(
177
177
  description="The HTTP method to use for the request.",
@@ -1,4 +1,3 @@
1
- import logging
2
1
  from soar_sdk.cli.manifests.serializers import ParamsSerializer, OutputsSerializer
3
2
  from soar_sdk.params import Param, Params
4
3
  from soar_sdk.action_results import ActionOutput, OutputField
@@ -298,18 +297,3 @@ def test_outputs_serialize_with_parameters_class():
298
297
  "example_values": [1],
299
298
  },
300
299
  ]
301
-
302
-
303
- def test_serializer_with_custom_message_prints_warning(caplog):
304
- class CustomOutput(ActionOutput):
305
- def generate_action_summary_message(self) -> str:
306
- return f"Custom message: {self.result}"
307
-
308
- with caplog.at_level(logging.WARNING):
309
- OutputsSerializer.serialize_datapaths(Params, CustomOutput)
310
-
311
- assert (
312
- "Overriding ActionOutput.generate_action_summary_message is deprecated."
313
- in caplog.text
314
- )
315
- assert "[in CustomOutput]" in caplog.text
@@ -236,13 +236,13 @@
236
236
  }
237
237
  },
238
238
  {
239
- "action": "generic action",
240
- "identifier": "generic_action",
241
- "description": "generic action",
239
+ "action": "make request",
240
+ "identifier": "make_request",
241
+ "description": "make request",
242
242
  "type": "generic",
243
243
  "read_only": false,
244
244
  "versions": "EQ(*)",
245
- "verbose": "Generic action for the app.",
245
+ "verbose": "'make request' action for the app. Used to handle arbitrary HTTP requests with the app's asset",
246
246
  "parameters": {
247
247
  "http_method": {
248
248
  "order": 0,
@@ -5,10 +5,10 @@ from zoneinfo import ZoneInfo
5
5
  from soar_sdk.abstract import SOARClient
6
6
  from soar_sdk.app import App
7
7
  from soar_sdk.asset import AssetField, BaseAsset
8
- from soar_sdk.params import OnPollParams, GenericActionParams, Params
8
+ from soar_sdk.params import OnPollParams, MakeRequestParams, Params
9
9
  from soar_sdk.models.container import Container
10
10
  from soar_sdk.models.artifact import Artifact
11
- from soar_sdk.action_results import ActionOutput, GenericActionOutput
11
+ from soar_sdk.action_results import ActionOutput, MakeRequestOutput
12
12
  from soar_sdk.logging import getLogger
13
13
 
14
14
  logger = getLogger()
@@ -45,6 +45,8 @@ def test_connectivity(soar: SOARClient, asset: Asset) -> None:
45
45
  soar.get("rest/version")
46
46
  container_id = soar.get_executing_container_id()
47
47
  logger.info(f"current executing container's container_id is: {container_id}")
48
+ asset_id = soar.get_asset_id()
49
+ logger.info(f"current executing container's asset_id is: {asset_id}")
48
50
  logger.info(f"testing connectivity against {asset.base_url}")
49
51
  logger.debug("hello")
50
52
  logger.warning("this is a warning")
@@ -67,10 +69,10 @@ app.register_action(
67
69
  )
68
70
 
69
71
 
70
- @app.generic_action()
71
- def http_action(params: GenericActionParams, asset: Asset) -> GenericActionOutput:
72
+ @app.make_request()
73
+ def http_action(params: MakeRequestParams, asset: Asset) -> MakeRequestOutput:
72
74
  logger.info(f"HTTP action triggered with params: {params}")
73
- return GenericActionOutput(
75
+ return MakeRequestOutput(
74
76
  status_code=200,
75
77
  response_body=f"Base url is {asset.base_url}",
76
78
  )