regscale-cli 6.21.2.0__py3-none-any.whl → 6.28.2.1__py3-none-any.whl

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 (314) hide show
  1. regscale/_version.py +1 -1
  2. regscale/airflow/hierarchy.py +2 -2
  3. regscale/core/app/api.py +5 -2
  4. regscale/core/app/application.py +36 -6
  5. regscale/core/app/internal/control_editor.py +73 -21
  6. regscale/core/app/internal/evidence.py +727 -204
  7. regscale/core/app/internal/login.py +4 -2
  8. regscale/core/app/internal/model_editor.py +219 -64
  9. regscale/core/app/utils/app_utils.py +86 -12
  10. regscale/core/app/utils/catalog_utils/common.py +1 -1
  11. regscale/core/login.py +21 -4
  12. regscale/core/utils/async_graphql_client.py +363 -0
  13. regscale/core/utils/date.py +77 -1
  14. regscale/dev/cli.py +26 -0
  15. regscale/dev/code_gen.py +109 -24
  16. regscale/dev/version.py +72 -0
  17. regscale/integrations/commercial/__init__.py +30 -2
  18. regscale/integrations/commercial/aws/audit_manager_compliance.py +3908 -0
  19. regscale/integrations/commercial/aws/cli.py +3107 -54
  20. regscale/integrations/commercial/aws/cloudtrail_control_mappings.py +333 -0
  21. regscale/integrations/commercial/aws/cloudtrail_evidence.py +501 -0
  22. regscale/integrations/commercial/aws/cloudwatch_control_mappings.py +357 -0
  23. regscale/integrations/commercial/aws/cloudwatch_evidence.py +490 -0
  24. regscale/integrations/commercial/{amazon → aws}/common.py +71 -19
  25. regscale/integrations/commercial/aws/config_compliance.py +914 -0
  26. regscale/integrations/commercial/aws/conformance_pack_mappings.py +198 -0
  27. regscale/integrations/commercial/aws/control_compliance_analyzer.py +439 -0
  28. regscale/integrations/commercial/aws/evidence_generator.py +283 -0
  29. regscale/integrations/commercial/aws/guardduty_control_mappings.py +340 -0
  30. regscale/integrations/commercial/aws/guardduty_evidence.py +1053 -0
  31. regscale/integrations/commercial/aws/iam_control_mappings.py +368 -0
  32. regscale/integrations/commercial/aws/iam_evidence.py +574 -0
  33. regscale/integrations/commercial/aws/inventory/__init__.py +338 -22
  34. regscale/integrations/commercial/aws/inventory/base.py +107 -5
  35. regscale/integrations/commercial/aws/inventory/resources/analytics.py +390 -0
  36. regscale/integrations/commercial/aws/inventory/resources/applications.py +234 -0
  37. regscale/integrations/commercial/aws/inventory/resources/audit_manager.py +513 -0
  38. regscale/integrations/commercial/aws/inventory/resources/cloudtrail.py +315 -0
  39. regscale/integrations/commercial/aws/inventory/resources/cloudtrail_logs_metadata.py +476 -0
  40. regscale/integrations/commercial/aws/inventory/resources/cloudwatch.py +191 -0
  41. regscale/integrations/commercial/aws/inventory/resources/compute.py +328 -9
  42. regscale/integrations/commercial/aws/inventory/resources/config.py +464 -0
  43. regscale/integrations/commercial/aws/inventory/resources/containers.py +74 -9
  44. regscale/integrations/commercial/aws/inventory/resources/database.py +481 -31
  45. regscale/integrations/commercial/aws/inventory/resources/developer_tools.py +253 -0
  46. regscale/integrations/commercial/aws/inventory/resources/guardduty.py +286 -0
  47. regscale/integrations/commercial/aws/inventory/resources/iam.py +470 -0
  48. regscale/integrations/commercial/aws/inventory/resources/inspector.py +476 -0
  49. regscale/integrations/commercial/aws/inventory/resources/integration.py +175 -61
  50. regscale/integrations/commercial/aws/inventory/resources/kms.py +447 -0
  51. regscale/integrations/commercial/aws/inventory/resources/machine_learning.py +358 -0
  52. regscale/integrations/commercial/aws/inventory/resources/networking.py +390 -67
  53. regscale/integrations/commercial/aws/inventory/resources/s3.py +394 -0
  54. regscale/integrations/commercial/aws/inventory/resources/security.py +268 -72
  55. regscale/integrations/commercial/aws/inventory/resources/securityhub.py +473 -0
  56. regscale/integrations/commercial/aws/inventory/resources/storage.py +288 -29
  57. regscale/integrations/commercial/aws/inventory/resources/systems_manager.py +657 -0
  58. regscale/integrations/commercial/aws/inventory/resources/vpc.py +655 -0
  59. regscale/integrations/commercial/aws/kms_control_mappings.py +288 -0
  60. regscale/integrations/commercial/aws/kms_evidence.py +879 -0
  61. regscale/integrations/commercial/aws/ocsf/__init__.py +7 -0
  62. regscale/integrations/commercial/aws/ocsf/constants.py +115 -0
  63. regscale/integrations/commercial/aws/ocsf/mapper.py +435 -0
  64. regscale/integrations/commercial/aws/org_control_mappings.py +286 -0
  65. regscale/integrations/commercial/aws/org_evidence.py +666 -0
  66. regscale/integrations/commercial/aws/s3_control_mappings.py +356 -0
  67. regscale/integrations/commercial/aws/s3_evidence.py +632 -0
  68. regscale/integrations/commercial/aws/scanner.py +1072 -205
  69. regscale/integrations/commercial/aws/security_hub.py +319 -0
  70. regscale/integrations/commercial/aws/session_manager.py +282 -0
  71. regscale/integrations/commercial/aws/ssm_control_mappings.py +291 -0
  72. regscale/integrations/commercial/aws/ssm_evidence.py +492 -0
  73. regscale/integrations/commercial/jira.py +489 -153
  74. regscale/integrations/commercial/microsoft_defender/defender.py +326 -5
  75. regscale/integrations/commercial/microsoft_defender/defender_api.py +348 -14
  76. regscale/integrations/commercial/microsoft_defender/defender_constants.py +157 -0
  77. regscale/integrations/commercial/qualys/__init__.py +167 -68
  78. regscale/integrations/commercial/qualys/scanner.py +305 -39
  79. regscale/integrations/commercial/sarif/sairf_importer.py +432 -0
  80. regscale/integrations/commercial/sarif/sarif_converter.py +67 -0
  81. regscale/integrations/commercial/sicura/api.py +79 -42
  82. regscale/integrations/commercial/sicura/commands.py +8 -2
  83. regscale/integrations/commercial/sicura/scanner.py +83 -44
  84. regscale/integrations/commercial/stigv2/ckl_parser.py +5 -5
  85. regscale/integrations/commercial/synqly/assets.py +133 -16
  86. regscale/integrations/commercial/synqly/edr.py +2 -8
  87. regscale/integrations/commercial/synqly/query_builder.py +536 -0
  88. regscale/integrations/commercial/synqly/ticketing.py +27 -0
  89. regscale/integrations/commercial/synqly/vulnerabilities.py +165 -28
  90. regscale/integrations/commercial/tenablev2/cis_parsers.py +453 -0
  91. regscale/integrations/commercial/tenablev2/cis_scanner.py +447 -0
  92. regscale/integrations/commercial/tenablev2/commands.py +146 -5
  93. regscale/integrations/commercial/tenablev2/scanner.py +1 -3
  94. regscale/integrations/commercial/tenablev2/stig_parsers.py +113 -57
  95. regscale/integrations/commercial/wizv2/WizDataMixin.py +1 -1
  96. regscale/integrations/commercial/wizv2/click.py +191 -76
  97. regscale/integrations/commercial/wizv2/compliance/__init__.py +15 -0
  98. regscale/integrations/commercial/wizv2/{policy_compliance_helpers.py → compliance/helpers.py} +78 -60
  99. regscale/integrations/commercial/wizv2/compliance_report.py +1592 -0
  100. regscale/integrations/commercial/wizv2/core/__init__.py +133 -0
  101. regscale/integrations/commercial/wizv2/{async_client.py → core/client.py} +7 -3
  102. regscale/integrations/commercial/wizv2/{constants.py → core/constants.py} +92 -89
  103. regscale/integrations/commercial/wizv2/core/file_operations.py +237 -0
  104. regscale/integrations/commercial/wizv2/fetchers/__init__.py +11 -0
  105. regscale/integrations/commercial/wizv2/{data_fetcher.py → fetchers/policy_assessment.py} +66 -9
  106. regscale/integrations/commercial/wizv2/file_cleanup.py +104 -0
  107. regscale/integrations/commercial/wizv2/issue.py +776 -28
  108. regscale/integrations/commercial/wizv2/models/__init__.py +0 -0
  109. regscale/integrations/commercial/wizv2/parsers/__init__.py +34 -0
  110. regscale/integrations/commercial/wizv2/{parsers.py → parsers/main.py} +1 -1
  111. regscale/integrations/commercial/wizv2/processors/__init__.py +11 -0
  112. regscale/integrations/commercial/wizv2/{finding_processor.py → processors/finding.py} +1 -1
  113. regscale/integrations/commercial/wizv2/reports.py +243 -0
  114. regscale/integrations/commercial/wizv2/sbom.py +1 -1
  115. regscale/integrations/commercial/wizv2/scanner.py +1031 -441
  116. regscale/integrations/commercial/wizv2/utils/__init__.py +48 -0
  117. regscale/integrations/commercial/wizv2/{utils.py → utils/main.py} +116 -61
  118. regscale/integrations/commercial/wizv2/variables.py +89 -3
  119. regscale/integrations/compliance_integration.py +1036 -151
  120. regscale/integrations/control_matcher.py +432 -0
  121. regscale/integrations/due_date_handler.py +333 -0
  122. regscale/integrations/milestone_manager.py +291 -0
  123. regscale/integrations/public/__init__.py +14 -0
  124. regscale/integrations/public/cci_importer.py +834 -0
  125. regscale/integrations/public/csam/__init__.py +0 -0
  126. regscale/integrations/public/csam/csam.py +938 -0
  127. regscale/integrations/public/csam/csam_agency_defined.py +179 -0
  128. regscale/integrations/public/csam/csam_common.py +154 -0
  129. regscale/integrations/public/csam/csam_controls.py +432 -0
  130. regscale/integrations/public/csam/csam_poam.py +124 -0
  131. regscale/integrations/public/fedramp/click.py +77 -6
  132. regscale/integrations/public/fedramp/docx_parser.py +10 -1
  133. regscale/integrations/public/fedramp/fedramp_cis_crm.py +675 -289
  134. regscale/integrations/public/fedramp/fedramp_five.py +1 -1
  135. regscale/integrations/public/fedramp/poam/scanner.py +75 -7
  136. regscale/integrations/public/fedramp/poam_export_v5.py +888 -0
  137. regscale/integrations/scanner_integration.py +1961 -430
  138. regscale/models/integration_models/CCI_List.xml +1 -0
  139. regscale/models/integration_models/aqua.py +2 -2
  140. regscale/models/integration_models/cisa_kev_data.json +805 -11
  141. regscale/models/integration_models/flat_file_importer/__init__.py +5 -8
  142. regscale/models/integration_models/nexpose.py +36 -10
  143. regscale/models/integration_models/qualys.py +3 -4
  144. regscale/models/integration_models/synqly_models/capabilities.json +1 -1
  145. regscale/models/integration_models/synqly_models/connectors/vulnerabilities.py +87 -18
  146. regscale/models/integration_models/synqly_models/filter_parser.py +332 -0
  147. regscale/models/integration_models/synqly_models/ocsf_mapper.py +124 -25
  148. regscale/models/integration_models/synqly_models/synqly_model.py +89 -16
  149. regscale/models/locking.py +12 -8
  150. regscale/models/platform.py +4 -2
  151. regscale/models/regscale_models/__init__.py +7 -0
  152. regscale/models/regscale_models/assessment.py +2 -1
  153. regscale/models/regscale_models/catalog.py +1 -1
  154. regscale/models/regscale_models/compliance_settings.py +251 -1
  155. regscale/models/regscale_models/component.py +1 -0
  156. regscale/models/regscale_models/control_implementation.py +236 -41
  157. regscale/models/regscale_models/control_objective.py +74 -5
  158. regscale/models/regscale_models/file.py +2 -0
  159. regscale/models/regscale_models/form_field_value.py +5 -3
  160. regscale/models/regscale_models/inheritance.py +44 -0
  161. regscale/models/regscale_models/issue.py +301 -102
  162. regscale/models/regscale_models/milestone.py +33 -14
  163. regscale/models/regscale_models/organization.py +3 -0
  164. regscale/models/regscale_models/regscale_model.py +310 -73
  165. regscale/models/regscale_models/security_plan.py +4 -2
  166. regscale/models/regscale_models/vulnerability.py +3 -3
  167. regscale/regscale.py +25 -4
  168. regscale/templates/__init__.py +0 -0
  169. regscale/utils/threading/threadhandler.py +20 -15
  170. regscale/validation/record.py +23 -1
  171. {regscale_cli-6.21.2.0.dist-info → regscale_cli-6.28.2.1.dist-info}/METADATA +17 -33
  172. {regscale_cli-6.21.2.0.dist-info → regscale_cli-6.28.2.1.dist-info}/RECORD +310 -111
  173. tests/core/__init__.py +0 -0
  174. tests/core/utils/__init__.py +0 -0
  175. tests/core/utils/test_async_graphql_client.py +472 -0
  176. tests/fixtures/test_fixture.py +13 -8
  177. tests/regscale/core/test_login.py +171 -4
  178. tests/regscale/integrations/commercial/__init__.py +0 -0
  179. tests/regscale/integrations/commercial/aws/__init__.py +0 -0
  180. tests/regscale/integrations/commercial/aws/test_audit_manager_compliance.py +1304 -0
  181. tests/regscale/integrations/commercial/aws/test_audit_manager_evidence_aggregation.py +341 -0
  182. tests/regscale/integrations/commercial/aws/test_aws_analytics_collector.py +260 -0
  183. tests/regscale/integrations/commercial/aws/test_aws_applications_collector.py +242 -0
  184. tests/regscale/integrations/commercial/aws/test_aws_audit_manager_collector.py +1155 -0
  185. tests/regscale/integrations/commercial/aws/test_aws_cloudtrail_collector.py +534 -0
  186. tests/regscale/integrations/commercial/aws/test_aws_config_collector.py +400 -0
  187. tests/regscale/integrations/commercial/aws/test_aws_developer_tools_collector.py +203 -0
  188. tests/regscale/integrations/commercial/aws/test_aws_guardduty_collector.py +315 -0
  189. tests/regscale/integrations/commercial/aws/test_aws_iam_collector.py +458 -0
  190. tests/regscale/integrations/commercial/aws/test_aws_inspector_collector.py +353 -0
  191. tests/regscale/integrations/commercial/aws/test_aws_inventory_integration.py +530 -0
  192. tests/regscale/integrations/commercial/aws/test_aws_kms_collector.py +919 -0
  193. tests/regscale/integrations/commercial/aws/test_aws_machine_learning_collector.py +237 -0
  194. tests/regscale/integrations/commercial/aws/test_aws_s3_collector.py +722 -0
  195. tests/regscale/integrations/commercial/aws/test_aws_scanner_integration.py +722 -0
  196. tests/regscale/integrations/commercial/aws/test_aws_securityhub_collector.py +792 -0
  197. tests/regscale/integrations/commercial/aws/test_aws_systems_manager_collector.py +918 -0
  198. tests/regscale/integrations/commercial/aws/test_aws_vpc_collector.py +996 -0
  199. tests/regscale/integrations/commercial/aws/test_cli_evidence.py +431 -0
  200. tests/regscale/integrations/commercial/aws/test_cloudtrail_control_mappings.py +452 -0
  201. tests/regscale/integrations/commercial/aws/test_cloudtrail_evidence.py +788 -0
  202. tests/regscale/integrations/commercial/aws/test_config_compliance.py +298 -0
  203. tests/regscale/integrations/commercial/aws/test_conformance_pack_mappings.py +200 -0
  204. tests/regscale/integrations/commercial/aws/test_control_compliance_analyzer.py +375 -0
  205. tests/regscale/integrations/commercial/aws/test_datetime_parsing.py +223 -0
  206. tests/regscale/integrations/commercial/aws/test_evidence_generator.py +386 -0
  207. tests/regscale/integrations/commercial/aws/test_guardduty_control_mappings.py +564 -0
  208. tests/regscale/integrations/commercial/aws/test_guardduty_evidence.py +1041 -0
  209. tests/regscale/integrations/commercial/aws/test_iam_control_mappings.py +718 -0
  210. tests/regscale/integrations/commercial/aws/test_iam_evidence.py +1375 -0
  211. tests/regscale/integrations/commercial/aws/test_kms_control_mappings.py +656 -0
  212. tests/regscale/integrations/commercial/aws/test_kms_evidence.py +1163 -0
  213. tests/regscale/integrations/commercial/aws/test_ocsf_mapper.py +370 -0
  214. tests/regscale/integrations/commercial/aws/test_org_control_mappings.py +546 -0
  215. tests/regscale/integrations/commercial/aws/test_org_evidence.py +1240 -0
  216. tests/regscale/integrations/commercial/aws/test_s3_control_mappings.py +672 -0
  217. tests/regscale/integrations/commercial/aws/test_s3_evidence.py +987 -0
  218. tests/regscale/integrations/commercial/aws/test_scanner_evidence.py +373 -0
  219. tests/regscale/integrations/commercial/aws/test_security_hub_config_filtering.py +539 -0
  220. tests/regscale/integrations/commercial/aws/test_session_manager.py +516 -0
  221. tests/regscale/integrations/commercial/aws/test_ssm_control_mappings.py +588 -0
  222. tests/regscale/integrations/commercial/aws/test_ssm_evidence.py +735 -0
  223. tests/regscale/integrations/commercial/conftest.py +28 -0
  224. tests/regscale/integrations/commercial/microsoft_defender/__init__.py +1 -0
  225. tests/regscale/integrations/commercial/microsoft_defender/test_defender.py +1517 -0
  226. tests/regscale/integrations/commercial/microsoft_defender/test_defender_api.py +1748 -0
  227. tests/regscale/integrations/commercial/microsoft_defender/test_defender_constants.py +327 -0
  228. tests/regscale/integrations/commercial/microsoft_defender/test_defender_scanner.py +487 -0
  229. tests/regscale/integrations/commercial/test_aws.py +3742 -0
  230. tests/regscale/integrations/commercial/test_burp.py +48 -0
  231. tests/regscale/integrations/commercial/test_crowdstrike.py +49 -0
  232. tests/regscale/integrations/commercial/test_dependabot.py +341 -0
  233. tests/regscale/integrations/commercial/test_gcp.py +1543 -0
  234. tests/regscale/integrations/commercial/test_gitlab.py +549 -0
  235. tests/regscale/integrations/commercial/test_ip_mac_address_length.py +84 -0
  236. tests/regscale/integrations/commercial/test_jira.py +2204 -0
  237. tests/regscale/integrations/commercial/test_npm_audit.py +42 -0
  238. tests/regscale/integrations/commercial/test_okta.py +1228 -0
  239. tests/regscale/integrations/commercial/test_sarif_converter.py +251 -0
  240. tests/regscale/integrations/commercial/test_sicura.py +349 -0
  241. tests/regscale/integrations/commercial/test_snow.py +423 -0
  242. tests/regscale/integrations/commercial/test_sonarcloud.py +394 -0
  243. tests/regscale/integrations/commercial/test_sqlserver.py +186 -0
  244. tests/regscale/integrations/commercial/test_stig.py +33 -0
  245. tests/regscale/integrations/commercial/test_stig_mapper.py +153 -0
  246. tests/regscale/integrations/commercial/test_stigv2.py +406 -0
  247. tests/regscale/integrations/commercial/test_wiz.py +1365 -0
  248. tests/regscale/integrations/commercial/test_wiz_inventory.py +256 -0
  249. tests/regscale/integrations/commercial/wizv2/__init__.py +339 -0
  250. tests/regscale/integrations/commercial/wizv2/compliance/__init__.py +1 -0
  251. tests/regscale/integrations/commercial/wizv2/compliance/test_helpers.py +903 -0
  252. tests/regscale/integrations/commercial/wizv2/core/__init__.py +1 -0
  253. tests/regscale/integrations/commercial/wizv2/core/test_auth.py +701 -0
  254. tests/regscale/integrations/commercial/wizv2/core/test_client.py +1037 -0
  255. tests/regscale/integrations/commercial/wizv2/core/test_file_operations.py +989 -0
  256. tests/regscale/integrations/commercial/wizv2/fetchers/__init__.py +1 -0
  257. tests/regscale/integrations/commercial/wizv2/fetchers/test_policy_assessment.py +805 -0
  258. tests/regscale/integrations/commercial/wizv2/parsers/__init__.py +1 -0
  259. tests/regscale/integrations/commercial/wizv2/parsers/test_main.py +1153 -0
  260. tests/regscale/integrations/commercial/wizv2/processors/__init__.py +1 -0
  261. tests/regscale/integrations/commercial/wizv2/processors/test_finding.py +671 -0
  262. tests/regscale/integrations/commercial/wizv2/test_WizDataMixin.py +537 -0
  263. tests/regscale/integrations/commercial/wizv2/test_click_comprehensive.py +851 -0
  264. tests/regscale/integrations/commercial/wizv2/test_compliance_report_comprehensive.py +910 -0
  265. tests/regscale/integrations/commercial/wizv2/test_compliance_report_normalization.py +138 -0
  266. tests/regscale/integrations/commercial/wizv2/test_file_cleanup.py +283 -0
  267. tests/regscale/integrations/commercial/wizv2/test_file_operations.py +260 -0
  268. tests/regscale/integrations/commercial/wizv2/test_issue.py +343 -0
  269. tests/regscale/integrations/commercial/wizv2/test_issue_comprehensive.py +1203 -0
  270. tests/regscale/integrations/commercial/wizv2/test_reports.py +497 -0
  271. tests/regscale/integrations/commercial/wizv2/test_sbom.py +643 -0
  272. tests/regscale/integrations/commercial/wizv2/test_scanner_comprehensive.py +805 -0
  273. tests/regscale/integrations/commercial/wizv2/test_wiz_click_client_id.py +165 -0
  274. tests/regscale/integrations/commercial/wizv2/test_wiz_compliance_report.py +1394 -0
  275. tests/regscale/integrations/commercial/wizv2/test_wiz_compliance_unit.py +341 -0
  276. tests/regscale/integrations/commercial/wizv2/test_wiz_control_normalization.py +138 -0
  277. tests/regscale/integrations/commercial/wizv2/test_wiz_findings_comprehensive.py +364 -0
  278. tests/regscale/integrations/commercial/wizv2/test_wiz_inventory_comprehensive.py +644 -0
  279. tests/regscale/integrations/commercial/wizv2/test_wiz_status_mapping.py +149 -0
  280. tests/regscale/integrations/commercial/wizv2/test_wizv2.py +1218 -0
  281. tests/regscale/integrations/commercial/wizv2/test_wizv2_utils.py +519 -0
  282. tests/regscale/integrations/commercial/wizv2/utils/__init__.py +1 -0
  283. tests/regscale/integrations/commercial/wizv2/utils/test_main.py +1523 -0
  284. tests/regscale/integrations/public/__init__.py +0 -0
  285. tests/regscale/integrations/public/fedramp/__init__.py +1 -0
  286. tests/regscale/integrations/public/fedramp/test_gen_asset_list.py +150 -0
  287. tests/regscale/integrations/public/fedramp/test_poam_export_v5.py +1293 -0
  288. tests/regscale/integrations/public/test_alienvault.py +220 -0
  289. tests/regscale/integrations/public/test_cci.py +1053 -0
  290. tests/regscale/integrations/public/test_cisa.py +1021 -0
  291. tests/regscale/integrations/public/test_emass.py +518 -0
  292. tests/regscale/integrations/public/test_fedramp.py +1152 -0
  293. tests/regscale/integrations/public/test_fedramp_cis_crm.py +3661 -0
  294. tests/regscale/integrations/public/test_file_uploads.py +506 -0
  295. tests/regscale/integrations/public/test_oscal.py +453 -0
  296. tests/regscale/integrations/test_compliance_status_mapping.py +406 -0
  297. tests/regscale/integrations/test_control_matcher.py +1421 -0
  298. tests/regscale/integrations/test_control_matching.py +155 -0
  299. tests/regscale/integrations/test_milestone_manager.py +408 -0
  300. tests/regscale/models/test_control_implementation.py +118 -3
  301. tests/regscale/models/test_form_field_value_integration.py +304 -0
  302. tests/regscale/models/test_issue.py +378 -1
  303. tests/regscale/models/test_module_integration.py +582 -0
  304. tests/regscale/models/test_tenable_integrations.py +811 -105
  305. regscale/integrations/commercial/wizv2/policy_compliance.py +0 -3057
  306. regscale/integrations/public/fedramp/mappings/fedramp_r4_parts.json +0 -7388
  307. regscale/integrations/public/fedramp/mappings/fedramp_r5_parts.json +0 -9605
  308. regscale/integrations/public/fedramp/parts_mapper.py +0 -107
  309. /regscale/integrations/commercial/{amazon → sarif}/__init__.py +0 -0
  310. /regscale/integrations/commercial/wizv2/{wiz_auth.py → core/auth.py} +0 -0
  311. {regscale_cli-6.21.2.0.dist-info → regscale_cli-6.28.2.1.dist-info}/LICENSE +0 -0
  312. {regscale_cli-6.21.2.0.dist-info → regscale_cli-6.28.2.1.dist-info}/WHEEL +0 -0
  313. {regscale_cli-6.21.2.0.dist-info → regscale_cli-6.28.2.1.dist-info}/entry_points.txt +0 -0
  314. {regscale_cli-6.21.2.0.dist-info → regscale_cli-6.28.2.1.dist-info}/top_level.txt +0 -0
