cycode 3.10.3.dev2__tar.gz → 3.10.4.dev1__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 (201) hide show
  1. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/PKG-INFO +1 -1
  2. cycode-3.10.4.dev1/cycode/__init__.py +1 -0
  3. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/code_scanner.py +76 -4
  4. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/commit_range_scanner.py +51 -8
  5. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/consts.py +5 -2
  6. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/zip_documents.py +5 -1
  7. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/scan_batch.py +5 -1
  8. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/scan_utils.py +5 -0
  9. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/models.py +20 -0
  10. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/scan_client.py +61 -0
  11. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/pyproject.toml +1 -1
  12. cycode-3.10.3.dev2/cycode/__init__.py +0 -1
  13. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/LICENCE +0 -0
  14. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/README.md +0 -0
  15. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/__main__.py +0 -0
  16. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/__init__.py +0 -0
  17. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/app.py +0 -0
  18. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/__init__.py +0 -0
  19. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/__init__.py +0 -0
  20. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/command_utils.py +0 -0
  21. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/consts.py +0 -0
  22. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/hooks_manager.py +0 -0
  23. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/install_command.py +0 -0
  24. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/scan/__init__.py +0 -0
  25. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/scan/consts.py +0 -0
  26. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/scan/handlers.py +0 -0
  27. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/scan/payload.py +0 -0
  28. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/scan/policy.py +0 -0
  29. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/scan/response_builders.py +0 -0
  30. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/scan/scan_command.py +0 -0
  31. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/scan/types.py +0 -0
  32. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/scan/utils.py +0 -0
  33. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/status_command.py +0 -0
  34. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_guardrails/uninstall_command.py +0 -0
  35. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_remediation/__init__.py +0 -0
  36. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_remediation/ai_remediation_command.py +0 -0
  37. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_remediation/apply_fix.py +0 -0
  38. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ai_remediation/print_remediation.py +0 -0
  39. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/auth/__init__.py +0 -0
  40. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/auth/auth_command.py +0 -0
  41. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/auth/auth_common.py +0 -0
  42. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/auth/auth_manager.py +0 -0
  43. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/auth/models.py +0 -0
  44. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/configure/__init__.py +0 -0
  45. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/configure/configure_command.py +0 -0
  46. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/configure/consts.py +0 -0
  47. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/configure/messages.py +0 -0
  48. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/configure/prompts.py +0 -0
  49. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ignore/__init__.py +0 -0
  50. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/ignore/ignore_command.py +0 -0
  51. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/mcp/__init__.py +0 -0
  52. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/mcp/mcp_command.py +0 -0
  53. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report/__init__.py +0 -0
  54. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report/report_command.py +0 -0
  55. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report/sbom/__init__.py +0 -0
  56. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report/sbom/common.py +0 -0
  57. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report/sbom/path/__init__.py +0 -0
  58. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report/sbom/path/path_command.py +0 -0
  59. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report/sbom/repository_url/__init__.py +0 -0
  60. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report/sbom/repository_url/repository_url_command.py +0 -0
  61. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report/sbom/sbom_command.py +0 -0
  62. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report/sbom/sbom_report_file.py +0 -0
  63. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report_import/__init__.py +0 -0
  64. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report_import/report_import_command.py +0 -0
  65. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report_import/sbom/__init__.py +0 -0
  66. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/report_import/sbom/sbom_command.py +0 -0
  67. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/sca_options.py +0 -0
  68. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/__init__.py +0 -0
  69. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/aggregation_report.py +0 -0
  70. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/commit_history/__init__.py +0 -0
  71. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/commit_history/commit_history_command.py +0 -0
  72. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/detection_excluder.py +0 -0
  73. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/path/__init__.py +0 -0
  74. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/path/path_command.py +0 -0
  75. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/pre_commit/__init__.py +0 -0
  76. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/pre_commit/pre_commit_command.py +0 -0
  77. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/pre_push/__init__.py +0 -0
  78. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/pre_push/pre_push_command.py +0 -0
  79. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/pre_receive/__init__.py +0 -0
  80. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/pre_receive/pre_receive_command.py +0 -0
  81. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/remote_url_resolver.py +0 -0
  82. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/repository/__init__.py +0 -0
  83. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/repository/repository_command.py +0 -0
  84. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/scan_ci/__init__.py +0 -0
  85. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/scan_ci/ci_integrations.py +0 -0
  86. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/scan_ci/scan_ci_command.py +0 -0
  87. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/scan_command.py +0 -0
  88. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/scan_parameters.py +0 -0
  89. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/scan/scan_result.py +0 -0
  90. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/status/__init__.py +0 -0
  91. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/status/get_cli_status.py +0 -0
  92. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/status/models.py +0 -0
  93. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/status/status_command.py +0 -0
  94. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/apps/status/version_command.py +0 -0
  95. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/cli_types.py +0 -0
  96. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/config.py +0 -0
  97. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/console.py +0 -0
  98. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/exceptions/__init__.py +0 -0
  99. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/exceptions/custom_exceptions.py +0 -0
  100. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/exceptions/handle_ai_remediation_errors.py +0 -0
  101. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/exceptions/handle_auth_errors.py +0 -0
  102. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/exceptions/handle_errors.py +0 -0
  103. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/exceptions/handle_report_sbom_errors.py +0 -0
  104. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/exceptions/handle_scan_errors.py +0 -0
  105. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/__init__.py +0 -0
  106. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/commit_range_documents.py +0 -0
  107. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/documents_walk_ignore.py +0 -0
  108. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/file_excluder.py +0 -0
  109. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/iac/__init__.py +0 -0
  110. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/iac/tf_content_generator.py +0 -0
  111. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/models/__init__.py +0 -0
  112. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/models/in_memory_zip.py +0 -0
  113. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/path_documents.py +0 -0
  114. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/repository_documents.py +0 -0
  115. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/__init__.py +0 -0
  116. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/base_restore_dependencies.py +0 -0
  117. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/go/__init__.py +0 -0
  118. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/go/restore_go_dependencies.py +0 -0
  119. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/maven/__init__.py +0 -0
  120. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/maven/restore_gradle_dependencies.py +0 -0
  121. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/maven/restore_maven_dependencies.py +0 -0
  122. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/npm/__init__.py +0 -0
  123. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/npm/restore_deno_dependencies.py +0 -0
  124. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/npm/restore_npm_dependencies.py +0 -0
  125. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/npm/restore_pnpm_dependencies.py +0 -0
  126. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/npm/restore_yarn_dependencies.py +0 -0
  127. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/nuget/__init__.py +0 -0
  128. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/nuget/restore_nuget_dependencies.py +0 -0
  129. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/php/__init__.py +0 -0
  130. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/php/restore_composer_dependencies.py +0 -0
  131. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/python/__init__.py +0 -0
  132. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/python/restore_pipenv_dependencies.py +0 -0
  133. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/python/restore_poetry_dependencies.py +0 -0
  134. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/ruby/__init__.py +0 -0
  135. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/ruby/restore_ruby_dependencies.py +0 -0
  136. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/sbt/__init__.py +0 -0
  137. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/sbt/restore_sbt_dependencies.py +0 -0
  138. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/sca/sca_file_collector.py +0 -0
  139. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/files_collector/walk_ignore.py +0 -0
  140. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/logger.py +0 -0
  141. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/main.py +0 -0
  142. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/models.py +0 -0
  143. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/__init__.py +0 -0
  144. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/console_printer.py +0 -0
  145. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/json_printer.py +0 -0
  146. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/printer_base.py +0 -0
  147. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/rich_printer.py +0 -0
  148. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/tables/__init__.py +0 -0
  149. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/tables/sca_table_printer.py +0 -0
  150. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/tables/table.py +0 -0
  151. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/tables/table_models.py +0 -0
  152. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/tables/table_printer.py +0 -0
  153. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/tables/table_printer_base.py +0 -0
  154. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/text_printer.py +0 -0
  155. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/utils/__init__.py +0 -0
  156. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/utils/code_snippet_syntax.py +0 -0
  157. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/utils/detection_data.py +0 -0
  158. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/utils/detection_ordering/__init__.py +0 -0
  159. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/utils/detection_ordering/common_ordering.py +0 -0
  160. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/utils/detection_ordering/sca_ordering.py +0 -0
  161. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/printers/utils/rich_helpers.py +0 -0
  162. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/user_settings/__init__.py +0 -0
  163. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/user_settings/base_file_manager.py +0 -0
  164. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/user_settings/config_file_manager.py +0 -0
  165. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/user_settings/configuration_manager.py +0 -0
  166. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/user_settings/credentials_manager.py +0 -0
  167. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/user_settings/jwt_creator.py +0 -0
  168. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/__init__.py +0 -0
  169. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/enum_utils.py +0 -0
  170. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/get_api_client.py +0 -0
  171. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/git_proxy.py +0 -0
  172. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/ignore_utils.py +0 -0
  173. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/jwt_utils.py +0 -0
  174. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/path_utils.py +0 -0
  175. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/progress_bar.py +0 -0
  176. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/shell_executor.py +0 -0
  177. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/string_utils.py +0 -0
  178. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/task_timer.py +0 -0
  179. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/url_utils.py +0 -0
  180. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/version_checker.py +0 -0
  181. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cli/utils/yaml_utils.py +0 -0
  182. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/config.py +0 -0
  183. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/__init__.py +0 -0
  184. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/ai_security_manager_client.py +0 -0
  185. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/ai_security_manager_service_config.py +0 -0
  186. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/auth_client.py +0 -0
  187. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/base_token_auth_client.py +0 -0
  188. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/client_creator.py +0 -0
  189. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/config.py +0 -0
  190. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/config_dev.py +0 -0
  191. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/cycode_client.py +0 -0
  192. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/cycode_client_base.py +0 -0
  193. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/cycode_dev_based_client.py +0 -0
  194. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/cycode_oidc_based_client.py +0 -0
  195. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/cycode_token_based_client.py +0 -0
  196. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/headers.py +0 -0
  197. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/import_sbom_client.py +0 -0
  198. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/logger.py +0 -0
  199. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/report_client.py +0 -0
  200. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/cyclient/scan_config_base.py +0 -0
  201. {cycode-3.10.3.dev2 → cycode-3.10.4.dev1}/cycode/logger.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cycode
