taegis-sdk-python 1.1.5__tar.gz → 1.1.7__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 (205) hide show
  1. {taegis-sdk-python-1.1.5/taegis_sdk_python.egg-info → taegis-sdk-python-1.1.7}/PKG-INFO +1 -1
  2. taegis-sdk-python-1.1.7/taegis_sdk_python/_version.py +1 -0
  3. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/service_core.py +103 -9
  4. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/__init__.py +10 -1
  5. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/audits/types.py +3 -0
  6. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/detector_registry/types.py +6 -0
  7. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/investigations2/types.py +140 -90
  8. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/preferences/mutations.py +34 -0
  9. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/preferences/types.py +53 -0
  10. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/rules/queries.py +22 -0
  11. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/rules/types.py +45 -0
  12. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/tenant_profiles/mutations.py +50 -0
  13. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/tenant_profiles/queries.py +49 -0
  14. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/tenant_profiles/types.py +101 -0
  15. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/tenants/types.py +33 -3
  16. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/threat/types.py +3 -0
  17. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7/taegis_sdk_python.egg-info}/PKG-INFO +1 -1
  18. taegis-sdk-python-1.1.5/taegis_sdk_python/_version.py +0 -1
  19. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/LICENSE +0 -0
  20. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/MANIFEST.in +0 -0
  21. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/README.md +0 -0
  22. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/requirements-dev.txt +0 -0
  23. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/requirements-test.txt +0 -0
  24. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/requirements.txt +0 -0
  25. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/setup.cfg +0 -0
  26. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/setup.py +0 -0
  27. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/__init__.py +0 -0
  28. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/_consts.py +0 -0
  29. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/authentication.py +0 -0
  30. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/config.py +0 -0
  31. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/errors.py +0 -0
  32. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/access_points/__init__.py +0 -0
  33. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/access_points/mutations.py +0 -0
  34. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/access_points/queries.py +0 -0
  35. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/access_points/subscriptions.py +0 -0
  36. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/access_points/types.py +0 -0
  37. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/agent/__init__.py +0 -0
  38. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/agent/mutations.py +0 -0
  39. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/agent/queries.py +0 -0
  40. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/agent/subscriptions.py +0 -0
  41. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/agent/types.py +0 -0
  42. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/alerts/__init__.py +0 -0
  43. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/alerts/mutations.py +0 -0
  44. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/alerts/queries.py +0 -0
  45. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/alerts/subscriptions.py +0 -0
  46. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/alerts/types.py +0 -0
  47. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/assets/__init__.py +0 -0
  48. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/assets/mutations.py +0 -0
  49. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/assets/queries.py +0 -0
  50. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/assets/subscriptions.py +0 -0
  51. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/assets/types.py +0 -0
  52. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/assets2/__init__.py +0 -0
  53. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/assets2/mutations.py +0 -0
  54. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/assets2/queries.py +0 -0
  55. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/assets2/subscriptions.py +0 -0
  56. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/assets2/types.py +0 -0
  57. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/audits/__init__.py +0 -0
  58. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/audits/mutations.py +0 -0
  59. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/audits/queries.py +0 -0
  60. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/audits/subscriptions.py +0 -0
  61. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/authz/__init__.py +0 -0
  62. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/authz/mutations.py +0 -0
  63. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/authz/queries.py +0 -0
  64. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/authz/subscriptions.py +0 -0
  65. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/authz/types.py +0 -0
  66. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/byoti/__init__.py +0 -0
  67. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/byoti/mutations.py +0 -0
  68. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/byoti/queries.py +0 -0
  69. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/byoti/subscriptions.py +0 -0
  70. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/byoti/types.py +0 -0
  71. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/clients/__init__.py +0 -0
  72. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/clients/mutations.py +0 -0
  73. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/clients/queries.py +0 -0
  74. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/clients/subscriptions.py +0 -0
  75. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/clients/types.py +0 -0
  76. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/collector/__init__.py +0 -0
  77. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/collector/mutations.py +0 -0
  78. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/collector/queries.py +0 -0
  79. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/collector/subscriptions.py +0 -0
  80. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/collector/types.py +0 -0
  81. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/comments/__init__.py +0 -0
  82. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/comments/mutations.py +0 -0
  83. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/comments/queries.py +0 -0
  84. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/comments/subscriptions.py +0 -0
  85. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/comments/types.py +0 -0
  86. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/datasources/__init__.py +0 -0
  87. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/datasources/mutations.py +0 -0
  88. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/datasources/queries.py +0 -0
  89. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/datasources/subscriptions.py +0 -0
  90. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/datasources/types.py +0 -0
  91. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/detector_registry/__init__.py +0 -0
  92. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/detector_registry/mutations.py +0 -0
  93. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/detector_registry/queries.py +0 -0
  94. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/detector_registry/subscriptions.py +0 -0
  95. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/endpoint_command_manager/__init__.py +0 -0
  96. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/endpoint_command_manager/mutations.py +0 -0
  97. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/endpoint_command_manager/queries.py +0 -0
  98. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/endpoint_command_manager/subscriptions.py +0 -0
  99. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/endpoint_command_manager/types.py +0 -0
  100. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/endpoint_management_service/__init__.py +0 -0
  101. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/endpoint_management_service/mutations.py +0 -0
  102. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/endpoint_management_service/queries.py +0 -0
  103. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/endpoint_management_service/subscriptions.py +0 -0
  104. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/endpoint_management_service/types.py +0 -0
  105. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/event_search/__init__.py +0 -0
  106. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/event_search/mutations.py +0 -0
  107. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/event_search/queries.py +0 -0
  108. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/event_search/subscriptions.py +0 -0
  109. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/event_search/types.py +0 -0
  110. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/events/__init__.py +0 -0
  111. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/events/mutations.py +0 -0
  112. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/events/queries.py +0 -0
  113. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/events/subscriptions.py +0 -0
  114. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/events/types.py +0 -0
  115. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/exports/__init__.py +0 -0
  116. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/exports/mutations.py +0 -0
  117. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/exports/queries.py +0 -0
  118. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/exports/subscriptions.py +0 -0
  119. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/exports/types.py +0 -0
  120. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/fast_ioc/__init__.py +0 -0
  121. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/fast_ioc/mutations.py +0 -0
  122. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/fast_ioc/queries.py +0 -0
  123. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/fast_ioc/subscriptions.py +0 -0
  124. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/fast_ioc/types.py +0 -0
  125. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/investigations/__init__.py +0 -0
  126. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/investigations/mutations.py +0 -0
  127. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/investigations/queries.py +0 -0
  128. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/investigations/subscriptions.py +0 -0
  129. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/investigations/types.py +0 -0
  130. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/investigations2/__init__.py +0 -0
  131. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/investigations2/mutations.py +0 -0
  132. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/investigations2/queries.py +0 -0
  133. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/investigations2/subscriptions.py +0 -0
  134. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/mitre_attack_info/__init__.py +0 -0
  135. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/mitre_attack_info/mutations.py +0 -0
  136. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/mitre_attack_info/queries.py +0 -0
  137. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/mitre_attack_info/subscriptions.py +0 -0
  138. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/mitre_attack_info/types.py +0 -0
  139. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/multi_tenant_context/__init__.py +0 -0
  140. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/multi_tenant_context/mutations.py +0 -0
  141. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/multi_tenant_context/queries.py +0 -0
  142. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/multi_tenant_context/subscriptions.py +0 -0
  143. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/multi_tenant_context/types.py +0 -0
  144. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/multi_tenant_ioc/__init__.py +0 -0
  145. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/multi_tenant_ioc/mutations.py +0 -0
  146. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/multi_tenant_ioc/queries.py +0 -0
  147. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/multi_tenant_ioc/subscriptions.py +0 -0
  148. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/multi_tenant_ioc/types.py +0 -0
  149. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/notebooks/__init__.py +0 -0
  150. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/notebooks/mutations.py +0 -0
  151. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/notebooks/queries.py +0 -0
  152. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/notebooks/subscriptions.py +0 -0
  153. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/notebooks/types.py +0 -0
  154. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/notifications/__init__.py +0 -0
  155. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/notifications/mutations.py +0 -0
  156. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/notifications/queries.py +0 -0
  157. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/notifications/subscriptions.py +0 -0
  158. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/notifications/types.py +0 -0
  159. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/preferences/__init__.py +0 -0
  160. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/preferences/queries.py +0 -0
  161. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/preferences/subscriptions.py +0 -0
  162. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/roadrunner/__init__.py +0 -0
  163. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/roadrunner/mutations.py +0 -0
  164. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/roadrunner/queries.py +0 -0
  165. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/roadrunner/subscriptions.py +0 -0
  166. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/roadrunner/types.py +0 -0
  167. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/rules/__init__.py +0 -0
  168. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/rules/mutations.py +0 -0
  169. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/rules/subscriptions.py +0 -0
  170. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/sharelinks/__init__.py +0 -0
  171. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/sharelinks/mutations.py +0 -0
  172. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/sharelinks/queries.py +0 -0
  173. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/sharelinks/subscriptions.py +0 -0
  174. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/sharelinks/types.py +0 -0
  175. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/subjects/__init__.py +0 -0
  176. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/subjects/mutations.py +0 -0
  177. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/subjects/queries.py +0 -0
  178. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/subjects/subscriptions.py +0 -0
  179. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/subjects/types.py +0 -0
  180. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/tenant_profiles/__init__.py +0 -0
  181. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/tenant_profiles/subscriptions.py +0 -0
  182. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/tenants/__init__.py +0 -0
  183. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/tenants/mutations.py +0 -0
  184. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/tenants/queries.py +0 -0
  185. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/tenants/subscriptions.py +0 -0
  186. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/threat/__init__.py +0 -0
  187. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/threat/mutations.py +0 -0
  188. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/threat/queries.py +0 -0
  189. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/threat/subscriptions.py +0 -0
  190. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/trip/__init__.py +0 -0
  191. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/trip/mutations.py +0 -0
  192. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/trip/queries.py +0 -0
  193. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/trip/subscriptions.py +0 -0
  194. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/trip/types.py +0 -0
  195. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/users/__init__.py +0 -0
  196. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/users/mutations.py +0 -0
  197. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/users/queries.py +0 -0
  198. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/users/subscriptions.py +0 -0
  199. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/services/users/types.py +0 -0
  200. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/tokens.py +0 -0
  201. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python/utils.py +0 -0
  202. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python.egg-info/SOURCES.txt +0 -0
  203. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python.egg-info/dependency_links.txt +0 -0
  204. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python.egg-info/requires.txt +0 -0
  205. {taegis-sdk-python-1.1.5 → taegis-sdk-python-1.1.7}/taegis_sdk_python.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: taegis-sdk-python