regscale/regscale.py CHANGED
@@ -135,12 +135,18 @@ set_permissions = import_command_with_timing(INTERNAL, "set_permissions")
135
135
  PUBLIC = "regscale.integrations.public"
136
136
  alienvault = import_command_with_timing(PUBLIC, "alienvault")
137
137
  cisa = import_command_with_timing(PUBLIC, "cisa")
138
+ csam = import_command_with_timing(PUBLIC, "csam")
138
139
  emass = import_command_with_timing(PUBLIC, "emass")
139
140
  fedramp = import_command_with_timing(PUBLIC, "fedramp")
140
141
  nist = import_command_with_timing(PUBLIC, "nist")
141
142
  oscal = import_command_with_timing(PUBLIC, "oscal")
142
143
  criticality_updater = import_command_with_timing(PUBLIC, "criticality_updater")
143
144
 
145
+ ############################################################
146
+ # Utils
147
+ ############################################################
148
+ cci_importer = import_command_with_timing("regscale.integrations.public.cci_importer", "cci_importer")
149
+
144
150
  ############################################################
145
151
  # Commercial Integrations
146
152
  ############################################################
@@ -171,6 +177,7 @@ okta = import_command_with_timing(COMMERCIAL, "okta")
171
177
  prisma = import_command_with_timing(COMMERCIAL, "prisma")
