splunk-soar-sdk 3.3.2__tar.gz → 3.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/.github/utils/update_version.py +2 -3
  2. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/PKG-INFO +3 -1
  3. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/mcp_server/src/soar_test_assistant/server.py +1 -1
  4. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/pyproject.toml +7 -1
  5. splunk_soar_sdk-3.5.0/release_notes.txt +35 -0
  6. splunk_soar_sdk-3.5.0/release_version.txt +1 -0
  7. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/abstract.py +7 -6
  8. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/action_results.py +7 -7
  9. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/apis/utils.py +3 -2
  10. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/apis/vault.py +1 -0
  11. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/app.py +24 -27
  12. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/app_cli_runner.py +7 -6
  13. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/app_client.py +3 -4
  14. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/asset.py +7 -9
  15. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/asset_state.py +1 -2
  16. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/async_utils.py +1 -2
  17. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/cli/cli.py +2 -2
  18. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/cli/manifests/deserializers.py +4 -3
  19. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/cli/manifests/processors.py +2 -2
  20. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/cli/package/cli.py +14 -14
  21. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/cli/package/utils.py +3 -2
  22. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/code_renderers/action_renderer.py +5 -4
  23. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/code_renderers/renderer.py +2 -2
  24. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/compat.py +2 -1
  25. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/decorators/action.py +7 -11
  26. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/decorators/make_request.py +9 -11
  27. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/decorators/on_es_poll.py +7 -10
  28. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/decorators/on_poll.py +7 -11
  29. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/decorators/test_connectivity.py +5 -6
  30. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/decorators/view_handler.py +6 -7
  31. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/decorators/webhook.py +3 -5
  32. splunk_soar_sdk-3.5.0/src/soar_sdk/extras/email/__init__.py +9 -0
  33. splunk_soar_sdk-3.5.0/src/soar_sdk/extras/email/processor.py +1171 -0
  34. splunk_soar_sdk-3.5.0/src/soar_sdk/extras/email/rfc5322.py +335 -0
  35. splunk_soar_sdk-3.5.0/src/soar_sdk/extras/email/utils.py +178 -0
  36. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/input_spec.py +4 -3
  37. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/logging.py +5 -4
  38. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/meta/actions.py +3 -3
  39. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/meta/dependencies.py +6 -9
  40. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/meta/webhooks.py +2 -1
  41. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/models/__init__.py +1 -1
  42. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/models/artifact.py +1 -0
  43. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/models/attachment_input.py +1 -1
  44. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/models/container.py +2 -1
  45. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/models/finding.py +2 -1
  46. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/models/vault_attachment.py +1 -0
  47. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/models/view.py +2 -0
  48. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/params.py +12 -5
  49. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/shims/phantom/action_result.py +1 -1
  50. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/shims/phantom/app.py +1 -1
  51. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/shims/phantom/base_connector.py +3 -4
  52. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/shims/phantom/connector_result.py +0 -1
  53. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/shims/phantom/ph_ipc.py +2 -1
  54. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/shims/phantom/vault.py +8 -6
  55. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/shims/phantom_common/app_interface/app_interface.py +1 -0
  56. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/views/component_registry.py +0 -1
  57. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/views/template_filters.py +4 -4
  58. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/views/template_renderer.py +3 -2
  59. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/views/view_parser.py +8 -6
  60. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/webhooks/models.py +3 -3
  61. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/webhooks/routing.py +3 -4
  62. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/cli/manifests/test_processors.py +2 -3
  63. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/cli/manifests/test_python_version_resolution.py +3 -2
  64. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/cli/test_cli.py +0 -1
  65. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/cli/test_convert_cli.py +4 -5
  66. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/cli/test_deserializers.py +5 -4
  67. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/cli/test_init_cli.py +4 -2
  68. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/cli/test_manifests_cli.py +1 -2
  69. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/cli/test_package_cli.py +2 -3
  70. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/cli/test_serializers.py +4 -4
  71. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/cli/test_utils.py +2 -1
  72. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/code_renderers/test_action_renderer.py +3 -2
  73. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/conftest.py +9 -10
  74. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app/app.json +13 -73
  75. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app/pyproject.toml +0 -1
  76. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app/src/actions/async_action.py +4 -2
  77. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app/src/app.py +16 -10
  78. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app/uv.lock +105 -160
  79. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app_with_webhook/app.json +28 -38
  80. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app_with_webhook/src/app.py +3 -2
  81. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app_with_webhook/uv.lock +119 -102
  82. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/interfaces/test_artifact_interface.py +3 -2
  83. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/interfaces/test_container_interface.py +5 -4
  84. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/interfaces/test_vault_interface.py +4 -3
  85. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/meta/test_datatypes.py +1 -0
  86. splunk_soar_sdk-3.5.0/tests/mocks/__init__.py +0 -0
  87. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_action_results.py +1 -0
  88. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_actions_manager.py +4 -5
  89. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_app.py +6 -6
  90. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_app_action.py +6 -7
  91. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_app_action_results.py +2 -2
  92. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_asset_state.py +3 -2
  93. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_async_integration.py +3 -3
  94. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_async_utils.py +1 -1
  95. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_code_renderers.py +6 -4
  96. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_compat.py +2 -1
  97. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_custom_views.py +4 -2
  98. splunk_soar_sdk-3.5.0/tests/test_email_processor.py +5132 -0
  99. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_encryption.py +4 -2
  100. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_finding.py +3 -2
  101. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_input_spec.py +1 -1
  102. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_logging.py +7 -6
  103. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_make_request_action.py +3 -2
  104. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_on_poll.py +72 -4
  105. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_params.py +1 -2
  106. splunk_soar_sdk-3.5.0/tests/test_rfc5322.py +750 -0
  107. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_template_filters.py +2 -1
  108. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_template_renderer.py +5 -4
  109. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_test_connectivity.py +2 -1
  110. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_view_parser.py +3 -2
  111. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/webhooks/test_routing.py +1 -1
  112. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/uv.lock +17 -1
  113. splunk_soar_sdk-3.3.2/release_notes.txt +0 -21
  114. splunk_soar_sdk-3.3.2/release_version.txt +0 -1
  115. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/.github/ISSUE_TEMPLATE/bug.md +0 -0
  116. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  117. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/.github/pull_request_template.md +0 -0
  118. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/.github/scripts/generate_test_summary.py +0 -0
  119. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/.github/utils/github.js +0 -0
  120. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/.github/workflows/code_quality.yml +0 -0
  121. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/.github/workflows/commit_hygiene.yml +0 -0
  122. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/.github/workflows/generate_docs.yml +0 -0
  123. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/.github/workflows/integration_tests.yml +0 -0
  124. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/.github/workflows/semantic_release.yml +0 -0
  125. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/.gitignore +0 -0
  126. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/.pre-commit-config.yaml +0 -0
  127. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/.releaserc +0 -0
  128. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/LICENSE +0 -0
  129. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/README.md +0 -0
  130. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/commitlint.config.js +0 -0
  131. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/docs/api_reference.rst +0 -0
  132. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/docs/app_structure/index.rst +0 -0
  133. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/docs/app_structure/pre-commit-config.yaml.rst +0 -0
  134. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/docs/app_structure/pyproject.toml.rst +0 -0
  135. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/docs/app_structure/src_app.rst +0 -0
  136. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/docs/changelog.rst +0 -0
  137. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/docs/cli_reference.rst +0 -0
  138. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/docs/conf.py +0 -0
  139. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/docs/custom_views/index.rst +0 -0
  140. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/docs/custom_views/reusable_components.md +0 -0
  141. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/docs/custom_views/templates.md +0 -0
  142. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/docs/custom_views/view_handlers.md +0 -0
  143. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/docs/getting_started/defining_asset.rst +0 -0
  144. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/docs/getting_started/first_action.rst +0 -0
  145. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/docs/getting_started/index.rst +0 -0
  146. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/docs/getting_started/init_app.rst +0 -0
  147. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/docs/getting_started/installation.rst +0 -0
  148. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/docs/getting_started/testing_and_building.rst +0 -0
  149. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/docs/index.rst +0 -0
  150. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/mcp_server/README.md +0 -0
  151. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/mcp_server/install.sh +0 -0
  152. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/mcp_server/mcp_config.json +0 -0
  153. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/mcp_server/pyproject.toml +0 -0
  154. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/mcp_server/pytest.ini +0 -0
  155. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/mcp_server/src/soar_test_assistant/__init__.py +0 -0
  156. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/mcp_server/tests/__init__.py +0 -0
  157. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/mcp_server/tests/test_analyzer.py +0 -0
  158. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/mcp_server/uv.lock +0 -0
  159. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/__init__.py +0 -0
  160. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/actions_manager.py +6 -6
  161. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/apis/__init__.py +0 -0
  162. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/apis/artifact.py +3 -3
  163. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/apis/container.py +2 -2
  164. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/app_templates/basic_app/.gitignore +0 -0
  165. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/app_templates/basic_app/.pre-commit-config.yaml +0 -0
  166. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/app_templates/basic_app/logo.svg +0 -0
  167. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/app_templates/basic_app/logo_dark.svg +0 -0
  168. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/app_templates/basic_app/src/__init__.py +0 -0
  169. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/app_templates/basic_app/uv.lock +0 -0
  170. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/cli/__init__.py +0 -0
  171. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/cli/init/__init__.py +0 -0
  172. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/cli/init/cli.py +5 -5
  173. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/cli/manifests/__init__.py +0 -0
  174. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/cli/manifests/cli.py +0 -0
  175. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/cli/manifests/serializers.py +4 -4
  176. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/cli/path_utils.py +1 -1
  177. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/cli/test/__init__.py +0 -0
  178. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/cli/test/cli.py +0 -0
  179. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/cli/utils.py +0 -0
  180. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/code_renderers/__init__.py +0 -0
  181. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/code_renderers/app_renderer.py +1 -1
  182. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/code_renderers/asset_renderer.py +1 -1
  183. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/code_renderers/templates/pyproject.toml.jinja +0 -0
  184. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/code_renderers/toml_renderer.py +0 -0
  185. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/colors.py +0 -0
  186. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/crypto.py +0 -0
  187. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/decorators/__init__.py +3 -3
  188. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/exceptions.py +0 -0
  189. {splunk_soar_sdk-3.3.2/src/soar_sdk/meta → splunk_soar_sdk-3.5.0/src/soar_sdk/extras}/__init__.py +0 -0
  190. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/field_utils.py +0 -0
  191. {splunk_soar_sdk-3.3.2/src/soar_sdk/views → splunk_soar_sdk-3.5.0/src/soar_sdk/meta}/__init__.py +0 -0
  192. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/meta/adapters.py +0 -0
  193. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/meta/app.py +0 -0
  194. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/meta/datatypes.py +0 -0
  195. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/paths.py +0 -0
  196. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/py.typed +0 -0
  197. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/shims/phantom/consts.py +0 -0
  198. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/shims/phantom/encryption_helper.py +0 -0
  199. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/shims/phantom/install_info.py +1 -1
  200. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/shims/phantom/json_keys.py +0 -0
  201. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/shims/phantom_common/encryption/encryption_manager_factory.py +0 -0
  202. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/templates/base/base_template.html +0 -0
  203. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/templates/base/error.html +0 -0
  204. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/templates/base/header.html +0 -0
  205. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/templates/base/logo_header.html +0 -0
  206. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/templates/components/pie_chart.html +0 -0
  207. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/templates/widgets/widget_resize_snippet.html +0 -0
  208. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/templates/widgets/widget_template.html +0 -0
  209. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/types.py +1 -1
  210. {splunk_soar_sdk-3.3.2/src/soar_sdk/views/components → splunk_soar_sdk-3.5.0/src/soar_sdk/views}/__init__.py +0 -0
  211. {splunk_soar_sdk-3.3.2/src/soar_sdk/webhooks → splunk_soar_sdk-3.5.0/src/soar_sdk/views/components}/__init__.py +0 -0
  212. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/src/soar_sdk/views/components/pie_chart.py +0 -0
  213. {splunk_soar_sdk-3.3.2/tests → splunk_soar_sdk-3.5.0/src/soar_sdk/webhooks}/__init__.py +0 -0
  214. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/test.png +0 -0
  215. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/test.txt +0 -0
  216. {splunk_soar_sdk-3.3.2/tests/cli → splunk_soar_sdk-3.5.0/tests}/__init__.py +0 -0
  217. {splunk_soar_sdk-3.3.2/tests/cli/manifests → splunk_soar_sdk-3.5.0/tests/cli}/__init__.py +0 -0
  218. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/cli/datapath_parse.py +0 -0
  219. {splunk_soar_sdk-3.3.2/tests/example_app/src/actions → splunk_soar_sdk-3.5.0/tests/cli/manifests}/__init__.py +0 -0
  220. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/cli/test_assets/converted_app/actions.py.txt +0 -0
  221. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/cli/test_test_cli.py +0 -0
  222. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app/example_asset.json +0 -0
  223. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app/logo.svg +0 -0
  224. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app/logo_dark.svg +0 -0
  225. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app/release_notes/v1.md +0 -0
  226. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app/src/__init__.py +0 -0
  227. {splunk_soar_sdk-3.3.2/tests/integration → splunk_soar_sdk-3.5.0/tests/example_app/src/actions}/__init__.py +0 -0
  228. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app/src/actions/generate_category.py +0 -0
  229. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app/src/actions/reverse_string.py +1 -1
  230. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app/src/ignoreme.txt +0 -0
  231. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app/templates/reverse_string.html +0 -0
  232. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app_with_webhook/example_asset.json +0 -0
  233. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app_with_webhook/logo.svg +0 -0
  234. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app_with_webhook/logo_dark.svg +0 -0
  235. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app_with_webhook/pyproject.toml +0 -0
  236. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/example_app_with_webhook/src/__init__.py +0 -0
  237. {splunk_soar_sdk-3.3.2/tests/interfaces → splunk_soar_sdk-3.5.0/tests/integration}/__init__.py +0 -0
  238. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/integration/conftest.py +0 -0
  239. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/integration/phantom_constants.py +0 -0
  240. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/integration/phantom_instance.py +3 -3
  241. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/integration/soar_client.py +2 -2
  242. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/integration/test_example_app.py +0 -0
  243. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/integration/test_example_app_with_webhook.py +2 -2
  244. {splunk_soar_sdk-3.3.2/tests/meta → splunk_soar_sdk-3.5.0/tests/interfaces}/__init__.py +0 -0
  245. {splunk_soar_sdk-3.3.2/tests/mocks → splunk_soar_sdk-3.5.0/tests/meta}/__init__.py +0 -0
  246. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/meta/test_actions.py +0 -0
  247. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/meta/test_adapters.py +0 -0
  248. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/meta/test_dependencies.py +7 -7
  249. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/meta/test_webhooks.py +0 -0
  250. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/mocks/dynamic_mocks.py +0 -0
  251. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/mocks/importable_action.py +0 -0
  252. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/stubs.py +0 -0
  253. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_app_action_params.py +1 -1
  254. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_app_client.py +1 -1
  255. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_app_runner.py +6 -6
  256. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_asset.py +1 -1
  257. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_assets/splunk-sdk-2.1.0.tar.gz +0 -0
  258. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_attachment_input.py +0 -0
  259. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_container.py +6 -6
  260. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_es_on_poll.py +4 -4
  261. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/test_field_utils.py +0 -0
  262. {splunk_soar_sdk-3.3.2 → splunk_soar_sdk-3.5.0}/tests/webhooks/test_models.py +1 -1