3
- Version: 1.1.5
3
+ Version: 1.1.7
4
4
  Summary: Taegis Python SDK
5
5
  Home-page: https://github.com/secureworks/taegis-sdk-python
6
6
  Author: Secureworks
@@ -0,0 +1 @@
1
+ __version__ = "v1.1.7"
@@ -5,12 +5,13 @@ Taegis ServiceCore manager.
5
5
  from __future__ import annotations
6
6
 
7
7
  import logging
8
- from typing import TYPE_CHECKING, Dict, List, Optional, Any
8
+ from datetime import datetime, timedelta
9
+ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union
9
10
 
10
11
  from gql import Client, gql
11
12
  from gql.transport.requests import RequestsHTTPTransport
12
13
  from gql.transport.websockets import WebsocketsTransport
13
- from graphql import GraphQLField, GraphQLSchema, GraphQLError
14
+ from graphql import GraphQLError, GraphQLField, GraphQLSchema
14
15
  from taegis_sdk_python._version import __version__
15
16
  from taegis_sdk_python.errors import InvalidGraphQLEndpoint
16
17
  from taegis_sdk_python.utils import async_block, prepare_variables, remove_node
@@ -22,6 +23,60 @@ if TYPE_CHECKING: # pragma: no cover
22
23
  log = logging.getLogger(__name__)