3
- Version: 3.10.3.dev2
3
+ Version: 3.10.4.dev1
4
4
  Summary: Boost security in your dev lifecycle via SAST, SCA, Secrets & IaC scanning.
5
5
  License-Expression: MIT
6
6
  License-File: LICENCE
@@ -0,0 +1 @@
1
+ __version__ = '3.10.4.dev1' # DON'T TOUCH. Placeholder. Will be filled automatically on poetry build from Git Tag
@@ -29,12 +29,15 @@ from cycode.cli.utils.scan_utils import (
29
29
  generate_unique_scan_id,
30
30
  is_cycodeignore_allowed_by_scan_config,
31
31
  set_issue_detected_by_scan_results,
32
+ should_use_presigned_upload,
32
33
  )
33
34
  from cycode.cyclient.models import ZippedFileScanResult
34
35
  from cycode.logger import get_logger
35
36
 
36
37
  if TYPE_CHECKING:
37
38
  from cycode.cli.files_collector.models.in_memory_zip import InMemoryZip
39
+ from cycode.cli.printers.console_printer import ConsolePrinter
40
+ from cycode.cli.utils.progress_bar import BaseProgressBar
38
41
  from cycode.cyclient.scan_client import ScanClient
39
42
 
40
43
  start_scan_time = time.time()