@@ -1,10 +1,9 @@
1
1
  import argparse
2
+ from typing import cast
2
3
 
3
- from tomlkit import parse, dumps
4
+ from tomlkit import dumps, parse
4
5
  from tomlkit.container import Container
5
6
 
6
- from typing import cast
7
-
8
7
 
9
8
  def update_version(version: str) -> None:
10
9
  pyproject_path = "pyproject.toml"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: splunk-soar-sdk
3
- Version: 3.3.2
3
+ Version: 3.5.0
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
@@ -32,6 +32,8 @@ Requires-Dist: setuptools>=80.9.0
32
32
  Requires-Dist: toml<1,>=0.10.2
33
33
  Requires-Dist: tqdm>=4.67.1
34
34
  Requires-Dist: typer<1,>=0.12.5
35
+ Provides-Extra: email
36
+ Requires-Dist: python-magic>=0.4.27; extra == 'email'
35
37
  Description-Content-Type: text/markdown
36
38
 
37
39
  # Splunk SOAR SDK - the official tool for Splunk SOAR app development
@@ -7,7 +7,7 @@ from typing import Any
7
7
 
8
8
  from mcp.server import Server
9
9
  from mcp.server.stdio import stdio_server
10
- from mcp.types import Tool, TextContent
10
+ from mcp.types import TextContent, Tool
11
11
 