23
24
 
24
25
 
26
+ class SchemaCache:
27
+ """GraphQL Schema Cache."""
28
+
29
+ def __init__(self, schema: Optional[GraphQLSchema] = None, expires: int = 5):
30
+ """Initialize SchemaCache.
31
+
32
+ Parameters
33
+ ----------
34
+ schema : Optional[GraphQLSchema], optional
35
+ GraphQL schema object, by default None
36
+ expires : int, optional
37
+ Schema expires in minutes, by default 5
38
+ """
39
+ self._schema = schema
40
+ self._inserted_at = datetime.now()
41
+ self.expires = expires
42
+
43
+ @property
44
+ def schema(self) -> Union[GraphQLSchema, None]:
45
+ """Return GraphQLSchema if it exists and is not expired.
46
+
47
+ Returns
48
+ -------
49
+ Union[GraphQLSchema, None]
50
+ GraphQL Schema
51
+ """
52
+ if self._inserted_at + timedelta(minutes=self.expires) < datetime.now():
53
+ self.schema = None
54
+ return self._schema
55
+
56
+ @schema.setter
57
+ def schema(self, schema: Optional[GraphQLSchema]):
58
+ """Set schema and update inserted_at.
59
+
60
+ Parameters
61
+ ----------
62
+ schema :
63
+ _description_
64
+ """
65
+ if self._schema is not schema:
66
+ self._schema = schema
67
+ self._inserted_at = datetime.now()
68
+
69
+ def should_fetch_schema(self) -> bool:
70
+ """Return True if schema is should be fetched in transport.
71
+
72
+ Returns
73
+ -------
74
+ bool
75
+ True if schema is should be fetched in transport.
76
+ """
77
+ return not self.schema
78
+
79
+
25
80
  class ServiceCore:
26
81
  """Taegis GraphQL Service core functionality."""
27
82
 
@@ -31,22 +86,24 @@ class ServiceCore:
31
86
  self._urls = self.service._environments
32
87
  self._gateway = self.service._gateway
33
88
 
89
+ self._schema = SchemaCache(schema=None, expires=self.service.schema_expiry)
90
+
34
91
  self._queries = None
35
92
  self._mutations = None
36
93
  self._subscriptions = None
37
94
 
38
95
  @property
39
- def sync_url(self):
96
+ def sync_url(self) -> str:
40
97
  """Syncronous URL."""
41
98
  return self.service.url or self._urls.get(self.service.environment)
42
99
 
43
100
  @property
44
- def wss_url(self):
101
+ def wss_url(self) -> str:
45
102
  """WebSockets URL."""
46
103
  return self.sync_url.replace("https", "wss")
47
104
 
48
105
  @property