172
178
  qualys = import_command_with_timing(COMMERCIAL, "qualys")
173
179
  salesforce = import_command_with_timing(COMMERCIAL, "salesforce")
180
+ sarif = import_command_with_timing(COMMERCIAL, "sarif")
174
181
  sap = import_command_with_timing("regscale.integrations.commercial.sap.click", "sap")
175
182
  sysdig = import_command_with_timing("regscale.integrations.commercial.sap.sysdig.click", "sysdig")
176
183
  servicenow = import_command_with_timing(COMMERCIAL, "servicenow")
@@ -286,7 +293,7 @@ def banner():
286
293
  \t[#05d1b7].clicli, [#15cfec].;loooool'
287
294
  \t[#05d1b7].clicli, [#18a8e9].:oolloc.
288
295
  \t[#05d1b7].clicli, [#ef7f2e].,cli,. [#18a8e9].clllll,
289
- \t[#05d1b7].clicli. [#ef7f2e].,oxxxxd; [#158fd0].:lllll;
296
+ \t[#05d1b7].clicli. [#ef7f2e].,oxxxxd; [#18a8e9].:lllll;
290
297
  \t[#05d1b7] ..cli. [#f68d1f]';cdxxxxxo, [#18a8e9].cllllc,
291
298
  \t [#f68d1f].:odddddddc. [#1b97d5] .;ccccc:.
292
299
  \t[#ffc42a] ..'. [#f68d1f].;ldddddddl' [#0c8cd7].':ccccc:.
@@ -470,12 +477,21 @@ def validate_token():
470
477
  cls=NotRequiredIf,
471
478
  not_required_if=["token"],
472
479
  )
480
+ @click.option(
481
+ "--app_id",
482
+ type=click.INT,
483
+ help="RegScale App ID to login with.",
484
+ default=1,
485
+ prompt=False,
486
+ required=False,
487
+ )
473
488
  def login(
474
489
  username: Optional[str],
475
490
  password: Optional[str],
476
491
  token: Optional[str] = None,
477
492
  domain: Optional[str] = None,
478
493
  mfa_token: Optional[str] = None,
494
+ app_id: Optional[int] = 1,
479
495
  ):
480
496
  """Logs the user into their RegScale instance."""
481
497
  from regscale.core.app.application import Application
@@ -495,9 +511,10 @@ def login(
495
511
  mfa_token=mfa_token,
496
512
  app=app,
497
513
  host=domain,
514
+ app_id=app_id,
498
515
  )
499
516
  else:
500
- lg.login(str_user=username, str_password=password, app=app, host=domain)
517
+ lg.login(str_user=username, str_password=password, app=app, host=domain, app_id=app_id)
501
518
 
502
519
 
503
520
  # Check the health of the RegScale Application
@@ -755,8 +772,8 @@ cli.add_command(catalog) # add Catalog Management Feature
755
772
  cli.add_command(compare) # add Comparison support
756
773
  cli.add_command(control_editor) # add Control Editor Feature
757
774
  cli.add_command(evidence) # add Evidence Feature
758
- cli.add_command(migrations) # add data migration support
759
775
  cli.add_command(issues) # add POAM(Issues) Editor Feature
776
+ cli.add_command(migrations) # add data migration support
760
777
  cli.add_command(model) # add POAM(Issues) Editor Feature
761
778
  cli.add_command(set_permissions) # add builk editor for record permissions
762
779
 
@@ -790,15 +807,16 @@ cli.add_command(prisma) # add Prisma support
790
807
  cli.add_command(qualys) # add Qualys Functionality
791
808
  cli.add_command(salesforce) # add Salesforce support
792
809
  cli.add_command(sap) # add SAP Concur support
810
+ cli.add_command(sarif) # add SARIF Converter support
793
811
  cli.add_command(servicenow) # add ServiceNow support
794
812
  cli.add_command(sicura) # add Sicura Integration
795
813
  cli.add_command(snyk) # add Snyk support
796
- cli.add_command(veracode) # add Veracode Integration
797
814
  cli.add_command(sonarcloud) # add SonarCloud Integration
798
815
  cli.add_command(stig) # add STIGv2 support
799
816
  cli.add_command(stig_mapper) # add STIG Mapper support
800
817
  cli.add_command(tenable) # add Tenable & TenableV2 support
801
818
  cli.add_command(trivy) # add Trivy support
819
+ cli.add_command(veracode) # add Veracode Integration
802
820
  cli.add_command(wiz) # add Wiz support
803
821
  cli.add_command(xray) # add JFrog Xray support
804
822
 
@@ -807,11 +825,14 @@ cli.add_command(xray) # add JFrog Xray support
807
825
  ############################################################
808
826
  cli.add_command(alienvault) # add Alienvault OTX integration
809
827
  cli.add_command(cisa) # add CISA support
828
+ cli.add_command(criticality_updater) # add Criticality Updater support
829
+ cli.add_command(csam) # add CSAM support
810
830
  cli.add_command(emass) # add eMASS support
811
831
  cli.add_command(fedramp) # add FedRAMP support
812
832
  cli.add_command(nist) # add Nist_Catalog support
813
833
  cli.add_command(oscal) # add OSCAL support
814
834
  cli.add_command(criticality_updater) # add Criticality Updater support
835
+ cli.add_command(cci_importer) # add CCI Importer support
815
836
 
816
837
  # start function for the CLI
817
838
  if __name__ == "__main__":
File without changes
@@ -3,7 +3,7 @@
3
3
  """Thread handler to create and start threads"""
4
4
 
5
5
  from concurrent.futures import ThreadPoolExecutor, TimeoutError, as_completed
6
- from typing import Any, Callable, List, Tuple, Union
6
+ from typing import Any, Callable, List, Optional, Tuple, Union
7
7
 
8
8
 
9
9
  class ThreadManager:
@@ -98,16 +98,7 @@ def create_threads(process: Callable, args: Tuple, thread_count: int) -> None:
98
98
  :param int thread_count: # of threads needed
99
99
  :rtype: None
100
100
  """
101
- # set max threads
102
- from regscale.core.app.application import Application
103
-
104
- app = Application()
105
- max_threads = app.config.get("maxThreads", 100)
106
- if not isinstance(max_threads, int):
107
- try:
108
- max_threads = int(max_threads)
109
- except (ValueError, TypeError):
110
- max_threads = 100
101
+ max_threads = _determine_max_threads()
111
102
  if threads := min(thread_count, max_threads):
112
103
  # start the threads with the number of threads allowed
113
104
  with ThreadPoolExecutor(max_workers=threads) as executor:
@@ -127,15 +118,29 @@ def thread_assignment(thread: int, total_items: int) -> list:
127
118
  :return: List of items to process for the given thread
128
119
  :rtype: list
129
120
  """
121
+ max_threads = _determine_max_threads()
122
+
123
+ return [x for x in range(total_items) if x % max_threads == thread]
124
+
125
+
126
+ def _determine_max_threads(default: Optional[int] = 100) -> int:
127
+ """
128
+ Function to determine the max threads to use by checking the Application config
129
+
130
+ :param Optional[int] default: The default max threads to use if the Application config is not set, defaults to 100
131
+ :return: The max threads to use
132
+ :rtype: int
133
+ """
130
134
  from regscale.core.app.application import Application
131
135
 
132
136
  app = Application()
137
+ if app.running_in_airflow:
138
+ default = 20
133
139
  # set max threads
134
- max_threads = app.config.get("maxThreads", 100)
140
+ max_threads = app.config.get("maxThreads", default)
135
141
  if not isinstance(max_threads, int):
136
142
  try:
137
143
  max_threads = int(max_threads)
138
144
  except (ValueError, TypeError):
139
- max_threads = 100
140
-
141
- return [x for x in range(total_items) if x % max_threads == thread]
145
+ max_threads = default
146
+ return max_threads
@@ -3,9 +3,11 @@
3
3
  """Rich Logging"""
4
4
 
5
5
 
6
+ # standard python imports
7
+ from typing import Optional
8
+
6
9
  from regscale.core.app.api import Api
7
10
 
8
- # standard python imports
9
11
  from regscale.core.utils.graphql import GraphQLQuery
10
12
  from regscale.models.regscale_models.modules import Modules
11
13
 
@@ -46,3 +48,23 @@ def validate_regscale_object(parent_id: int, parent_module: str) -> bool:
46
48
  if mod_lookup.lower() in [k.lower() for k in dat.keys()] and dat[list(dat.keys())[0]]["totalCount"] > 0:
47
49
  result = True
48
50
  return result
51
+
52
+
53
+ def validate_component_or_ssp(ssp_id: Optional[int], component_id: Optional[int]) -> None:
54
+ """
55
+ Validate that either an SSP or component exists in RegScale.
56
+
57
+ :param Optional[int] ssp_id: The RegScale SSP ID
58
+ :param Optional[int] component_id: The RegScale component ID
59
+ :rtype: None
60
+ """
61
+ from regscale.core.app.utils.app_utils import error_and_exit
62
+
63
+ if not ssp_id and not component_id:
64
+ error_and_exit("Please provide a RegScale SSP ID or component ID.")
65
+ if ssp_id and component_id:
66
+ error_and_exit("Please provide either a RegScale SSP ID or component ID, but not both.")
67
+ record_id = ssp_id or component_id
68
+ record_module = "securityplans" if ssp_id else "components"
69
+ if not validate_regscale_object(record_id, record_module):
70
+ error_and_exit(f"RegScale {record_module} ID #{record_id} does not exist.")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: regscale-cli
3
- Version: 6.21.2.0
3
+ Version: 6.28.2.1
4
4
  Summary: Command Line Interface (CLI) for bulk processing/loading data into RegScale
5
5
  Home-page: https://github.com/RegScale/regscale-cli
6
6
  Author: Travis Howerton
@@ -30,13 +30,12 @@ Requires-Dist: distro ==1.8.0
30
30
  Requires-Dist: docx ==0.2.4
31
31
  Requires-Dist: filelock ~=3.13.1
32
32
  Requires-Dist: frontend
33
- Requires-Dist: future ~=0.18.3
34
33
  Requires-Dist: google-api-python-client
35
34
  Requires-Dist: google-cloud-asset ~=3.22
36
35
  Requires-Dist: google-cloud-securitycenter ~=1.25
37
36
  Requires-Dist: gql ~=3.5.0
38
37
  Requires-Dist: inflect
39
- Requires-Dist: jira ==3.8.0
38
+ Requires-Dist: jira >=3.8.0
40
39
  Requires-Dist: jwcrypto >=1.5.1
41
40
  Requires-Dist: lxml ==5.3.0
42
41
  Requires-Dist: markdown
@@ -59,7 +58,6 @@ Requires-Dist: pytest
59
58
  Requires-Dist: python-dateutil ~=2.9.0
60
59
  Requires-Dist: python-docx
61
60
  Requires-Dist: python-jwt ==4.1.0
62
- Requires-Dist: pyxnat ==1.5.*
63
61
  Requires-Dist: rapidfuzz ~=3.7
64
62
  Requires-Dist: regscale-python-ssp
65
63
  Requires-Dist: requests >=2.32.0
@@ -68,7 +66,7 @@ Requires-Dist: setuptools
68
66
  Requires-Dist: simple-salesforce
69
67
  Requires-Dist: smart-open ~=7.0
70
68
  Requires-Dist: static
71
- Requires-Dist: synqly
69
+ Requires-Dist: synqly ==0.4.56
72
70
  Requires-Dist: tools
73
71
  Requires-Dist: typing-extensions ~=4.12.2
74
72
  Requires-Dist: wheel
@@ -96,7 +94,6 @@ Requires-Dist: filelock ~=3.13.1 ; extra == 'airflow'
96
94
  Requires-Dist: flask-appbuilder >=4.0.0 ; extra == 'airflow'
97
95
  Requires-Dist: flask >=2.3.2 ; extra == 'airflow'
98
96
  Requires-Dist: frontend ; extra == 'airflow'
99
- Requires-Dist: future ~=0.18.3 ; extra == 'airflow'
100
97
  Requires-Dist: google-api-python-client ; extra == 'airflow'
101
98
  Requires-Dist: google-cloud-asset ~=3.22 ; extra == 'airflow'
102
99
  Requires-Dist: google-cloud-securitycenter ~=1.25 ; extra == 'airflow'
@@ -105,7 +102,7 @@ Requires-Dist: greenlet >=3.0.3 ; extra == 'airflow'
105
102
  Requires-Dist: importlib-metadata >=6.5 ; extra == 'airflow'
106
103
  Requires-Dist: inflect ; extra == 'airflow'
107
104
  Requires-Dist: jinja2 >=3.1.5 ; extra == 'airflow'
108
- Requires-Dist: jira ==3.8.0 ; extra == 'airflow'
105
+ Requires-Dist: jira >=3.8.0 ; extra == 'airflow'
109
106
  Requires-Dist: jmespath ==1.0.0 ; extra == 'airflow'
110
107
  Requires-Dist: jwcrypto >=1.5.1 ; extra == 'airflow'
111
108
  Requires-Dist: lxml ==5.3.0 ; extra == 'airflow'
@@ -140,7 +137,6 @@ Requires-Dist: pytest ; extra == 'airflow'
140
137
  Requires-Dist: python-dateutil ~=2.9.0 ; extra == 'airflow'
141
138
  Requires-Dist: python-docx ; extra == 'airflow'
142
139
  Requires-Dist: python-jwt ==4.1.0 ; extra == 'airflow'
143
- Requires-Dist: pyxnat ==1.5.* ; extra == 'airflow'
144
140
  Requires-Dist: rapidfuzz ~=3.7 ; extra == 'airflow'
145
141
  Requires-Dist: regscale-python-ssp ; extra == 'airflow'
146
142
  Requires-Dist: requests >=2.32.0 ; extra == 'airflow'
@@ -150,7 +146,7 @@ Requires-Dist: setuptools >=69.0.0 ; extra == 'airflow'
150
146
  Requires-Dist: simple-salesforce ; extra == 'airflow'
151
147
  Requires-Dist: smart-open ~=7.0 ; extra == 'airflow'
152
148
  Requires-Dist: static ; extra == 'airflow'
153
- Requires-Dist: synqly ; extra == 'airflow'
149
+ Requires-Dist: synqly ==0.4.56 ; extra == 'airflow'
154
150
  Requires-Dist: tools ; extra == 'airflow'
155
151
  Requires-Dist: typing-extensions ~=4.12.2 ; extra == 'airflow'
156
152
  Requires-Dist: wheel ; extra == 'airflow'
@@ -180,7 +176,6 @@ Requires-Dist: filelock ~=3.13.1 ; extra == 'airflow-azure'
180
176
  Requires-Dist: flask-appbuilder >=4.0.0 ; extra == 'airflow-azure'
181
177
  Requires-Dist: flask >=2.3.2 ; extra == 'airflow-azure'
182
178
  Requires-Dist: frontend ; extra == 'airflow-azure'
183
- Requires-Dist: future ~=0.18.3 ; extra == 'airflow-azure'
184
179
  Requires-Dist: google-api-python-client ; extra == 'airflow-azure'
185
180
  Requires-Dist: google-cloud-asset ~=3.22 ; extra == 'airflow-azure'
186
181
  Requires-Dist: google-cloud-securitycenter ~=1.25 ; extra == 'airflow-azure'
@@ -189,7 +184,7 @@ Requires-Dist: greenlet >=3.0.3 ; extra == 'airflow-azure'
189
184
  Requires-Dist: importlib-metadata >=6.5 ; extra == 'airflow-azure'
190
185
  Requires-Dist: inflect ; extra == 'airflow-azure'
191
186
  Requires-Dist: jinja2 >=3.1.5 ; extra == 'airflow-azure'
192
- Requires-Dist: jira ==3.8.0 ; extra == 'airflow-azure'
187
+ Requires-Dist: jira >=3.8.0 ; extra == 'airflow-azure'
193
188
  Requires-Dist: jmespath ==1.0.0 ; extra == 'airflow-azure'
194
189
  Requires-Dist: jwcrypto >=1.5.1 ; extra == 'airflow-azure'
195
190
  Requires-Dist: lxml ==5.3.0 ; extra == 'airflow-azure'
@@ -225,7 +220,6 @@ Requires-Dist: pytest ; extra == 'airflow-azure'
225
220
  Requires-Dist: python-dateutil ~=2.9.0 ; extra == 'airflow-azure'
226
221
  Requires-Dist: python-docx ; extra == 'airflow-azure'
227
222
  Requires-Dist: python-jwt ==4.1.0 ; extra == 'airflow-azure'
228
- Requires-Dist: pyxnat ==1.5.* ; extra == 'airflow-azure'
229
223
  Requires-Dist: rapidfuzz ~=3.7 ; extra == 'airflow-azure'
230
224
  Requires-Dist: regscale-python-ssp ; extra == 'airflow-azure'
231
225
  Requires-Dist: requests >=2.32.0 ; extra == 'airflow-azure'
@@ -235,7 +229,7 @@ Requires-Dist: setuptools >=69.0.0 ; extra == 'airflow-azure'
235
229
  Requires-Dist: simple-salesforce ; extra == 'airflow-azure'
236
230
  Requires-Dist: smart-open ~=7.0 ; extra == 'airflow-azure'
237
231
  Requires-Dist: static ; extra == 'airflow-azure'
238
- Requires-Dist: synqly ; extra == 'airflow-azure'
232
+ Requires-Dist: synqly ==0.4.56 ; extra == 'airflow-azure'
239
233
  Requires-Dist: tools ; extra == 'airflow-azure'
240
234
  Requires-Dist: typing-extensions ~=4.12.2 ; extra == 'airflow-azure'
241
235
  Requires-Dist: wheel ; extra == 'airflow-azure'
@@ -264,7 +258,6 @@ Requires-Dist: filelock ~=3.13.1 ; extra == 'airflow-sqlserver'
264
258
  Requires-Dist: flask-appbuilder >=4.0.0 ; extra == 'airflow-sqlserver'
265
259
  Requires-Dist: flask >=2.3.2 ; extra == 'airflow-sqlserver'
266
260
  Requires-Dist: frontend ; extra == 'airflow-sqlserver'
267
- Requires-Dist: future ~=0.18.3 ; extra == 'airflow-sqlserver'
268
261
  Requires-Dist: google-api-python-client ; extra == 'airflow-sqlserver'
269
262
  Requires-Dist: google-cloud-asset ~=3.22 ; extra == 'airflow-sqlserver'
270
263
  Requires-Dist: google-cloud-securitycenter ~=1.25 ; extra == 'airflow-sqlserver'
@@ -273,7 +266,7 @@ Requires-Dist: greenlet >=3.0.3 ; extra == 'airflow-sqlserver'
273
266
  Requires-Dist: importlib-metadata >=6.5 ; extra == 'airflow-sqlserver'
274
267
  Requires-Dist: inflect ; extra == 'airflow-sqlserver'
275
268
  Requires-Dist: jinja2 >=3.1.5 ; extra == 'airflow-sqlserver'
276
- Requires-Dist: jira ==3.8.0 ; extra == 'airflow-sqlserver'
269
+ Requires-Dist: jira >=3.8.0 ; extra == 'airflow-sqlserver'
277
270
  Requires-Dist: jmespath ==1.0.0 ; extra == 'airflow-sqlserver'
278
271
  Requires-Dist: jwcrypto >=1.5.1 ; extra == 'airflow-sqlserver'
279
272
  Requires-Dist: lxml ==5.3.0 ; extra == 'airflow-sqlserver'
@@ -310,7 +303,6 @@ Requires-Dist: pytest ; extra == 'airflow-sqlserver'
310
303
  Requires-Dist: python-dateutil ~=2.9.0 ; extra == 'airflow-sqlserver'
311
304
  Requires-Dist: python-docx ; extra == 'airflow-sqlserver'
312
305
  Requires-Dist: python-jwt ==4.1.0 ; extra == 'airflow-sqlserver'
313
- Requires-Dist: pyxnat ==1.5.* ; extra == 'airflow-sqlserver'
314
306
  Requires-Dist: rapidfuzz ~=3.7 ; extra == 'airflow-sqlserver'
315
307
  Requires-Dist: regscale-python-ssp ; extra == 'airflow-sqlserver'
316
308
  Requires-Dist: requests >=2.32.0 ; extra == 'airflow-sqlserver'
@@ -320,7 +312,7 @@ Requires-Dist: setuptools >=69.0.0 ; extra == 'airflow-sqlserver'
320
312
  Requires-Dist: simple-salesforce ; extra == 'airflow-sqlserver'
321
313
  Requires-Dist: smart-open ~=7.0 ; extra == 'airflow-sqlserver'
322
314
  Requires-Dist: static ; extra == 'airflow-sqlserver'
323
- Requires-Dist: synqly ; extra == 'airflow-sqlserver'
315
+ Requires-Dist: synqly ==0.4.56 ; extra == 'airflow-sqlserver'
324
316
  Requires-Dist: tools ; extra == 'airflow-sqlserver'
325
317
  Requires-Dist: typing-extensions ~=4.12.2 ; extra == 'airflow-sqlserver'
326
318
  Requires-Dist: wheel ; extra == 'airflow-sqlserver'
@@ -354,7 +346,6 @@ Requires-Dist: flask-rebar ; extra == 'all'
354
346
  Requires-Dist: flask-restx ; extra == 'all'
355
347
  Requires-Dist: flask >=2.3.2 ; extra == 'all'
356
348
  Requires-Dist: frontend ; extra == 'all'
357
- Requires-Dist: future ~=0.18.3 ; extra == 'all'
358
349
  Requires-Dist: google-api-python-client ; extra == 'all'
359
350
  Requires-Dist: google-cloud-asset ~=3.22 ; extra == 'all'
360
351
  Requires-Dist: google-cloud-securitycenter ~=1.25 ; extra == 'all'
@@ -365,7 +356,7 @@ Requires-Dist: importlib-resources ; extra == 'all'
365
356
  Requires-Dist: inflect ; extra == 'all'
366
357
  Requires-Dist: jinja2 ; extra == 'all'
367
358
  Requires-Dist: jinja2 >=3.1.5 ; extra == 'all'
368
- Requires-Dist: jira ==3.8.0 ; extra == 'all'
359
+ Requires-Dist: jira >=3.8.0 ; extra == 'all'
369
360
  Requires-Dist: jmespath ==1.0.0 ; extra == 'all'
370
361
  Requires-Dist: jwcrypto >=1.5.1 ; extra == 'all'
371
362
  Requires-Dist: lxml ==5.3.0 ; extra == 'all'
@@ -400,7 +391,6 @@ Requires-Dist: pytest ; extra == 'all'
400
391
  Requires-Dist: python-dateutil ~=2.9.0 ; extra == 'all'
401
392
  Requires-Dist: python-docx ; extra == 'all'
402
393
  Requires-Dist: python-jwt ==4.1.0 ; extra == 'all'
403
- Requires-Dist: pyxnat ==1.5.* ; extra == 'all'
404
394
  Requires-Dist: rapidfuzz ~=3.7 ; extra == 'all'
405
395
  Requires-Dist: regscale-python-ssp ; extra == 'all'
406
396
  Requires-Dist: requests >=2.32.0 ; extra == 'all'
@@ -410,7 +400,7 @@ Requires-Dist: setuptools >=69.0.0 ; extra == 'all'
410
400
  Requires-Dist: simple-salesforce ; extra == 'all'
411
401
  Requires-Dist: smart-open ~=7.0 ; extra == 'all'
412
402
  Requires-Dist: static ; extra == 'all'
413
- Requires-Dist: synqly ; extra == 'all'
403
+ Requires-Dist: synqly ==0.4.56 ; extra == 'all'
414
404
  Requires-Dist: tools ; extra == 'all'
415
405
  Requires-Dist: typing-extensions ~=4.12.2 ; extra == 'all'
416
406
  Requires-Dist: werkzeug >=2.3.8 ; extra == 'all'
@@ -433,14 +423,13 @@ Requires-Dist: distro ==1.8.0 ; extra == 'ansible'
433
423
  Requires-Dist: docx ==0.2.4 ; extra == 'ansible'
434
424
  Requires-Dist: filelock ~=3.13.1 ; extra == 'ansible'
435
425
  Requires-Dist: frontend ; extra == 'ansible'
436
- Requires-Dist: future ~=0.18.3 ; extra == 'ansible'
437
426
  Requires-Dist: google-api-python-client ; extra == 'ansible'
438
427
  Requires-Dist: google-cloud-asset ~=3.22 ; extra == 'ansible'
439
428
  Requires-Dist: google-cloud-securitycenter ~=1.25 ; extra == 'ansible'
440
429
  Requires-Dist: gql ~=3.5.0 ; extra == 'ansible'
441
430
  Requires-Dist: inflect ; extra == 'ansible'
442
431
  Requires-Dist: jinja2 ; extra == 'ansible'
443
- Requires-Dist: jira ==3.8.0 ; extra == 'ansible'
432
+ Requires-Dist: jira >=3.8.0 ; extra == 'ansible'
444
433
  Requires-Dist: jwcrypto >=1.5.1 ; extra == 'ansible'
445
434
  Requires-Dist: lxml ==5.3.0 ; extra == 'ansible'
446
435
  Requires-Dist: markdown ; extra == 'ansible'
@@ -463,7 +452,6 @@ Requires-Dist: pytest ; extra == 'ansible'
463
452
  Requires-Dist: python-dateutil ~=2.9.0 ; extra == 'ansible'
464
453
  Requires-Dist: python-docx ; extra == 'ansible'
465
454
  Requires-Dist: python-jwt ==4.1.0 ; extra == 'ansible'
466
- Requires-Dist: pyxnat ==1.5.* ; extra == 'ansible'
467
455
  Requires-Dist: rapidfuzz ~=3.7 ; extra == 'ansible'
468
456
  Requires-Dist: regscale-python-ssp ; extra == 'ansible'
469
457
  Requires-Dist: requests >=2.32.0 ; extra == 'ansible'
@@ -472,7 +460,7 @@ Requires-Dist: setuptools ; extra == 'ansible'
472
460
  Requires-Dist: simple-salesforce ; extra == 'ansible'
473
461
  Requires-Dist: smart-open ~=7.0 ; extra == 'ansible'
474
462
  Requires-Dist: static ; extra == 'ansible'
475
- Requires-Dist: synqly ; extra == 'ansible'
463
+ Requires-Dist: synqly ==0.4.56 ; extra == 'ansible'
476
464
  Requires-Dist: tools ; extra == 'ansible'
477
465
  Requires-Dist: typing-extensions ~=4.12.2 ; extra == 'ansible'
478
466
  Requires-Dist: wheel ; extra == 'ansible'
@@ -499,14 +487,13 @@ Requires-Dist: filelock ~=3.13.1 ; extra == 'dev'
499
487
  Requires-Dist: flake8 ; extra == 'dev'
500
488
  Requires-Dist: freezegun ; extra == 'dev'
501
489
  Requires-Dist: frontend ; extra == 'dev'
502
- Requires-Dist: future ~=0.18.3 ; extra == 'dev'
503
490
  Requires-Dist: google-api-python-client ; extra == 'dev'
504
491
  Requires-Dist: google-cloud-asset ~=3.22 ; extra == 'dev'
505
492
  Requires-Dist: google-cloud-securitycenter ~=1.25 ; extra == 'dev'
506
493
  Requires-Dist: gql ~=3.5.0 ; extra == 'dev'
507
494
  Requires-Dist: inflect ; extra == 'dev'
508
495
  Requires-Dist: isort ; extra == 'dev'
509
- Requires-Dist: jira ==3.8.0 ; extra == 'dev'
496
+ Requires-Dist: jira >=3.8.0 ; extra == 'dev'
510
497
  Requires-Dist: jwcrypto >=1.5.1 ; extra == 'dev'
511
498
  Requires-Dist: lxml-stubs ; extra == 'dev'
512
499
  Requires-Dist: lxml ==5.3.0 ; extra == 'dev'
@@ -542,7 +529,6 @@ Requires-Dist: pytest >=5 ; extra == 'dev'
542
529
  Requires-Dist: python-dateutil ~=2.9.0 ; extra == 'dev'
543
530
  Requires-Dist: python-docx ; extra == 'dev'
544
531
  Requires-Dist: python-jwt ==4.1.0 ; extra == 'dev'
545
- Requires-Dist: pyxnat ==1.5.* ; extra == 'dev'
546
532
  Requires-Dist: radon ; extra == 'dev'
547
533
  Requires-Dist: rapidfuzz ~=3.7 ; extra == 'dev'
548
534
  Requires-Dist: regscale-python-ssp ; extra == 'dev'
@@ -555,7 +541,7 @@ Requires-Dist: sphinx ; extra == 'dev'
555
541
  Requires-Dist: sphinx-autodoc-typehints ; extra == 'dev'
556
542
  Requires-Dist: sphinx-click ; extra == 'dev'
557
543
  Requires-Dist: static ; extra == 'dev'
558
- Requires-Dist: synqly ; extra == 'dev'
544
+ Requires-Dist: synqly ==0.4.56 ; extra == 'dev'
559
545
  Requires-Dist: tools ; extra == 'dev'
560
546
  Requires-Dist: types-python-dateutil ; extra == 'dev'
561
547
  Requires-Dist: types-pyyaml ; extra == 'dev'
@@ -585,14 +571,13 @@ Requires-Dist: flask-appbuilder ; extra == 'server'
585
571
  Requires-Dist: flask-rebar ; extra == 'server'
586
572
  Requires-Dist: flask-restx ; extra == 'server'
587
573
  Requires-Dist: frontend ; extra == 'server'
588
- Requires-Dist: future ~=0.18.3 ; extra == 'server'
589
574
  Requires-Dist: google-api-python-client ; extra == 'server'
590
575
  Requires-Dist: google-cloud-asset ~=3.22 ; extra == 'server'
591
576
  Requires-Dist: google-cloud-securitycenter ~=1.25 ; extra == 'server'
592
577
  Requires-Dist: gql ~=3.5.0 ; extra == 'server'
593
578
  Requires-Dist: importlib-resources ; extra == 'server'
594
579
  Requires-Dist: inflect ; extra == 'server'
595
- Requires-Dist: jira ==3.8.0 ; extra == 'server'
580
+ Requires-Dist: jira >=3.8.0 ; extra == 'server'
596
581
  Requires-Dist: jwcrypto >=1.5.1 ; extra == 'server'
597
582
  Requires-Dist: lxml ==5.3.0 ; extra == 'server'
598
583
  Requires-Dist: markdown ; extra == 'server'
@@ -615,7 +600,6 @@ Requires-Dist: pytest ; extra == 'server'
615
600
  Requires-Dist: python-dateutil ~=2.9.0 ; extra == 'server'
616
601
  Requires-Dist: python-docx ; extra == 'server'
617
602
  Requires-Dist: python-jwt ==4.1.0 ; extra == 'server'
618
- Requires-Dist: pyxnat ==1.5.* ; extra == 'server'
619
603
  Requires-Dist: rapidfuzz ~=3.7 ; extra == 'server'
620
604
  Requires-Dist: regscale-python-ssp ; extra == 'server'
621
605
  Requires-Dist: requests >=2.32.0 ; extra == 'server'
@@ -624,7 +608,7 @@ Requires-Dist: setuptools ; extra == 'server'
624
608
  Requires-Dist: simple-salesforce ; extra == 'server'
625
609
  Requires-Dist: smart-open ~=7.0 ; extra == 'server'
626
610
  Requires-Dist: static ; extra == 'server'
627
- Requires-Dist: synqly ; extra == 'server'
611
+ Requires-Dist: synqly ==0.4.56 ; extra == 'server'
628
612
  Requires-Dist: tools ; extra == 'server'
629
613
  Requires-Dist: typing-extensions ~=4.12.2 ; extra == 'server'
630
614
  Requires-Dist: werkzeug >=2.3.8 ; extra == 'server'