12
12
  app = Server("soar-test-assistant")
13
13
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "splunk-soar-sdk"
3
- version = "3.3.2"
3
+ version = "3.5.0"
4
4
  description = "The official framework for developing and testing Splunk SOAR Apps"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13, <3.15"
@@ -51,6 +51,11 @@ Homepage = "https://github.com/phantomcyber/splunk-soar-sdk"
51
51
  Documentation = "https://github.com/phantomcyber/splunk-soar-sdk"
52
52
  Repository = "https://github.com/phantomcyber/splunk-soar-sdk"
53
53
 
54
+ [project.optional-dependencies]
55
+ email = [
56
+ "python-magic>=0.4.27",
57
+ ]
58
+
54
59
  [project.scripts]
55
60
  soarapps = "soar_sdk.cli.cli:main"
56
61
 
@@ -173,6 +178,7 @@ select = [
173
178
  "PL", # pylint
174
179
  "UP", # pyupgrade
175
180
  "RUF", # ruff's own rules
181
+ "I", # isort
176
182
  ]
177
183
  ignore = [
178
184
  "E402", # Module level import not at top of file.
@@ -0,0 +1,35 @@
1
+ # [3.5.0](https://github.com/phantomcyber/splunk-soar-sdk/compare/3.4.0...3.5.0) (2025-12-05)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * backtracking in forwarded message pattern ([64afc34](https://github.com/phantomcyber/splunk-soar-sdk/commit/64afc346a87db39ceb66bfda477be0dcaff0f84f))
7
+ * urls drop edge case ([eaebe71](https://github.com/phantomcyber/splunk-soar-sdk/commit/eaebe712643fa4d5f64ebeccacb131b7f6952804))
8
+
9
+
10
+ ### Features
11
+
12
+ * email extras added to sdk for apps needing email processing work ([6b353fc](https://github.com/phantomcyber/splunk-soar-sdk/commit/6b353fc86e0083d2c9849055ac2a34b7301db26b))
13
+ * rfc5322 email processing helpers added ([4576b7e](https://github.com/phantomcyber/splunk-soar-sdk/commit/4576b7ed0509ee3cff626e28147605e85158cf0c))
14
+
15
+
16
+
17
+
18
+
19
+ # [3.5.0](https://github.com/phantomcyber/splunk-soar-sdk/compare/3.4.0...3.5.0) (2025-12-05)
20
+
21
+
22
+ ### Bug Fixes
23
+
24
+ * backtracking in forwarded message pattern ([64afc34](https://github.com/phantomcyber/splunk-soar-sdk/commit/64afc346a87db39ceb66bfda477be0dcaff0f84f))
25
+ * urls drop edge case ([eaebe71](https://github.com/phantomcyber/splunk-soar-sdk/commit/eaebe712643fa4d5f64ebeccacb131b7f6952804))
26
+
27
+
28
+ ### Features
29
+
30
+ * email extras added to sdk for apps needing email processing work ([6b353fc](https://github.com/phantomcyber/splunk-soar-sdk/commit/6b353fc86e0083d2c9849055ac2a34b7301db26b))
31
+ * rfc5322 email processing helpers added ([4576b7e](https://github.com/phantomcyber/splunk-soar-sdk/commit/4576b7ed0509ee3cff626e28147605e85158cf0c))
32
+
33
+
34
+
35
+
@@ -0,0 +1 @@
1
+ 3.5.0
@@ -1,14 +1,15 @@
1
1
  from abc import abstractmethod
2
+ from collections.abc import AsyncIterable, Iterable, Mapping
2
3
  from typing import Any, Generic, TypeVar
3
- from collections.abc import Mapping, Iterable, AsyncIterable
4
4
 
5
- from soar_sdk.apis.vault import Vault
6
- from soar_sdk.apis.artifact import Artifact
7
- from soar_sdk.apis.container import Container
8
- from soar_sdk.action_results import ActionOutput
9
5
  import httpx
10
- from pydantic.dataclasses import dataclass
11
6
  from pydantic import field_validator
7
+ from pydantic.dataclasses import dataclass
8
+
9
+ from soar_sdk.action_results import ActionOutput
10
+ from soar_sdk.apis.artifact import Artifact
11
+ from soar_sdk.apis.container import Container
12
+ from soar_sdk.apis.vault import Vault
12
13
 
13
14
  JSONType = dict[str, Any] | list[Any] | str | int | float | bool | None
14
15
  SummaryType = TypeVar("SummaryType", bound=ActionOutput)
@@ -1,15 +1,15 @@
1
- from typing import Union, get_origin, get_args, Any
2
- from collections.abc import Iterator
3
- from typing_extensions import TypedDict
4
- from typing import NotRequired
5
- from pydantic import BaseModel, Field, ConfigDict
6
1
  import itertools
7
2
  import types
3
+ from collections.abc import Iterator
4
+ from typing import Any, NotRequired, Union, get_args, get_origin
5
+
6
+ from pydantic import BaseModel, ConfigDict, Field
7
+ from typing_extensions import TypedDict
8
8
 
9
9
  from soar_sdk.compat import remove_when_soar_newer_than
10
- from soar_sdk.shims.phantom.action_result import ActionResult as PhantomActionResult
11
- from soar_sdk.meta.datatypes import as_datatype
12
10
  from soar_sdk.field_utils import parse_json_schema_extra
11
+ from soar_sdk.meta.datatypes import as_datatype
12
+ from soar_sdk.shims.phantom.action_result import ActionResult as PhantomActionResult
13
13
 
14
14
  remove_when_soar_newer_than(
15
15
  "7.0.0", "NotRequired from typing_extensions is in typing in Python 3.11+"
@@ -1,6 +1,7 @@
1
- import httpx
2
- from typing import Any
3
1
  from collections.abc import Generator
2
+ from typing import Any
3
+
4
+ import httpx
4
5
 
5
6
 
6
7
  def is_client_authenticated(client: httpx.Client) -> bool:
@@ -1,4 +1,5 @@
1
1
  from typing import TYPE_CHECKING
2
+
2
3
  from soar_sdk.models.vault_attachment import VaultAttachment
3
4
  from soar_sdk.shims.phantom.vault import PhantomVault, VaultBase
4
5
 
@@ -1,48 +1,45 @@
1
1
  import importlib.util
2
2
  import inspect
3
3
  import json
4
- from pathlib import Path
5
4
  import sys
5
+ import uuid
6
+ from collections.abc import Callable, Iterator
7
+ from pathlib import Path
6
8
  from typing import Any
7
- from collections.abc import Callable
8
- from collections.abc import Iterator
9
9
  from zoneinfo import ZoneInfo
10
10
 
11
+ from soar_sdk.abstract import SOARClient, SOARClientAuth
12
+ from soar_sdk.action_results import ActionOutput, ActionResult
13
+ from soar_sdk.actions_manager import ActionsManager
14
+ from soar_sdk.app_cli_runner import AppCliRunner
15
+ from soar_sdk.app_client import AppClient
11
16
  from soar_sdk.asset import BaseAsset
12
- from soar_sdk.input_spec import InputSpecification
17
+ from soar_sdk.asset_state import AssetState
13
18
  from soar_sdk.compat import (
14
19
  MIN_PHANTOM_VERSION,
15
20
  PythonVersion,
16
21
  )
22
+ from soar_sdk.decorators import (
23
+ ActionDecorator,
24
+ ConnectivityTestDecorator,
25
+ MakeRequestDecorator,
26
+ OnESPollDecorator,
27
+ OnPollDecorator,
28
+ ViewHandlerDecorator,
29
+ WebhookDecorator,
30
+ )
31
+ from soar_sdk.exceptions import ActionRegistrationError
32
+ from soar_sdk.input_spec import InputSpecification
33
+ from soar_sdk.logging import getLogger
34
+ from soar_sdk.meta.webhooks import WebhookMeta
35
+ from soar_sdk.params import Params
17
36
  from soar_sdk.shims.phantom_common.app_interface.app_interface import SoarRestClient
18
37
  from soar_sdk.shims.phantom_common.encryption.encryption_manager_factory import (
19
38
  platform_encryption_backend,
20
39
  )
21
- from soar_sdk.abstract import SOARClient, SOARClientAuth
22
- from soar_sdk.action_results import ActionResult
23
- from soar_sdk.actions_manager import ActionsManager
24
- from soar_sdk.app_cli_runner import AppCliRunner
25
- from soar_sdk.meta.webhooks import WebhookMeta
26
- from soar_sdk.params import Params
27
- from soar_sdk.app_client import AppClient
28
- from soar_sdk.action_results import ActionOutput
29
- from soar_sdk.logging import getLogger
30
40
  from soar_sdk.types import Action
31
- from soar_sdk.webhooks.routing import Router
32
41
  from soar_sdk.webhooks.models import WebhookRequest, WebhookResponse
33
- from soar_sdk.exceptions import ActionRegistrationError
34
- from soar_sdk.asset_state import AssetState
35
-
36
- import uuid
37
- from soar_sdk.decorators import (
38
- ConnectivityTestDecorator,
39
- ActionDecorator,
40
- ViewHandlerDecorator,
41
- OnPollDecorator,
42
- OnESPollDecorator,
43
- WebhookDecorator,
44
- MakeRequestDecorator,
45
- )
42
+ from soar_sdk.webhooks.routing import Router
46
43
 
47
44
 
48
45
  def is_valid_uuid(value: str) -> bool:
@@ -1,22 +1,23 @@
1
1
  import argparse
2
2
  import inspect
3
3
  import json
4
- from pathlib import Path
4
+ import os
5
5
  import typing
6
+ from pathlib import Path
6
7
  from typing import Any
7
- import os
8
+ from urllib.parse import parse_qs, urlparse
9
+
8
10
  from pydantic import ValidationError
9
- from urllib.parse import urlparse, parse_qs
10
11
 
12
+ from soar_sdk.abstract import SOARClientAuth
11
13
  from soar_sdk.input_spec import ActionParameter, AppConfig, InputSpecification, SoarAuth
14
+ from soar_sdk.logging import PhantomLogger
15
+ from soar_sdk.shims.phantom_common.app_interface.app_interface import SoarRestClient
12
16
  from soar_sdk.shims.phantom_common.encryption.encryption_manager_factory import (
13
17
  platform_encryption_backend,
14
18
  )
15
19
  from soar_sdk.types import Action
16
20
  from soar_sdk.webhooks.models import WebhookRequest
17
- from soar_sdk.logging import PhantomLogger
18
- from soar_sdk.shims.phantom_common.app_interface.app_interface import SoarRestClient
19
- from soar_sdk.abstract import SOARClientAuth
20
21
 
21
22
  if typing.TYPE_CHECKING:
22
23
  from .app import App
@@ -1,15 +1,14 @@
1
- from dataclasses import dataclass
2
- from typing import Any, TYPE_CHECKING
3
1
  from collections.abc import Mapping
2
+ from dataclasses import dataclass
3
+ from typing import TYPE_CHECKING, Any
4
4
 
5
5
  import httpx
6
6
 
7
+ from soar_sdk.abstract import SOARClient, SOARClientAuth, SummaryType
7
8
  from soar_sdk.apis.artifact import Artifact
8
9
  from soar_sdk.apis.container import Container
9
10
  from soar_sdk.apis.vault import Vault
10
11
 
11
- from soar_sdk.abstract import SOARClient, SOARClientAuth, SummaryType
12
-
13
12
  if TYPE_CHECKING:
14
13
  pass
15
14
 
@@ -1,18 +1,16 @@
1
- from typing import Any
1
+ from typing import Any, NotRequired
2
2
  from zoneinfo import ZoneInfo
3
- from pydantic import BaseModel, model_validator, ConfigDict, Field
4
- from pydantic_core import PydanticUndefined
5
3
 
4
+ from pydantic import BaseModel, ConfigDict, Field, model_validator
5
+ from pydantic_core import PydanticUndefined
6
6
  from typing_extensions import TypedDict
7
- from typing import NotRequired
8
-
9
7
 
10
- from soar_sdk.compat import remove_when_soar_newer_than
11
- from soar_sdk.meta.datatypes import as_datatype
12
- from soar_sdk.input_spec import AppConfig
13
- from soar_sdk.field_utils import parse_json_schema_extra
14
8
  from soar_sdk.asset_state import AssetState
9
+ from soar_sdk.compat import remove_when_soar_newer_than
15
10
  from soar_sdk.exceptions import AppContextRequired
11
+ from soar_sdk.field_utils import parse_json_schema_extra
12
+ from soar_sdk.input_spec import AppConfig
13
+ from soar_sdk.meta.datatypes import as_datatype
16
14
 
17
15
  remove_when_soar_newer_than(
18
16
  "7.0.0", "NotRequired from typing_extensions is in typing in Python 3.11+"
@@ -1,10 +1,9 @@
1
1
  import json
2
- from collections.abc import MutableMapping, Iterator
2
+ from collections.abc import Iterator, MutableMapping
3
3
 
4
4
  from soar_sdk.shims.phantom.base_connector import BaseConnector
5
5
  from soar_sdk.shims.phantom.encryption_helper import encryption_helper
6
6
 
7
-
8
7
  AssetStateKeyType = str
9
8
  AssetStateValueType = str | bool | int | float | None
10
9
  AssetStateType = dict[AssetStateKeyType, AssetStateValueType]
@@ -1,8 +1,7 @@
1
1
  import asyncio
2
2
  import inspect
3
- from typing import Any, TypeVar, overload
4
3
  from collections.abc import AsyncGenerator, Coroutine
5
-
4
+ from typing import Any, TypeVar, overload
6
5
 
7
6
  T = TypeVar("T")
8
7
 
@@ -1,11 +1,11 @@
1
1
  import typer
2
2
 
3
3
  from soar_sdk import __version__
4
- from soar_sdk.paths import SDK_ROOT
4
+ from soar_sdk.cli.init.cli import convert, init
5
5
  from soar_sdk.cli.manifests.cli import manifests
6
6
  from soar_sdk.cli.package.cli import package
7
- from soar_sdk.cli.init.cli import init, convert
8
7
  from soar_sdk.cli.test.cli import test
8
+ from soar_sdk.paths import SDK_ROOT
9
9
 
10
10
  CONTEXT_SETTINGS = {"help_option_names": ["-h", "--help"]}
11
11
  HELP = """A command-line tool for helping with SOAR Apps development"""
@@ -2,15 +2,16 @@ import dataclasses
2
2
  import json
3
3
  from pathlib import Path
4
4
  from typing import Any, NamedTuple, TypeVar, cast
5
+
5
6
  import pydantic
6
7
 
7
- from soar_sdk.action_results import ActionOutput, OutputFieldSpecification, OutputField
8
- from soar_sdk.cli.utils import normalize_field_name, NormalizationResult
8
+ from soar_sdk.action_results import ActionOutput, OutputField, OutputFieldSpecification
9
+ from soar_sdk.cli.utils import NormalizationResult, normalize_field_name
9
10
  from soar_sdk.compat import remove_when_soar_newer_than
10
11
  from soar_sdk.meta.actions import ActionMeta
11
12
  from soar_sdk.meta.app import AppMeta
12
- from soar_sdk.params import Params, Param
13
13
  from soar_sdk.meta.datatypes import to_python_type
14
+ from soar_sdk.params import Param, Params
14
15
 
15
16
 
16
17
  class DeserializedAppMeta(NamedTuple):
@@ -1,10 +1,10 @@
1
1
  import importlib
2
2
  import json
3
- import toml
4
- from datetime import datetime, UTC
3
+ from datetime import UTC, datetime
5
4
  from pathlib import Path
6
5
  from pprint import pprint
7
6
 
7
+ import toml
8
8
  from packaging.specifiers import SpecifierSet
9
9
 
10
10
  from soar_sdk.app import App
@@ -1,27 +1,27 @@
1
+ import asyncio
1
2
  import contextlib
2
- from datetime import timedelta
3
- import humanize
4
- import typer
5
-
3
+ import json
4
+ import os
6
5
  import tarfile
6
+ import time
7
+ from datetime import timedelta
7
8
  from io import BytesIO
8
- import json
9
+ from itertools import chain
9
10
  from pathlib import Path
10
- import asyncio
11
- import time
12
11
  from typing import Annotated
13
- from tqdm import tqdm
12
+
13
+ import httpx
14
+ import humanize
15
+ import typer
14
16
  from rich.console import Console
15
17
  from rich.panel import Panel
18
+ from tqdm import tqdm
16
19
 
17
20
  from soar_sdk.cli.manifests.processors import ManifestProcessor
18
- from soar_sdk.meta.dependencies import DependencyWheel
19
- from soar_sdk.cli.path_utils import context_directory
20
21
  from soar_sdk.cli.package.utils import phantom_get_login_session, phantom_install_app
21
- from soar_sdk.paths import SDK_TEMPLATES, APP_TEMPLATES
22
- from itertools import chain
23
- import os
24
- import httpx
22
+ from soar_sdk.cli.path_utils import context_directory
23
+ from soar_sdk.meta.dependencies import DependencyWheel
24
+ from soar_sdk.paths import APP_TEMPLATES, SDK_TEMPLATES
25
25
 
26
26
  package = typer.Typer()
27
27
  console = Console() # For printing lots of pretty colors and stuff
@@ -1,6 +1,7 @@
1
- import httpx
2
- from contextlib import asynccontextmanager
3
1
  from collections.abc import AsyncGenerator
2
+ from contextlib import asynccontextmanager
3
+
4
+ import httpx
4
5
 
5
6
 
6
7
  @asynccontextmanager
@@ -1,15 +1,16 @@
1
- from typing import ClassVar
2
- from collections.abc import Iterator
3
- import typing
4
1
  import ast
2
+ import typing
3
+ from collections.abc import Iterator
4
+ from typing import ClassVar
5
+
5
6
  from pydantic_core import PydanticUndefined
6
7
 
7
8
  from soar_sdk.action_results import ActionOutput
8
9
  from soar_sdk.cli.utils import normalize_field_name
9
10
  from soar_sdk.code_renderers.renderer import AstRenderer
11
+ from soar_sdk.field_utils import parse_json_schema_extra
10
12
  from soar_sdk.meta.actions import ActionMeta
11
13
  from soar_sdk.params import Params
12
- from soar_sdk.field_utils import parse_json_schema_extra
13
14
 
14
15
 
15
16
  class ActionRenderer(AstRenderer[ActionMeta]):
@@ -1,9 +1,9 @@
1
1
  import abc
2
- from typing import TypeVar, Generic
3
- import jinja2 as j2
4
2
  import ast
5
3
  from collections.abc import Iterator
4
+ from typing import Generic, TypeVar
6
5
 
6
+ import jinja2 as j2
7
7
 
8
8
  ContextT = TypeVar("ContextT")
9
9
 
@@ -1,5 +1,6 @@
1
- from enum import Enum
2
1
  import functools
2
+ from enum import Enum
3
+
3
4
  from packaging.version import Version
4
5
 
5
6
  MIN_PHANTOM_VERSION = "7.0.0"
@@ -1,20 +1,16 @@
1
1
  import inspect
2
+ import traceback
3
+ from collections.abc import AsyncGenerator, Callable, Iterator
2
4
  from functools import wraps
3
- from collections.abc import Iterator
4
- from typing import Any, get_args, get_origin
5
- from collections.abc import Callable
6
- from collections.abc import AsyncGenerator
5
+ from typing import TYPE_CHECKING, Any, get_args, get_origin
7
6
 
8
7
  from soar_sdk.abstract import SOARClient
9
- from soar_sdk.action_results import ActionResult, ActionOutput
10
- from soar_sdk.params import Params
8
+ from soar_sdk.action_results import ActionOutput, ActionResult
9
+ from soar_sdk.async_utils import run_async_if_needed
10
+ from soar_sdk.exceptions import ActionFailure
11
11
  from soar_sdk.meta.actions import ActionMeta
12
+ from soar_sdk.params import Params
12
13
  from soar_sdk.types import Action, action_protocol
13
- from soar_sdk.exceptions import ActionFailure
14
- from soar_sdk.async_utils import run_async_if_needed
15
- import traceback
16
-
17
- from typing import TYPE_CHECKING
18
14
 
19
15
  if TYPE_CHECKING:
20
16
  from soar_sdk.app import App
@@ -1,19 +1,17 @@
1
1
  import inspect
2
+ import traceback
3
+ from collections.abc import Callable
4
+ from functools import wraps
5
+ from typing import TYPE_CHECKING, Any
2
6
 
3
7
  from soar_sdk.abstract import SOARClient
4
- from soar_sdk.action_results import ActionResult
5
- from soar_sdk.params import MakeRequestParams
6
- from soar_sdk.meta.actions import ActionMeta
7
- from soar_sdk.action_results import ActionOutput, MakeRequestOutput
8
- from soar_sdk.types import Action, action_protocol
9
- from soar_sdk.exceptions import ActionFailure
8
+ from soar_sdk.action_results import ActionOutput, ActionResult, MakeRequestOutput
10
9
  from soar_sdk.async_utils import run_async_if_needed
10
+ from soar_sdk.exceptions import ActionFailure
11
11
  from soar_sdk.logging import getLogger
12
- from functools import wraps
13
- import traceback
14
-
15
- from typing import TYPE_CHECKING, Any
16
- from collections.abc import Callable
12
+ from soar_sdk.meta.actions import ActionMeta
13
+ from soar_sdk.params import MakeRequestParams
14
+ from soar_sdk.types import Action, action_protocol
17
15
 
18
16
  if TYPE_CHECKING:
19
17
  from soar_sdk.app import App
@@ -1,22 +1,19 @@
1
1
  import inspect
2
+ from collections.abc import Callable, Iterator
2
3
  from functools import wraps
3
- from typing import Any
4
- from collections.abc import Callable
5
- from collections.abc import Iterator
4
+ from typing import TYPE_CHECKING, Any
6
5
 
7
6
  from soar_sdk.abstract import SOARClient
8
7
  from soar_sdk.action_results import ActionResult
9
- from soar_sdk.params import OnESPollParams
10
- from soar_sdk.meta.actions import ActionMeta
11
- from soar_sdk.types import Action, action_protocol
12
- from soar_sdk.exceptions import ActionFailure
13
8
  from soar_sdk.async_utils import run_async_if_needed
9
+ from soar_sdk.exceptions import ActionFailure
14
10
  from soar_sdk.logging import getLogger
15
- from soar_sdk.models.finding import Finding
11
+ from soar_sdk.meta.actions import ActionMeta
16
12
  from soar_sdk.models.attachment_input import AttachmentInput
17
13
  from soar_sdk.models.container import Container
18
-
19
- from typing import TYPE_CHECKING
14
+ from soar_sdk.models.finding import Finding
15
+ from soar_sdk.params import OnESPollParams
16
+ from soar_sdk.types import Action, action_protocol
20
17
 
21
18
  if TYPE_CHECKING:
22
19
  from soar_sdk.app import App
@@ -1,20 +1,16 @@
1
1
  import inspect
2
+ from collections.abc import Callable, Iterator
2
3
  from functools import wraps
3
- from typing import Any
4
- from collections.abc import Callable
5
- from collections.abc import Iterator
4
+ from typing import TYPE_CHECKING, Any
6
5
 
7
6
  from soar_sdk.abstract import SOARClient
8
7
  from soar_sdk.action_results import ActionResult
9
- from soar_sdk.params import OnPollParams
10
- from soar_sdk.meta.actions import ActionMeta
11
- from soar_sdk.types import Action, action_protocol
12
- from soar_sdk.exceptions import ActionFailure
13
8
  from soar_sdk.async_utils import run_async_if_needed
9
+ from soar_sdk.exceptions import ActionFailure
14
10
  from soar_sdk.logging import getLogger
15
-
16
-
17
- from typing import TYPE_CHECKING
11
+ from soar_sdk.meta.actions import ActionMeta
12
+ from soar_sdk.params import OnPollParams
13
+ from soar_sdk.types import Action, action_protocol
18
14
 
19
15
  if TYPE_CHECKING:
20
16
  from soar_sdk.app import App
@@ -75,8 +71,8 @@ class OnPollDecorator:
75
71
  **kwargs: Any, # noqa: ANN401
76
72
  ) -> bool:
77
73
  # Lazy imports to avoid circular dependencies
78
- from soar_sdk.models.container import Container
79
74
  from soar_sdk.models.artifact import Artifact
75
+ from soar_sdk.models.container import Container
80
76
 
81
77
  try:
82
78
  # Validate poll params
@@ -1,16 +1,15 @@
1
1
  import inspect
2
- from functools import wraps
2
+ import traceback
3
3
  from collections.abc import Callable
4
+ from functools import wraps
5
+ from typing import TYPE_CHECKING
4
6
 
5
7
  from soar_sdk.abstract import SOARClient
6
8
  from soar_sdk.action_results import ActionResult
9
+ from soar_sdk.async_utils import run_async_if_needed
10
+ from soar_sdk.exceptions import ActionFailure
7
11
  from soar_sdk.meta.actions import ActionMeta
8
12
  from soar_sdk.types import Action, action_protocol
9
- from soar_sdk.exceptions import ActionFailure
10
- from soar_sdk.async_utils import run_async_if_needed
11
- import traceback
12
-
13
- from typing import TYPE_CHECKING
14
13
 
15
14
  if TYPE_CHECKING:
16
15
  from soar_sdk.app import App