49
- def gateway(self):
106
+ def gateway(self) -> str:
50
107
  """GraphQL Gateway"""
51
108
  return self.service.gateway or self._gateway
52
109
 
@@ -72,7 +129,16 @@ class ServiceCore:
72
129
  f"{self.sync_url}{self.gateway}",
73
130
  headers=self.service.headers,
74
131
  )
75
- client = Client(transport=transport, fetch_schema_from_transport=True)
132
+
133
+ client = Client(
134
+ transport=transport,
135
+ schema=self._schema.schema,
136
+ fetch_schema_from_transport=self._schema.should_fetch_schema(),
137
+ )
138
+
139
+ with client:
140
+ self._schema.schema = client.schema
141
+
76
142
  return client
77
143
 
78
144
  @property
@@ -83,6 +149,12 @@ class ServiceCore:
83
149
  f"access-token-{self.service.access_token}",
84
150
  ]
85
151
 
152
+ # we cannot build the async client and use it to fetch the schema
153
+ # due to async issues with the transport. This will grab the schema
154
+ # from a sync client and use it to build the async client.
155
+ if not self._schema.schema:
156
+ self.sync_client # pylint: disable=pointless-statement
157
+
86
158
  if self.service.tenant_id:
87
159
  subprotocols.append(f"x-tenant-context-{self.service.tenant_id}")
88
160
 
@@ -92,10 +164,32 @@ class ServiceCore:
92
164
  subprotocols=subprotocols,
93
165
  connect_args={"max_size": None},
94
166
  )
95
- client = Client(transport=transport, fetch_schema_from_transport=True)
167
+
168
+ client = Client(
169
+ transport=transport,
170
+ schema=self._schema.schema,
171
+ fetch_schema_from_transport=self._schema.should_fetch_schema(),
172
+ )
173
+
96
174
  return client
97
175
 
98
- def get_sync_schema(self) -> GraphQLSchema:
176
+ @property
177
+ def schema(self) -> GraphQLSchema:
178
+ """Retrieves introspection schema from Synchronous endpoint.
179
+
180
+ Returns
181
+ -------
182
+ GraphQLSchema
183
+ """
184
+ if not self._schema.schema:
185
+ self.sync_client # pylint: disable=pointless-statement
186
+ return self._schema.schema
187
+
188
+ def clear_schema(self):
189
+ """Clears the introspection schema."""
190
+ self._schema.schema = None
191
+
192
+ def get_sync_schema(self) -> Union[GraphQLSchema, None]:
99
193
  """Retrieves introspection schema from Synchronous endpoint.
100
194
 
101
195
  Returns
@@ -108,7 +202,7 @@ class ServiceCore:
108
202
  return schema
109
203
 
110
204
  @async_block
111
- async def get_ws_schema(self) -> GraphQLSchema:
205
+ async def get_ws_schema(self) -> Union[GraphQLSchema, None]:
112
206
  """Retrieves introspection schema from WebSockets endpoint.
113
207
 
114
208
  Returns
@@ -63,7 +63,8 @@ class GraphQLService:
63
63
  environments: Optional[Dict[str, str]] = None,
64
64
  gateway: Optional[str] = None,
65
65
  extra_headers: Optional[Dict[str, Any]] = None,