@@ -106,7 +109,10 @@ def _should_use_sync_flow(command_scan_type: str, scan_type: str, sync_option: b
106
109
 
107
110
 
108
111
  def _get_scan_documents_thread_func(
109
- ctx: typer.Context, is_git_diff: bool, is_commit_range: bool, scan_parameters: dict
112
+ ctx: typer.Context,
113
+ is_git_diff: bool,
114
+ is_commit_range: bool,
115
+ scan_parameters: dict,
110
116
  ) -> Callable[[list[Document]], tuple[str, CliError, LocalScanResult]]:
111
117
  cycode_client = ctx.obj['client']
112
118
  scan_type = ctx.obj['scan_type']
@@ -180,6 +186,36 @@ def _get_scan_documents_thread_func(
180
186
  return _scan_batch_thread_func
181
187
 
182
188
 
189
+ def _run_presigned_upload_scan(
190
+ scan_batch_thread_func: Callable,
191
+ scan_type: str,
192
+ documents_to_scan: list[Document],
193
+ progress_bar: 'BaseProgressBar',
194
+ printer: 'ConsolePrinter',
195
+ ) -> tuple:
196
+ try:
197
+ # Try to zip all documents as a single batch; ZipTooLargeError raised if it exceeds the scan type's limit
198
+ zip_documents(scan_type, documents_to_scan)
199
+ # It fits: skip batching and upload everything as one ZIP
200
+ return run_parallel_batched_scan(
201
+ scan_batch_thread_func,
202
+ scan_type,
203
+ documents_to_scan,
204
+ progress_bar=progress_bar,
205
+ skip_batching=True,
206
+ )
207
+ except custom_exceptions.ZipTooLargeError:
208
+ printer.print_warning(
209
+ 'The scan is too large to upload as a single file. This may result in corrupted scan results.'
210
+ )
211
+ return run_parallel_batched_scan(
212
+ scan_batch_thread_func,
213
+ scan_type,
214
+ documents_to_scan,
215
+ progress_bar=progress_bar,
216
+ )
217
+
218
+
183
219
  def scan_documents(
184
220
  ctx: typer.Context,
185
221
  documents_to_scan: list[Document],
@@ -203,9 +239,15 @@ def scan_documents(
203
239
  return
204
240
 
205
241
  scan_batch_thread_func = _get_scan_documents_thread_func(ctx, is_git_diff, is_commit_range, scan_parameters)
206
- errors, local_scan_results = run_parallel_batched_scan(
207
- scan_batch_thread_func, scan_type, documents_to_scan, progress_bar=progress_bar
208
- )
242
+
243
+ if should_use_presigned_upload(scan_type):
244
+ errors, local_scan_results = _run_presigned_upload_scan(
245
+ scan_batch_thread_func, scan_type, documents_to_scan, progress_bar, printer
246
+ )
247
+ else:
248
+ errors, local_scan_results = run_parallel_batched_scan(
249
+ scan_batch_thread_func, scan_type, documents_to_scan, progress_bar=progress_bar
250
+ )
209
251
 
210
252
  try_set_aggregation_report_url_if_needed(ctx, scan_parameters, ctx.obj['client'], scan_type)
211
253
 
@@ -217,6 +259,31 @@ def scan_documents(
217
259
  print_local_scan_results(ctx, local_scan_results, errors)
218
260
 
219
261
 
262
+ def _perform_scan_v4_async(
263
+ cycode_client: 'ScanClient',
264
+ zipped_documents: 'InMemoryZip',
265
+ scan_type: str,
266
+ scan_parameters: dict,
267
+ is_git_diff: bool,
268
+ is_commit_range: bool,
269
+ ) -> ZippedFileScanResult:
270
+ upload_link = cycode_client.get_upload_link(scan_type)
271
+ logger.debug('Got upload link, %s', {'upload_id': upload_link.upload_id})
272
+
273
+ cycode_client.upload_to_presigned_post(upload_link.url, upload_link.presigned_post_fields, zipped_documents)
274
+ logger.debug('Uploaded zip to presigned URL')
275
+
276
+ scan_async_result = cycode_client.scan_repository_from_upload_id(
277
+ scan_type, upload_link.upload_id, scan_parameters, is_git_diff, is_commit_range
278
+ )
279
+ logger.debug(
280
+ 'Presigned upload scan request triggered, %s',
281
+ {'scan_id': scan_async_result.scan_id, 'upload_id': upload_link.upload_id},
282
+ )
283
+
284
+ return poll_scan_results(cycode_client, scan_async_result.scan_id, scan_type, scan_parameters)
285
+
286
+
220
287
  def _perform_scan_async(
221
288
  cycode_client: 'ScanClient',
222
289
  zipped_documents: 'InMemoryZip',
@@ -262,6 +329,11 @@ def _perform_scan(
262
329
  # it does not support commit range scans; should_use_sync_flow handles it
263
330
  return _perform_scan_sync(cycode_client, zipped_documents, scan_type, scan_parameters, is_git_diff)
264
331
 
332
+ if should_use_presigned_upload(scan_type):
333
+ return _perform_scan_v4_async(
334
+ cycode_client, zipped_documents, scan_type, scan_parameters, is_git_diff, is_commit_range
335
+ )
336
+
265
337
  return _perform_scan_async(cycode_client, zipped_documents, scan_type, scan_parameters, is_commit_range)
266
338
 
267
339
 
@@ -44,6 +44,7 @@ from cycode.cli.utils.scan_utils import (
44
44
  generate_unique_scan_id,
45
45
  is_cycodeignore_allowed_by_scan_config,
46
46
  set_issue_detected_by_scan_results,
47
+ should_use_presigned_upload,
47
48
  )
48
49
  from cycode.cyclient.models import ZippedFileScanResult
49
50
  from cycode.logger import get_logger
@@ -86,6 +87,38 @@ def _perform_commit_range_scan_async(
86
87
  return poll_scan_results(cycode_client, scan_async_result.scan_id, scan_type, scan_parameters, timeout)
87
88
 
88
89
 
90
+ def _perform_commit_range_scan_v4_async(
91
+ cycode_client: 'ScanClient',
92
+ from_commit_zipped_documents: 'InMemoryZip',
93
+ to_commit_zipped_documents: 'InMemoryZip',
94
+ scan_type: str,
95
+ scan_parameters: dict,
96
+ timeout: Optional[int] = None,
97
+ ) -> ZippedFileScanResult:
98
+ from_upload_link = cycode_client.get_upload_link(scan_type)
99
+ logger.debug('Got from-commit upload link, %s', {'upload_id': from_upload_link.upload_id})
100
+
101
+ cycode_client.upload_to_presigned_post(
102
+ from_upload_link.url, from_upload_link.presigned_post_fields, from_commit_zipped_documents
103
+ )
104
+ logger.debug('Uploaded from-commit zip')
105
+
106
+ to_upload_link = cycode_client.get_upload_link(scan_type)
107
+ logger.debug('Got to-commit upload link, %s', {'upload_id': to_upload_link.upload_id})
108
+
109
+ cycode_client.upload_to_presigned_post(
110
+ to_upload_link.url, to_upload_link.presigned_post_fields, to_commit_zipped_documents
111
+ )
112
+ logger.debug('Uploaded to-commit zip')
113
+
114
+ scan_async_result = cycode_client.commit_range_scan_from_upload_ids(
115
+ scan_type, from_upload_link.upload_id, to_upload_link.upload_id, scan_parameters
116
+ )
117
+ logger.debug('V4 commit range scan request triggered, %s', {'scan_id': scan_async_result.scan_id})
118
+
119
+ return poll_scan_results(cycode_client, scan_async_result.scan_id, scan_type, scan_parameters, timeout)
120
+
121
+
89
122
  def _scan_commit_range_documents(
90
123
  ctx: typer.Context,
91
124
  from_documents_to_scan: list[Document],
@@ -118,14 +151,24 @@ def _scan_commit_range_documents(
118
151
  # for SAST it is files with diff between from_commit and to_commit
119
152
  to_commit_zipped_documents = zip_documents(scan_type, to_documents_to_scan)
120
153
 
121
- scan_result = _perform_commit_range_scan_async(
122
- cycode_client,
123
- from_commit_zipped_documents,
124
- to_commit_zipped_documents,
125
- scan_type,
126
- scan_parameters,
127
- timeout,
128
- )
154
+ if should_use_presigned_upload(scan_type):
155
+ scan_result = _perform_commit_range_scan_v4_async(
156
+ cycode_client,
157
+ from_commit_zipped_documents,
158
+ to_commit_zipped_documents,
159
+ scan_type,
160
+ scan_parameters,
161
+ timeout,
162
+ )
163
+ else:
164
+ scan_result = _perform_commit_range_scan_async(
165
+ cycode_client,
166
+ from_commit_zipped_documents,
167
+ to_commit_zipped_documents,
168
+ scan_type,
169
+ scan_parameters,
170
+ timeout,
171
+ )
129
172
  enrich_scan_result_with_data_from_detection_rules(cycode_client, scan_result)
130
173
 
131
174
  progress_bar.update(ScanProgressBarSection.SCAN)
@@ -192,15 +192,18 @@ EXCLUSIONS_BY_CVE_SECTION_NAME = 'cves'
192
192
  # 5MB in bytes (in decimal)
193
193
  FILE_MAX_SIZE_LIMIT_IN_BYTES = 5000000
194
194
 
195
+ PRESIGNED_LINK_UPLOADED_ZIP_MAX_SIZE_LIMIT_IN_BYTES = 5 * 1024 * 1024 * 1024 # 5 GB (S3 presigned POST limit)
196
+ PRESIGNED_UPLOAD_SCAN_TYPES = {SAST_SCAN_TYPE}
197
+
195
198
  DEFAULT_ZIP_MAX_SIZE_LIMIT_IN_BYTES = 20 * 1024 * 1024
196
199
  ZIP_MAX_SIZE_LIMIT_IN_BYTES = {
197
200
  SCA_SCAN_TYPE: 200 * 1024 * 1024,
198
- SAST_SCAN_TYPE: 50 * 1024 * 1024,
201
+ SAST_SCAN_TYPE: PRESIGNED_LINK_UPLOADED_ZIP_MAX_SIZE_LIMIT_IN_BYTES,
199
202
  }
200
203
 
201
204
  # scan in batches
202
205
  DEFAULT_SCAN_BATCH_MAX_SIZE_IN_BYTES = 9 * 1024 * 1024
203
- SCAN_BATCH_MAX_SIZE_IN_BYTES = {SAST_SCAN_TYPE: 50 * 1024 * 1024}
206
+ SCAN_BATCH_MAX_SIZE_IN_BYTES = {SAST_SCAN_TYPE: PRESIGNED_LINK_UPLOADED_ZIP_MAX_SIZE_LIMIT_IN_BYTES}
204
207
  SCAN_BATCH_MAX_SIZE_IN_BYTES_ENV_VAR_NAME = 'SCAN_BATCH_MAX_SIZE_IN_BYTES'
205
208
 
206
209
  DEFAULT_SCAN_BATCH_MAX_FILES_COUNT = 1000
@@ -17,7 +17,11 @@ def _validate_zip_file_size(scan_type: str, zip_file_size: int) -> None:
17
17
  raise custom_exceptions.ZipTooLargeError(max_size_limit)
18
18
 
19
19
 
20
- def zip_documents(scan_type: str, documents: list[Document], zip_file: Optional[InMemoryZip] = None) -> InMemoryZip:
20
+ def zip_documents(
21
+ scan_type: str,
22
+ documents: list[Document],
23
+ zip_file: Optional[InMemoryZip] = None,
24
+ ) -> InMemoryZip:
21
25
  if zip_file is None:
22
26
  zip_file = InMemoryZip()
23
27
 
@@ -111,9 +111,13 @@ def run_parallel_batched_scan(
111
111
  scan_type: str,
112
112
  documents: list[Document],
113
113
  progress_bar: 'BaseProgressBar',
114
+ skip_batching: bool = False,
114
115
  ) -> tuple[dict[str, 'CliError'], list['LocalScanResult']]:
115
116
  # batching is disabled for SCA; requested by Mor
116
- batches = [documents] if scan_type == consts.SCA_SCAN_TYPE else split_documents_into_batches(scan_type, documents)
117
+ if scan_type == consts.SCA_SCAN_TYPE or skip_batching:
118
+ batches = [documents]
119
+ else:
120
+ batches = split_documents_into_batches(scan_type, documents)
117
121
 
118
122
  progress_bar.set_section_length(ScanProgressBarSection.SCAN, len(batches)) # * 3
119
123
  # TODO(MarshalX): we should multiply the count of batches in SCAN section because each batch has 3 steps:
@@ -5,6 +5,7 @@ from uuid import UUID, uuid4
5
5
 
6
6
  import typer
7
7
 
8
+ from cycode.cli import consts
8
9
  from cycode.cli.cli_types import SeverityOption
9
10
 
10
11
  if TYPE_CHECKING:
@@ -31,6 +32,10 @@ def is_cycodeignore_allowed_by_scan_config(ctx: typer.Context) -> bool:
31
32
  return scan_config.is_cycode_ignore_allowed if scan_config else True
32
33
 
33
34
 
35
+ def should_use_presigned_upload(scan_type: str) -> bool:
36
+ return scan_type in consts.PRESIGNED_UPLOAD_SCAN_TYPES
37
+
38
+
34
39
  def generate_unique_scan_id() -> UUID:
35
40
  if 'PYTEST_TEST_UNIQUE_ID' in os.environ:
36
41
  return UUID(os.environ['PYTEST_TEST_UNIQUE_ID'])
@@ -114,6 +114,26 @@ class ScanResultSchema(Schema):
114
114
  return ScanResult(**data)
115
115
 
116
116
 
117
+ @dataclass
118
+ class UploadLinkResponse:
119
+ upload_id: str
120
+ url: str
121
+ presigned_post_fields: dict[str, str]
122
+
123
+
124
+ class UploadLinkResponseSchema(Schema):
125
+ class Meta:
126
+ unknown = EXCLUDE
127
+
128
+ upload_id = fields.String()
129
+ url = fields.String()
130
+ presigned_post_fields = fields.Dict(keys=fields.String(), values=fields.String())
131
+
132
+ @post_load
133
+ def build_dto(self, data: dict[str, Any], **_) -> 'UploadLinkResponse':
134
+ return UploadLinkResponse(**data)
135
+
136
+
117
137
  class ScanInitializationResponse(Schema):
118
138
  def __init__(self, scan_id: Optional[str] = None, err: Optional[str] = None) -> None:
119
139
  super().__init__()
@@ -3,6 +3,7 @@ from copy import deepcopy
3
3
  from typing import TYPE_CHECKING, Optional, Union
4
4
  from uuid import UUID
5
5
 
6
+ import requests
6
7
  from requests import Response
7
8
 
8
9
  from cycode.cli import consts
@@ -25,6 +26,7 @@ class ScanClient:
25
26
  self.scan_config = scan_config
26
27
 
27
28
  self._SCAN_SERVICE_CLI_CONTROLLER_PATH = 'api/v1/cli-scan'
29
+ self._SCAN_SERVICE_V4_CLI_CONTROLLER_PATH = 'api/v4/scans/cli'
28
30
  self._DETECTIONS_SERVICE_CLI_CONTROLLER_PATH = 'api/v1/detections/cli'
29
31
  self._POLICIES_SERVICE_CONTROLLER_PATH_V3 = 'api/v3/policies'
30
32
 
@@ -56,6 +58,10 @@ class ScanClient:
56
58
  )
57
59
  return models.ScanReportUrlResponseSchema().build_dto(response.json())
58
60
 
61
+ def get_scan_service_v4_url_path(self, scan_type: str) -> str:
62
+ service_path = self.scan_config.get_service_name(scan_type)
63
+ return f'{service_path}/{self._SCAN_SERVICE_V4_CLI_CONTROLLER_PATH}'
64
+
59
65
  def get_zipped_file_scan_async_url_path(self, scan_type: str, should_use_sync_flow: bool = False) -> str:
60
66
  async_scan_type = self.scan_config.get_async_scan_type(scan_type)
61
67
  async_entity_type = self.scan_config.get_async_entity_type(scan_type)
@@ -123,6 +129,40 @@ class ScanClient:
123
129
  )
124
130
  return models.ScanInitializationResponseSchema().load(response.json())
125
131
 
132
+ def get_upload_link(self, scan_type: str) -> models.UploadLinkResponse:
133
+ async_scan_type = self.scan_config.get_async_scan_type(scan_type)
134
+ url_path = f'{self.get_scan_service_v4_url_path(scan_type)}/{async_scan_type}/upload-link'
135
+ response = self.scan_cycode_client.get(url_path=url_path, hide_response_content_log=self._hide_response_log)
136
+ return models.UploadLinkResponseSchema().load(response.json())
137
+
138
+ def upload_to_presigned_post(self, url: str, fields: dict[str, str], zip_file: 'InMemoryZip') -> None:
139
+ multipart = {key: (None, value) for key, value in fields.items()}
140
+ multipart['file'] = (None, zip_file.read())
141
+ # We are not using Cycode client, as we are calling aws S3.
142
+ response = requests.post(url, files=multipart, timeout=self.scan_cycode_client.timeout)
143
+ response.raise_for_status()
144
+
145
+ def scan_repository_from_upload_id(
146
+ self,
147
+ scan_type: str,
148
+ upload_id: str,
149
+ scan_parameters: dict,
150
+ is_git_diff: bool = False,
151
+ is_commit_range: bool = False,
152
+ ) -> models.ScanInitializationResponse:
153
+ async_scan_type = self.scan_config.get_async_scan_type(scan_type)
154
+ url_path = f'{self.get_scan_service_v4_url_path(scan_type)}/{async_scan_type}/repository'
155
+ response = self.scan_cycode_client.post(
156
+ url_path=url_path,
157
+ body={
158
+ 'upload_id': upload_id,
159
+ 'is_git_diff': is_git_diff,
160
+ 'is_commit_range': is_commit_range,
161
+ 'scan_parameters': json.dumps(scan_parameters),
162
+ },
163
+ )
164
+ return models.ScanInitializationResponseSchema().load(response.json())
165
+
126
166
  def commit_range_scan_async(
127
167
  self,
128
168
  from_commit_zip_file: InMemoryZip,
@@ -161,6 +201,27 @@ class ScanClient:
161
201
  )
162
202
  return models.ScanInitializationResponseSchema().load(response.json())
163
203
 
204
+ def commit_range_scan_from_upload_ids(
205
+ self,
206
+ scan_type: str,
207
+ from_commit_upload_id: str,
208
+ to_commit_upload_id: str,
209
+ scan_parameters: dict,
210
+ is_git_diff: bool = False,
211
+ ) -> models.ScanInitializationResponse:
212
+ async_scan_type = self.scan_config.get_async_scan_type(scan_type)
213
+ url_path = f'{self.get_scan_service_v4_url_path(scan_type)}/{async_scan_type}/commit-range'
214
+ response = self.scan_cycode_client.post(
215
+ url_path=url_path,
216
+ body={
217
+ 'from_commit_upload_id': from_commit_upload_id,
218
+ 'to_commit_upload_id': to_commit_upload_id,
219
+ 'is_git_diff': is_git_diff,
220
+ 'scan_parameters': json.dumps(scan_parameters),
221
+ },
222
+ )
223
+ return models.ScanInitializationResponseSchema().load(response.json())
224
+
164
225
  def get_scan_details_path(self, scan_type: str, scan_id: str) -> str:
165
226
  return f'{self.get_scan_service_url_path(scan_type)}/{scan_id}'
166
227
 
@@ -21,7 +21,7 @@ classifiers = [
21
21
  "Programming Language :: Python :: 3.14",
22
22
  ]
23
23
  dynamic = ["dependencies"]
24
- version = "3.10.3.dev2"
24
+ version = "3.10.4.dev1"
25
25
 
26
26
  [project.scripts]
27
27
  cycode = "cycode.cli.app:app"
@@ -1 +0,0 @@
1
- __version__ = '3.10.3.dev2' # DON'T TOUCH. Placeholder. Will be filled automatically on poetry build from Git Tag
File without changes
File without changes