66
- ):
66
+ schema_expiry: int = 5,
67
+ ): # pylint: disable=too-many-statements
67
68
  """
68
69
  GraphQLService
69
70
 
@@ -79,6 +80,8 @@ class GraphQLService:
79
80
  Default Taegis Gateway, can be overwritten by service
80
81
  extra_headers: Optional[Dict[str, Any]], optional
81
82
  Extra HTTP Headers to be included in API calls
83
+ schema_expiry: int, optional
84
+ Expire time for GraphQL Schema Caching in minutes, by default 1
82
85
 
83
86
  Raises
84
87
  ------
@@ -99,6 +102,7 @@ class GraphQLService:
99
102
  self._extra_headers = {}
100
103
  else:
101
104
  self._extra_headers = extra_headers
105
+ self._schema_expiry = schema_expiry
102
106
 
103
107
  self._access_points = None
104
108
  self._agent = None
@@ -224,6 +228,11 @@ class GraphQLService:
224
228
 
225
229
  return headers
226
230
 
231
+ @property
232
+ def schema_expiry(self):
233
+ """GraphQL Schema Timeout."""
234
+ return self._context_manager.get("schema_expiry", self._schema_expiry)
235
+
227
236
  @property
228
237
  def access_points(self):
229
238
  """Access Points Service Endpoint."""
@@ -136,6 +136,9 @@ class AuditInput:
136
136
  tenant_id: Optional[str] = field(
137
137
  default=None, metadata=config(field_name="tenantId")
138
138
  )
139
+ event_name: Optional[str] = field(
140
+ default=None, metadata=config(field_name="eventName")
141
+ )
139
142
  event_name_index: Optional[int] = field(
140
143
  default=None, metadata=config(field_name="eventNameIndex")
141
144
  )
@@ -44,6 +44,9 @@ class SearchDetectors:
44
44
  alerting_rule: Optional[bool] = field(
45
45
  default=None, metadata=config(field_name="alertingRule")
46
46
  )
47
+ should_compact: Optional[bool] = field(
48
+ default=None, metadata=config(field_name="shouldCompact")
49
+ )
47
50
  created_on_or_after: Optional[str] = field(
48
51
  default=None, metadata=config(field_name="createdOnOrAfter")
49
52
  )
@@ -80,6 +83,9 @@ class RegisteredDetector:
80
83
  alerting_rule: Optional[bool] = field(
81
84
  default=None, metadata=config(field_name="alertingRule")
82
85
  )
86
+ should_compact: Optional[bool] = field(
87
+ default=None, metadata=config(field_name="shouldCompact")
88
+ )
83
89
  created_at: Optional[str] = field(
84
90
  default=None, metadata=config(field_name="createdAt")
85
91
  )
@@ -689,6 +689,14 @@ class TDRUser:
689
689
  id: Optional[str] = field(default=None, metadata=config(field_name="id"))
690
690
 
691
691
 
692
+ @dataclass_json
693
+ @dataclass(order=True, eq=True, frozen=True)
694
+ class Subject:
695
+ """Subject."""
696
+
697
+ id: Optional[str] = field(default=None, metadata=config(field_name="id"))
698
+
699
+
692
700
  @dataclass_json
693
701
  @dataclass(order=True, eq=True, frozen=True)
694
702
  class InvestigationFileMeta:
@@ -918,38 +926,6 @@ class ExportInvestigationResourcesArgument:
918
926
  )
919
927
 
920
928
 
921
- @dataclass_json
922
- @dataclass(order=True, eq=True, frozen=True)
923
- class InvestigationV2TimelineEntity:
924
- """InvestigationV2TimelineEntity."""
925
-
926
- type: Optional[str] = field(default=None, metadata=config(field_name="type"))
927
- id: Optional[str] = field(default=None, metadata=config(field_name="id"))
928
- investigation_id: Optional[str] = field(
929
- default=None, metadata=config(field_name="investigationId")
930
- )
931
- tenant_id: Optional[str] = field(
932
- default=None, metadata=config(field_name="tenantId")
933
- )
934
- created_at: Optional[str] = field(
935
- default=None, metadata=config(field_name="createdAt")
936
- )
937
- timestamp: Optional[str] = field(
938
- default=None, metadata=config(field_name="timestamp")
939
- )
940
- entity_id: Optional[str] = field(
941
- default=None, metadata=config(field_name="entityId")
942
- )
943
- description: Optional[str] = field(
944
- default=None, metadata=config(field_name="description")
945
- )
946
- descriptor: Optional[str] = field(
947
- default=None, metadata=config(field_name="descriptor")
948
- )
949
- user_id: Optional[str] = field(default=None, metadata=config(field_name="userId"))
950
- user: Optional[TDRUser] = field(default=None, metadata=config(field_name="user"))
951
-
952
-
953
929
  @dataclass_json
954
930
  @dataclass(order=True, eq=True, frozen=True)
955
931
  class InvestigationV2Type:
@@ -1079,6 +1055,41 @@ class InvestigationV2TimelineArguments:
1079
1055
  )
1080
1056
 
1081
1057
 
1058
+ @dataclass_json
1059
+ @dataclass(order=True, eq=True, frozen=True)
1060
+ class InvestigationV2TimelineEntity:
1061
+ """InvestigationV2TimelineEntity."""
1062
+
1063
+ type: Optional[str] = field(default=None, metadata=config(field_name="type"))
1064
+ id: Optional[str] = field(default=None, metadata=config(field_name="id"))
1065
+ investigation_id: Optional[str] = field(
1066
+ default=None, metadata=config(field_name="investigationId")
1067
+ )
1068
+ tenant_id: Optional[str] = field(
1069
+ default=None, metadata=config(field_name="tenantId")
1070
+ )
1071
+ created_at: Optional[str] = field(
1072
+ default=None, metadata=config(field_name="createdAt")
1073
+ )
1074
+ timestamp: Optional[str] = field(
1075
+ default=None, metadata=config(field_name="timestamp")
1076
+ )
1077
+ entity_id: Optional[str] = field(
1078
+ default=None, metadata=config(field_name="entityId")
1079
+ )
1080
+ description: Optional[str] = field(
1081
+ default=None, metadata=config(field_name="description")
1082
+ )
1083
+ descriptor: Optional[str] = field(
1084
+ default=None, metadata=config(field_name="descriptor")
1085
+ )
1086
+ user_id: Optional[str] = field(default=None, metadata=config(field_name="userId"))
1087
+ user: Optional[TDRUser] = field(default=None, metadata=config(field_name="user"))
1088
+ user_subject: Optional[Subject] = field(
1089
+ default=None, metadata=config(field_name="userSubject")
1090
+ )
1091
+
1092
+
1082
1093
  @dataclass_json
1083
1094
  @dataclass(order=True, eq=True, frozen=True)
1084
1095
  class CommentsV2Arguments:
@@ -1113,6 +1124,22 @@ class AggregatedCounts:
1113
1124
  )
1114
1125
 
1115
1126
 
1127
+ @dataclass_json
1128
+ @dataclass(order=True, eq=True, frozen=True)
1129
+ class InvestigationProcessingStatus:
1130
+ """InvestigationProcessingStatus."""
1131
+
1132
+ assets: Optional[InvestigationProcessingState] = field(
1133
+ default=None, metadata=config(field_name="assets")
1134
+ )
1135
+ events: Optional[InvestigationProcessingState] = field(
1136
+ default=None, metadata=config(field_name="events")
1137
+ )
1138
+ alerts: Optional[InvestigationProcessingState] = field(
1139
+ default=None, metadata=config(field_name="alerts")
1140
+ )
1141
+
1142
+
1116
1143
  @dataclass_json
1117
1144
  @dataclass(order=True, eq=True, frozen=True)
1118
1145
  class InvestigationTemplate:
@@ -1167,72 +1194,20 @@ class InvestigationTemplate:
1167
1194
  created_by: Optional[TDRUser] = field(
1168
1195
  default=None, metadata=config(field_name="createdBy")
1169
1196
  )
1197
+ created_by_subject: Optional[Subject] = field(
1198
+ default=None, metadata=config(field_name="createdBySubject")
1199
+ )
1170
1200
  updated_by: Optional[TDRUser] = field(
1171
1201
  default=None, metadata=config(field_name="updatedBy")
1172
1202
  )
1203
+ updated_by_subject: Optional[Subject] = field(
1204
+ default=None, metadata=config(field_name="updatedBySubject")
1205
+ )
1173
1206
  investigation_assignee_user: Optional[TDRUser] = field(
1174
1207
  default=None, metadata=config(field_name="investigationAssigneeUser")
1175
1208
  )
1176
1209
 
1177
1210
 
1178
- @dataclass_json
1179
- @dataclass(order=True, eq=True, frozen=True)
1180
- class InvestigationProcessingStatus:
1181
- """InvestigationProcessingStatus."""
1182
-
1183
- assets: Optional[InvestigationProcessingState] = field(
1184
- default=None, metadata=config(field_name="assets")
1185
- )
1186
- events: Optional[InvestigationProcessingState] = field(
1187
- default=None, metadata=config(field_name="events")
1188
- )
1189
- alerts: Optional[InvestigationProcessingState] = field(
1190
- default=None, metadata=config(field_name="alerts")
1191
- )
1192
-
1193
-
1194
- @dataclass_json
1195
- @dataclass(order=True, eq=True, frozen=True)
1196
- class CommentV2:
1197
- """CommentV2."""
1198
-
1199
- id: Optional[str] = field(default=None, metadata=config(field_name="id"))
1200
- created_at: Optional[str] = field(
1201
- default=None, metadata=config(field_name="createdAt")
1202
- )
1203
- updated_at: Optional[str] = field(
1204
- default=None, metadata=config(field_name="updatedAt")
1205
- )
1206
- author_id: Optional[str] = field(
1207
- default=None, metadata=config(field_name="authorId")
1208
- )
1209
- comment: Optional[str] = field(default=None, metadata=config(field_name="comment"))
1210
- investigation_id: Optional[str] = field(
1211
- default=None, metadata=config(field_name="investigationId")
1212
- )
1213
- tenant_id: Optional[str] = field(
1214
- default=None, metadata=config(field_name="tenantId")
1215
- )
1216
- mentions_ids: Optional[List[str]] = field(
1217
- default=None, metadata=config(field_name="mentionsIds")
1218
- )
1219
- read_by_ids: Optional[List[str]] = field(
1220
- default=None, metadata=config(field_name="readByIds")
1221
- )
1222
- is_internal: Optional[bool] = field(
1223
- default=None, metadata=config(field_name="isInternal")
1224
- )
1225
- author: Optional[TDRUser] = field(
1226
- default=None, metadata=config(field_name="author")
1227
- )
1228
- mentions_users: Optional[List[TDRUser]] = field(
1229
- default=None, metadata=config(field_name="mentionsUsers")
1230
- )
1231
- read_by: Optional[List[TDRUser]] = field(
1232
- default=None, metadata=config(field_name="readBy")
1233
- )
1234
-
1235
-
1236
1211
  @dataclass_json
1237
1212
  @dataclass(order=True, eq=True, frozen=True)
1238
1213
  class InvestigationFileV2:
@@ -1270,9 +1245,15 @@ class InvestigationFileV2:
1270
1245
  uploaded_by: Optional[TDRUser] = field(
1271
1246
  default=None, metadata=config(field_name="uploadedBy")
1272
1247
  )
1248
+ uploaded_by_subject: Optional[Subject] = field(
1249
+ default=None, metadata=config(field_name="uploadedBySubject")
1250
+ )
1273
1251
  deleted_by: Optional[TDRUser] = field(
1274
1252
  default=None, metadata=config(field_name="deletedBy")
1275
1253
  )
1254
+ deleted_by_subject: Optional[Subject] = field(
1255
+ default=None, metadata=config(field_name="deletedBySubject")
1256
+ )
1276
1257
  metadata: Optional[InvestigationFileMeta] = field(
1277
1258
  default=None, metadata=config(field_name="metadata")
1278
1259
  )
@@ -1354,9 +1335,15 @@ class InvestigationRule:
1354
1335
  created_by: Optional[TDRUser] = field(
1355
1336
  default=None, metadata=config(field_name="createdBy")
1356
1337
  )
1338
+ created_by_subject: Optional[Subject] = field(
1339
+ default=None, metadata=config(field_name="createdBySubject")
1340
+ )
1357
1341
  updated_by: Optional[TDRUser] = field(
1358
1342
  default=None, metadata=config(field_name="updatedBy")
1359
1343
  )
1344
+ updated_by_subject: Optional[Subject] = field(
1345
+ default=None, metadata=config(field_name="updatedBySubject")
1346
+ )
1360
1347
  state: Optional[InvestigationRuleState] = field(
1361
1348
  default=None, metadata=config(field_name="state")
1362
1349
  )
@@ -1365,6 +1352,57 @@ class InvestigationRule:
1365
1352
  )
1366
1353
 
1367
1354
 
1355
+ @dataclass_json
1356
+ @dataclass(order=True, eq=True, frozen=True)
1357
+ class CommentV2:
1358
+ """CommentV2."""
1359
+
1360
+ id: Optional[str] = field(default=None, metadata=config(field_name="id"))
1361
+ created_at: Optional[str] = field(
1362
+ default=None, metadata=config(field_name="createdAt")
1363
+ )
1364
+ updated_at: Optional[str] = field(
1365
+ default=None, metadata=config(field_name="updatedAt")
1366
+ )
1367
+ author_id: Optional[str] = field(
1368
+ default=None, metadata=config(field_name="authorId")
1369
+ )
1370
+ comment: Optional[str] = field(default=None, metadata=config(field_name="comment"))
1371
+ investigation_id: Optional[str] = field(
1372
+ default=None, metadata=config(field_name="investigationId")
1373
+ )
1374
+ tenant_id: Optional[str] = field(
1375
+ default=None, metadata=config(field_name="tenantId")
1376
+ )
1377
+ mentions_ids: Optional[List[str]] = field(
1378
+ default=None, metadata=config(field_name="mentionsIds")
1379
+ )
1380
+ read_by_ids: Optional[List[str]] = field(
1381
+ default=None, metadata=config(field_name="readByIds")
1382
+ )
1383
+ is_internal: Optional[bool] = field(
1384
+ default=None, metadata=config(field_name="isInternal")
1385
+ )
1386
+ author: Optional[TDRUser] = field(
1387
+ default=None, metadata=config(field_name="author")
1388
+ )
1389
+ author_subject: Optional[Subject] = field(
1390
+ default=None, metadata=config(field_name="authorSubject")
1391
+ )
1392
+ mentions_subjects: Optional[List[Subject]] = field(
1393
+ default=None, metadata=config(field_name="mentionsSubjects")
1394
+ )
1395
+ mentions_users: Optional[List[TDRUser]] = field(
1396
+ default=None, metadata=config(field_name="mentionsUsers")
1397
+ )
1398
+ read_by_subjects: Optional[List[Subject]] = field(
1399
+ default=None, metadata=config(field_name="readBySubjects")
1400
+ )
1401
+ read_by: Optional[List[TDRUser]] = field(
1402
+ default=None, metadata=config(field_name="readBy")
1403
+ )
1404
+
1405
+
1368
1406
  @dataclass_json
1369
1407
  @dataclass(order=True, eq=True, frozen=True)
1370
1408
  class InvestigationV2:
@@ -1489,15 +1527,27 @@ class InvestigationV2:
1489
1527
  contributors: Optional[List[TDRUser]] = field(
1490
1528
  default=None, metadata=config(field_name="contributors")
1491
1529
  )
1530
+ contributor_subjects: Optional[List[Subject]] = field(
1531
+ default=None, metadata=config(field_name="contributorSubjects")
1532
+ )
1492
1533
  assignee: Optional[TDRUser] = field(
1493
1534
  default=None, metadata=config(field_name="assignee")
1494
1535
  )
1536
+ assignee_subject: Optional[Subject] = field(
1537
+ default=None, metadata=config(field_name="assigneeSubject")
1538
+ )
1495
1539
  created_by: Optional[TDRUser] = field(
1496
1540
  default=None, metadata=config(field_name="createdBy")
1497
1541
  )
1542
+ created_by_subject: Optional[Subject] = field(
1543
+ default=None, metadata=config(field_name="createdBySubject")
1544
+ )
1498
1545
  updated_by: Optional[TDRUser] = field(
1499
1546
  default=None, metadata=config(field_name="updatedBy")
1500
1547
  )
1548
+ updated_by_subject: Optional[Subject] = field(
1549
+ default=None, metadata=config(field_name="updatedBySubject")
1550
+ )
1501
1551
  type: Optional[InvestigationType] = field(
1502
1552
  default=None, metadata=config(field_name="type")
1503
1553
  )
@@ -159,3 +159,37 @@ class TaegisSDKPreferencesMutation:
159
159
  if result.get(endpoint) is not None:
160
160
  return PartnerPreference.from_dict(result.get(endpoint))
161
161
  raise GraphQLNoRowsInResultSetError("for mutation savePartnerPreferences")
162
+
163
+ def set_user_preferences(
164
+ self, user_preference_input: UserPreferenceInput
165
+ ) -> UserPreferenceDictionary:
166
+ """None."""
167
+ endpoint = "setUserPreferences"
168
+
169
+ result = self.service.execute_mutation(
170
+ endpoint=endpoint,
171
+ variables={
172
+ "userPreferenceInput": prepare_input(user_preference_input),
173
+ },
174
+ output=build_output_string(UserPreferenceDictionary),
175
+ )
176
+ if result.get(endpoint) is not None:
177
+ return UserPreferenceDictionary.from_dict(result.get(endpoint))
178
+ raise GraphQLNoRowsInResultSetError("for mutation setUserPreferences")
179
+
180
+ def unset_user_preferences(
181
+ self, unset_preference_selector: Optional[UnsetPreferenceSelector] = None
182
+ ) -> UserPreferenceDictionary:
183
+ """None."""
184
+ endpoint = "unsetUserPreferences"
185
+
186
+ result = self.service.execute_mutation(
187
+ endpoint=endpoint,
188
+ variables={
189
+ "unsetPreferenceSelector": prepare_input(unset_preference_selector),
190
+ },
191
+ output=build_output_string(UserPreferenceDictionary),
192
+ )
193
+ if result.get(endpoint) is not None:
194
+ return UserPreferenceDictionary.from_dict(result.get(endpoint))
195
+ raise GraphQLNoRowsInResultSetError("for mutation unsetUserPreferences")
@@ -175,6 +175,23 @@ class listAllTenantPreferencesInput:
175
175
  )
176
176
 
177
177
 
178
+ @dataclass_json
179
+ @dataclass(order=True, eq=True, frozen=True)
180
+ class UserPreferenceInput:
181
+ """UserPreferenceInput."""
182
+
183
+ category: Optional[str] = field(
184
+ default=None, metadata=config(field_name="category")
185
+ )
186
+ sub_key: Optional[str] = field(default=None, metadata=config(field_name="subKey"))
187
+ preference_items: Optional[dict] = field(
188
+ default=None, metadata=config(field_name="preferenceItems")
189
+ )
190
+ is_global: Optional[bool] = field(
191
+ default=None, metadata=config(field_name="isGlobal")
192
+ )
193
+
194
+
178
195
  @dataclass_json
179
196
  @dataclass(order=True, eq=True, frozen=True)
180
197
  class PartnerPreference:
@@ -209,6 +226,42 @@ class PartnerPreference:
209
226
  )
210
227
 
211
228
 
229
+ @dataclass_json
230
+ @dataclass(order=True, eq=True, frozen=True)
231
+ class UserPreferenceDictionary:
232
+ """UserPreferenceDictionary."""
233
+
234
+ id: Optional[str] = field(default=None, metadata=config(field_name="id"))
235
+ user_id: Optional[str] = field(default=None, metadata=config(field_name="userID"))
236
+ category: Optional[str] = field(
237
+ default=None, metadata=config(field_name="category")
238
+ )
239
+ sub_key: Optional[str] = field(default=None, metadata=config(field_name="subKey"))
240
+ preferences: Optional[dict] = field(
241
+ default=None, metadata=config(field_name="preferences")
242
+ )
243
+ environment: Optional[str] = field(
244
+ default=None, metadata=config(field_name="environment")
245
+ )
246
+ created_at: Optional[str] = field(
247
+ default=None, metadata=config(field_name="createdAt")
248
+ )
249
+ updated_at: Optional[str] = field(
250
+ default=None, metadata=config(field_name="updatedAt")
251
+ )
252
+
253
+
254
+ @dataclass_json
255
+ @dataclass(order=True, eq=True, frozen=True)
256
+ class UnsetPreferenceSelector:
257
+ """UnsetPreferenceSelector."""
258
+
259
+ category: Optional[str] = field(
260
+ default=None, metadata=config(field_name="category")
261
+ )
262
+ sub_key: Optional[str] = field(default=None, metadata=config(field_name="subKey"))
263
+
264
+
212
265
  @dataclass_json
213
266
  @dataclass(order=True, eq=True, frozen=True)
214
267
  class UserPreference: