taegis-sdk-python 1.6.0__tar.gz → 1.6.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/PKG-INFO +2 -1
  2. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/pyproject.toml +1 -0
  3. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/_version.py +1 -1
  4. taegis_sdk_python-1.6.1/taegis_sdk_python/middlewares/__init__.py +6 -0
  5. taegis_sdk_python-1.6.1/taegis_sdk_python/middlewares/logging/__init__.py +5 -0
  6. taegis_sdk_python-1.6.1/taegis_sdk_python/middlewares/logging/_default.py +31 -0
  7. taegis_sdk_python-1.6.1/taegis_sdk_python/middlewares/retry/__init__.py +5 -0
  8. taegis_sdk_python-1.6.1/taegis_sdk_python/middlewares/retry/_default.py +80 -0
  9. taegis_sdk_python-1.6.1/taegis_sdk_python/middlewares/utils.py +39 -0
  10. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/service_core.py +15 -7
  11. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/__init__.py +8 -1
  12. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/templates/_jinja2.py +5 -2
  13. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/.gitignore +0 -0
  14. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/LICENSE +0 -0
  15. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/README.md +0 -0
  16. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/__init__.py +0 -0
  17. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/_consts.py +0 -0
  18. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/authentication.py +0 -0
  19. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/commons/__init__.py +0 -0
  20. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/commons/alerts/__init__.py +0 -0
  21. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/commons/alerts/federated_search.py +0 -0
  22. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/commons/alerts/search.py +0 -0
  23. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/commons/cases/__init__.py +0 -0
  24. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/commons/cases/federated_search.py +0 -0
  25. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/commons/cases/search.py +0 -0
  26. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/commons/events/__init__.py +0 -0
  27. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/commons/events/search.py +0 -0
  28. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/commons/investigations/__init__.py +0 -0
  29. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/commons/investigations/federated_search.py +0 -0
  30. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/commons/investigations/search.py +0 -0
  31. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/commons/sharelinks/__init__.py +0 -0
  32. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/commons/sharelinks/create.py +0 -0
  33. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/commons/sharelinks/unfurl.py +0 -0
  34. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/config.py +0 -0
  35. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/errors.py +0 -0
  36. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/access_points/__init__.py +0 -0
  37. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/access_points/mutations.py +0 -0
  38. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/access_points/queries.py +0 -0
  39. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/access_points/subscriptions.py +0 -0
  40. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/access_points/types.py +0 -0
  41. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/agent/__init__.py +0 -0
  42. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/agent/mutations.py +0 -0
  43. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/agent/queries.py +0 -0
  44. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/agent/subscriptions.py +0 -0
  45. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/agent/types.py +0 -0
  46. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/alerts/__init__.py +0 -0
  47. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/alerts/mutations.py +0 -0
  48. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/alerts/queries.py +0 -0
  49. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/alerts/subscriptions.py +0 -0
  50. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/alerts/types.py +0 -0
  51. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/alerts_history/__init__.py +0 -0
  52. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/alerts_history/mutations.py +0 -0
  53. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/alerts_history/queries.py +0 -0
  54. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/alerts_history/subscriptions.py +0 -0
  55. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/alerts_history/types.py +0 -0
  56. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/assets/__init__.py +0 -0
  57. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/assets/mutations.py +0 -0
  58. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/assets/queries.py +0 -0
  59. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/assets/subscriptions.py +0 -0
  60. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/assets/types.py +0 -0
  61. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/assets2/__init__.py +0 -0
  62. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/assets2/mutations.py +0 -0
  63. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/assets2/queries.py +0 -0
  64. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/assets2/subscriptions.py +0 -0
  65. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/assets2/types.py +0 -0
  66. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/audits/__init__.py +0 -0
  67. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/audits/mutations.py +0 -0
  68. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/audits/queries.py +0 -0
  69. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/audits/subscriptions.py +0 -0
  70. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/audits/types.py +0 -0
  71. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/authz/__init__.py +0 -0
  72. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/authz/mutations.py +0 -0
  73. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/authz/queries.py +0 -0
  74. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/authz/subscriptions.py +0 -0
  75. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/authz/types.py +0 -0
  76. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/byoti/__init__.py +0 -0
  77. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/byoti/mutations.py +0 -0
  78. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/byoti/queries.py +0 -0
  79. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/byoti/subscriptions.py +0 -0
  80. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/byoti/types.py +0 -0
  81. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/clients/__init__.py +0 -0
  82. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/clients/mutations.py +0 -0
  83. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/clients/queries.py +0 -0
  84. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/clients/subscriptions.py +0 -0
  85. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/clients/types.py +0 -0
  86. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/collector/__init__.py +0 -0
  87. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/collector/mutations.py +0 -0
  88. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/collector/queries.py +0 -0
  89. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/collector/subscriptions.py +0 -0
  90. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/collector/types.py +0 -0
  91. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/comments/__init__.py +0 -0
  92. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/comments/mutations.py +0 -0
  93. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/comments/queries.py +0 -0
  94. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/comments/subscriptions.py +0 -0
  95. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/comments/types.py +0 -0
  96. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/contracted_endpoint/__init__.py +0 -0
  97. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/contracted_endpoint/mutations.py +0 -0
  98. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/contracted_endpoint/queries.py +0 -0
  99. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/contracted_endpoint/subscriptions.py +0 -0
  100. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/contracted_endpoint/types.py +0 -0
  101. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/cql_metadata/__init__.py +0 -0
  102. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/cql_metadata/mutations.py +0 -0
  103. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/cql_metadata/queries.py +0 -0
  104. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/cql_metadata/subscriptions.py +0 -0
  105. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/cql_metadata/types.py +0 -0
  106. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/datasources/__init__.py +0 -0
  107. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/datasources/mutations.py +0 -0
  108. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/datasources/queries.py +0 -0
  109. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/datasources/subscriptions.py +0 -0
  110. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/datasources/types.py +0 -0
  111. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/detector_registry/__init__.py +0 -0
  112. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/detector_registry/mutations.py +0 -0
  113. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/detector_registry/queries.py +0 -0
  114. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/detector_registry/subscriptions.py +0 -0
  115. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/detector_registry/types.py +0 -0
  116. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/endpoint_command_manager/__init__.py +0 -0
  117. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/endpoint_command_manager/mutations.py +0 -0
  118. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/endpoint_command_manager/queries.py +0 -0
  119. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/endpoint_command_manager/subscriptions.py +0 -0
  120. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/endpoint_command_manager/types.py +0 -0
  121. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/endpoint_management_service/__init__.py +0 -0
  122. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/endpoint_management_service/mutations.py +0 -0
  123. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/endpoint_management_service/queries.py +0 -0
  124. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/endpoint_management_service/subscriptions.py +0 -0
  125. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/endpoint_management_service/types.py +0 -0
  126. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/entity_context/__init__.py +0 -0
  127. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/entity_context/mutations.py +0 -0
  128. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/entity_context/queries.py +0 -0
  129. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/entity_context/subscriptions.py +0 -0
  130. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/entity_context/types.py +0 -0
  131. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/event_search/__init__.py +0 -0
  132. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/event_search/mutations.py +0 -0
  133. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/event_search/queries.py +0 -0
  134. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/event_search/subscriptions.py +0 -0
  135. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/event_search/types.py +0 -0
  136. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/events/__init__.py +0 -0
  137. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/events/mutations.py +0 -0
  138. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/events/queries.py +0 -0
  139. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/events/subscriptions.py +0 -0
  140. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/events/types.py +0 -0
  141. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/exports/__init__.py +0 -0
  142. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/exports/mutations.py +0 -0
  143. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/exports/queries.py +0 -0
  144. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/exports/subscriptions.py +0 -0
  145. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/exports/types.py +0 -0
  146. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/fast_ioc/__init__.py +0 -0
  147. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/fast_ioc/mutations.py +0 -0
  148. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/fast_ioc/queries.py +0 -0
  149. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/fast_ioc/subscriptions.py +0 -0
  150. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/fast_ioc/types.py +0 -0
  151. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/file_info/__init__.py +0 -0
  152. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/file_info/mutations.py +0 -0
  153. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/file_info/queries.py +0 -0
  154. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/file_info/subscriptions.py +0 -0
  155. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/file_info/types.py +0 -0
  156. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/ingest_stats/__init__.py +0 -0
  157. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/ingest_stats/mutations.py +0 -0
  158. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/ingest_stats/queries.py +0 -0
  159. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/ingest_stats/subscriptions.py +0 -0
  160. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/ingest_stats/types.py +0 -0
  161. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/investigations/__init__.py +0 -0
  162. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/investigations/mutations.py +0 -0
  163. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/investigations/queries.py +0 -0
  164. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/investigations/subscriptions.py +0 -0
  165. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/investigations/types.py +0 -0
  166. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/investigations2/__init__.py +0 -0
  167. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/investigations2/mutations.py +0 -0
  168. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/investigations2/queries.py +0 -0
  169. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/investigations2/subscriptions.py +0 -0
  170. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/investigations2/types.py +0 -0
  171. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/isensor/__init__.py +0 -0
  172. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/isensor/mutations.py +0 -0
  173. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/isensor/queries.py +0 -0
  174. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/isensor/subscriptions.py +0 -0
  175. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/isensor/types.py +0 -0
  176. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/mitre_attack_info/__init__.py +0 -0
  177. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/mitre_attack_info/mutations.py +0 -0
  178. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/mitre_attack_info/queries.py +0 -0
  179. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/mitre_attack_info/subscriptions.py +0 -0
  180. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/mitre_attack_info/types.py +0 -0
  181. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/multi_tenant_context/__init__.py +0 -0
  182. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/multi_tenant_context/mutations.py +0 -0
  183. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/multi_tenant_context/queries.py +0 -0
  184. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/multi_tenant_context/subscriptions.py +0 -0
  185. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/multi_tenant_context/types.py +0 -0
  186. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/multi_tenant_ioc/__init__.py +0 -0
  187. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/multi_tenant_ioc/mutations.py +0 -0
  188. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/multi_tenant_ioc/queries.py +0 -0
  189. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/multi_tenant_ioc/subscriptions.py +0 -0
  190. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/multi_tenant_ioc/types.py +0 -0
  191. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/nl_search/__init__.py +0 -0
  192. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/nl_search/mutations.py +0 -0
  193. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/nl_search/queries.py +0 -0
  194. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/nl_search/subscriptions.py +0 -0
  195. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/nl_search/types.py +0 -0
  196. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/notebooks/__init__.py +0 -0
  197. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/notebooks/mutations.py +0 -0
  198. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/notebooks/queries.py +0 -0
  199. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/notebooks/subscriptions.py +0 -0
  200. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/notebooks/types.py +0 -0
  201. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/notifications/__init__.py +0 -0
  202. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/notifications/mutations.py +0 -0
  203. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/notifications/queries.py +0 -0
  204. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/notifications/subscriptions.py +0 -0
  205. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/notifications/types.py +0 -0
  206. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/preferences/__init__.py +0 -0
  207. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/preferences/mutations.py +0 -0
  208. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/preferences/queries.py +0 -0
  209. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/preferences/subscriptions.py +0 -0
  210. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/preferences/types.py +0 -0
  211. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/process_trees/__init__.py +0 -0
  212. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/process_trees/mutations.py +0 -0
  213. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/process_trees/queries.py +0 -0
  214. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/process_trees/subscriptions.py +0 -0
  215. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/process_trees/types.py +0 -0
  216. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/queries/__init__.py +0 -0
  217. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/queries/mutations.py +0 -0
  218. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/queries/queries.py +0 -0
  219. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/queries/subscriptions.py +0 -0
  220. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/queries/types.py +0 -0
  221. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/roadrunner/__init__.py +0 -0
  222. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/roadrunner/mutations.py +0 -0
  223. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/roadrunner/queries.py +0 -0
  224. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/roadrunner/subscriptions.py +0 -0
  225. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/roadrunner/types.py +0 -0
  226. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/rules/__init__.py +0 -0
  227. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/rules/mutations.py +0 -0
  228. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/rules/queries.py +0 -0
  229. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/rules/subscriptions.py +0 -0
  230. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/rules/types.py +0 -0
  231. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/sharelinks/__init__.py +0 -0
  232. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/sharelinks/mutations.py +0 -0
  233. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/sharelinks/queries.py +0 -0
  234. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/sharelinks/subscriptions.py +0 -0
  235. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/sharelinks/types.py +0 -0
  236. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/subjects/__init__.py +0 -0
  237. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/subjects/mutations.py +0 -0
  238. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/subjects/queries.py +0 -0
  239. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/subjects/subscriptions.py +0 -0
  240. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/subjects/types.py +0 -0
  241. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/tenant_profiles/__init__.py +0 -0
  242. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/tenant_profiles/mutations.py +0 -0
  243. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/tenant_profiles/queries.py +0 -0
  244. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/tenant_profiles/subscriptions.py +0 -0
  245. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/tenant_profiles/types.py +0 -0
  246. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/tenants/__init__.py +0 -0
  247. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/tenants/mutations.py +0 -0
  248. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/tenants/queries.py +0 -0
  249. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/tenants/subscriptions.py +0 -0
  250. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/tenants/types.py +0 -0
  251. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/tenants4/__init__.py +0 -0
  252. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/tenants4/mutations.py +0 -0
  253. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/tenants4/queries.py +0 -0
  254. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/tenants4/subscriptions.py +0 -0
  255. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/tenants4/types.py +0 -0
  256. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/threat/__init__.py +0 -0
  257. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/threat/mutations.py +0 -0
  258. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/threat/queries.py +0 -0
  259. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/threat/subscriptions.py +0 -0
  260. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/threat/types.py +0 -0
  261. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/threat_score/__init__.py +0 -0
  262. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/threat_score/mutations.py +0 -0
  263. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/threat_score/queries.py +0 -0
  264. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/threat_score/subscriptions.py +0 -0
  265. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/threat_score/types.py +0 -0
  266. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/trigger_action/__init__.py +0 -0
  267. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/trigger_action/mutations.py +0 -0
  268. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/trigger_action/queries.py +0 -0
  269. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/trigger_action/subscriptions.py +0 -0
  270. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/trigger_action/types.py +0 -0
  271. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/trip/__init__.py +0 -0
  272. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/trip/mutations.py +0 -0
  273. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/trip/queries.py +0 -0
  274. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/trip/subscriptions.py +0 -0
  275. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/trip/types.py +0 -0
  276. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/users/__init__.py +0 -0
  277. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/users/mutations.py +0 -0
  278. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/users/queries.py +0 -0
  279. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/users/subscriptions.py +0 -0
  280. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/users/types.py +0 -0
  281. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/vdr/__init__.py +0 -0
  282. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/vdr/mutations.py +0 -0
  283. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/vdr/queries.py +0 -0
  284. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/vdr/subscriptions.py +0 -0
  285. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/vdr/types.py +0 -0
  286. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/xdr_central_connector/__init__.py +0 -0
  287. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/xdr_central_connector/mutations.py +0 -0
  288. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/xdr_central_connector/queries.py +0 -0
  289. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/xdr_central_connector/subscriptions.py +0 -0
  290. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/services/xdr_central_connector/types.py +0 -0
  291. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/templates/__init__.py +0 -0
  292. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/tokens.py +0 -0
  293. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/transport/__init__.py +0 -0
  294. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/transport/aiohttp_websockets.py +0 -0
  295. {taegis_sdk_python-1.6.0 → taegis_sdk_python-1.6.1}/taegis_sdk_python/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: taegis-sdk-python
3
- Version: 1.6.0
3
+ Version: 1.6.1
4
4
  Summary: Taegis Python SDK
5
5
  Project-URL: Homepage, https://github.com/secureworks/taegis-sdk-python
6
6
  Project-URL: Bug Reports, https://github.com/secureworks/taegis-sdk-python/issues
@@ -194,6 +194,7 @@ Classifier: Programming Language :: Python :: 3.12
194
194
  Classifier: Programming Language :: Python :: 3.13
195
195
  Requires-Python: >=3.9
196
196
  Requires-Dist: aiohttp
197
+ Requires-Dist: backoff
197
198
  Requires-Dist: dataclasses-json
198
199
  Requires-Dist: filelock>=3.12.4
199
200
  Requires-Dist: gql<4,>=3.5.0
@@ -34,6 +34,7 @@ dependencies = [
34
34
  "requests-toolbelt",
35
35
  "websockets",
36
36
  "jinja2",
37
+ "backoff",
37
38
  ]
38
39
 
39
40
  [project.optional-dependencies]
@@ -1,3 +1,3 @@
1
1
  """Version idenitier."""
2
2
 
3
- __version__ = "1.6.0"
3
+ __version__ = "1.6.1"
@@ -0,0 +1,6 @@
1
+ """Taegis SDK Middlewares."""
2
+
3
+ from taegis_sdk_python.middlewares.logging import headers_logging_middleware
4
+ from taegis_sdk_python.middlewares.retry import retry_middleware
5
+
6
+ __all__ = ["headers_logging_middleware", "retry_middleware"]
@@ -0,0 +1,5 @@
1
+ """Taegis SDK Logging Middlewares."""
2
+
3
+ from ._default import headers_logging_middleware
4
+
5
+ __all__ = ["headers_logging_middleware"]
@@ -0,0 +1,31 @@
1
+ """Taegis SDK Logging Middlewares."""
2
+
3
+ import logging
4
+
5
+ from aiohttp import ClientHandlerType, ClientRequest, ClientResponse
6
+
7
+ from taegis_sdk_python.middlewares.utils import scrub_dict
8
+
9
+ log = logging.getLogger(__name__)
10
+
11
+
12
+ async def headers_logging_middleware(
13
+ req: ClientRequest, handler: ClientHandlerType
14
+ ) -> ClientResponse:
15
+ """Debug Log AIOHTTP Request and Response Headers. Remove access tokens from headers and values.
16
+
17
+ Parameters
18
+ ----------
19
+ req : ClientRequest
20
+ handler : ClientHandlerType
21
+
22
+ Returns
23
+ -------
24
+ ClientResponse
25
+ """
26
+ headers = scrub_dict(req.headers)
27
+ log.debug(f"Request Headers: {headers}")
28
+ resp = await handler(req)
29
+ headers = scrub_dict(resp.headers)
30
+ log.debug(f"Response Headers: {headers}")
31
+ return resp
@@ -0,0 +1,5 @@
1
+ """Taegis SDK Retry Middlewares."""
2
+
3
+ from ._default import retry_middleware
4
+
5
+ __all__ = ["retry_middleware"]
@@ -0,0 +1,80 @@
1
+ """Taegis SDK Retry Middlewares."""
2
+
3
+ from http import HTTPStatus
4
+ from typing import Optional
5
+
6
+ import backoff
7
+ from aiohttp import ClientHandlerType, ClientRequest, ClientResponse
8
+
9
+ from taegis_sdk_python.config import get_config
10
+
11
+ SECTION = "backoff.retry"
12
+
13
+
14
+ def config_max_time() -> Optional[int]:
15
+ """Provide Max Time elapsed for retry.
16
+
17
+ Returns
18
+ -------
19
+ int
20
+ Seconds.
21
+ """
22
+ config = get_config()
23
+
24
+ return config.getint(SECTION, "max_time", fallback=10)
25
+
26
+
27
+ def config_max_tries() -> Optional[int]:
28
+ """Provide Max Tries for retry.
29
+
30
+ Returns
31
+ -------
32
+ Optional[int]
33
+ Max tries.
34
+ """
35
+ config = get_config()
36
+
37
+ return config.getint(SECTION, "max_tries", fallback=None)
38
+
39
+
40
+ @backoff.on_predicate(
41
+ backoff.runtime,
42
+ predicate=lambda r: r.status == HTTPStatus.TOO_MANY_REQUESTS,
43
+ value=lambda r: int(r.headers.get("Retry-After")),
44
+ max_time=config_max_time,
45
+ max_tries=config_max_tries,
46
+ )
47
+ @backoff.on_predicate(
48
+ backoff.expo,
49
+ lambda r: r.status
50
+ in (
51
+ HTTPStatus.REQUEST_TIMEOUT,
52
+ HTTPStatus.INTERNAL_SERVER_ERROR,
53
+ HTTPStatus.BAD_GATEWAY,
54
+ HTTPStatus.SERVICE_UNAVAILABLE,
55
+ HTTPStatus.GATEWAY_TIMEOUT,
56
+ ),
57
+ max_time=config_max_time,
58
+ max_tries=config_max_tries,
59
+ )
60
+ async def retry_middleware(
61
+ req: ClientRequest, handler: ClientHandlerType
62
+ ) -> ClientResponse:
63
+ """Retry HTTP requests middleware.
64
+
65
+ Retry on exponential backoff for REQUEST_TIMEOUT (408), INTERNAL_SERVER_ERROR (500),
66
+ BAD_GATEWAY (502), SERVICE_UNAVAILABLE (503), GATEWAY_TIMEOUT (504).
67
+
68
+ If TOO_MANY_REQUESTS (429) is encounted, the value in the "Retry-After" header
69
+ will be used as the backoff timer.
70
+
71
+ Parameters
72
+ ----------
73
+ req : ClientRequest
74
+ handler : ClientHandlerType
75
+
76
+ Returns
77
+ -------
78
+ ClientResponse
79
+ """
80
+ return await handler(req)
@@ -0,0 +1,39 @@
1
+ """Taegis SDK Python Middlewares Utilities."""
2
+
3
+ from collections.abc import Mapping
4
+ from typing import List
5
+
6
+ from taegis_sdk_python.config import get_config
7
+
8
+
9
+ def get_access_tokens() -> List[str]:
10
+ """Retrieve all cached access tokens."""
11
+ config = get_config()
12
+
13
+ tokens = []
14
+ for section in config.sections():
15
+ if token := config.get(section, "access_token", fallback=None):
16
+ tokens.append(token)
17
+
18
+ return tokens
19
+
20
+
21
+ def scrub_dict(d: Mapping):
22
+ """Remove sensitive data from dictionary keys and values."""
23
+ access_tokens = get_access_tokens()
24
+
25
+ if "authorization" in d:
26
+ token = d["Authorization"].replace("Bearer ")
27
+ access_tokens.append(token)
28
+
29
+ scrubbed = d.copy()
30
+ for k, v in d.items():
31
+ if isinstance(k, str):
32
+ for token in access_tokens:
33
+ k = k.replace(token, "<redacted>")
34
+ if isinstance(v, str):
35
+ for token in access_tokens:
36
+ v = v.replace(token, "<redacted>")
37
+ scrubbed[k] = v
38
+
39
+ return scrubbed
@@ -209,7 +209,10 @@ class ServiceCore:
209
209
  @property
210
210
  def sync_client(self) -> Client:
211
211
  """GraphQL Synchronous Transport with Client."""
212
- client_session_args = {"trust_env": self.service.trust_env}
212
+ client_session_args = {
213
+ "trust_env": self.service.trust_env,
214
+ "middlewares": self.service.middlewares,
215
+ }
213
216
 
214
217
  transport = AIOHTTPTransport(
215
218
  f"{self.sync_url}{self.gateway}",
@@ -246,7 +249,10 @@ class ServiceCore:
246
249
  if self.service.tenant_id:
247
250
  subprotocols.append(f"x-tenant-context-{self.service.tenant_id}")
248
251
 
249
- client_session_args = {"trust_env": self.service.trust_env}
252
+ client_session_args = {
253
+ "trust_env": self.service.trust_env,
254
+ "middlewares": self.service.middlewares,
255
+ }
250
256
 
251
257
  transport = AIOHTTPWebsocketsTransport(
252
258
  f"{self.wss_url}{self.gateway}",
@@ -483,11 +489,13 @@ class ServiceCore:
483
489
  """
484
490
  extra_args = {}
485
491
  if self.service.proxy:
486
- extra_args = {
487
- "proxy": self.service.proxy,
488
- "proxy_auth": self.service.proxy_auth,
489
- "proxy_headers": self.service.proxy_headers,
490
- }
492
+ extra_args.update(
493
+ {
494
+ "proxy": self.service.proxy,
495
+ "proxy_auth": self.service.proxy_auth,
496
+ "proxy_headers": self.service.proxy_headers,
497
+ }
498
+ )
491
499
 
492
500
  query = gql(query_string)
493
501
  return await self.sync_client.execute_async(
@@ -84,7 +84,7 @@ log = logging.getLogger(__name__)
84
84
  class GraphQLService:
85
85
  """Taegis GraphQL Service manager."""
86
86
 
87
- def __init__(
87
+ def __init__( # pylint: disable=too-many-locals
88
88
  self,
89
89
  *,
90
90
  environment: Optional[str] = None,
@@ -101,6 +101,7 @@ class GraphQLService:
101
101
  execute_timeout: Optional[Union[int, float]] = 300,
102
102
  max_message_size: int = 0,
103
103
  use_universal_authentication: bool = False,
104
+ middlewares=None,
104
105
  ): # pylint: disable=too-many-statements
105
106
  """
106
107
  GraphQLService
@@ -175,6 +176,7 @@ class GraphQLService:
175
176
 
176
177
  self._execute_timeout = execute_timeout
177
178
  self._max_message_size = max_message_size
179
+ self._middlewares = middlewares or ()
178
180
 
179
181
  self._access_points = None
180
182
  self._agent = None
@@ -424,6 +426,11 @@ class GraphQLService:
424
426
  """GraphQL Execute Timeout."""
425
427
  return self._context_manager.get("execute_timeout", self._execute_timeout)
426
428
 
429
+ @property
430
+ def middlewares(self):
431
+ """Transport Middleware handlers."""
432
+ return self._context_manager.get("middlewares", self._middlewares)
433
+
427
434
  @property
428
435
  def access_points(self):
429
436
  """Access Points Service Endpoint."""
@@ -24,13 +24,16 @@ def escape_value(value):
24
24
  # Filters
25
25
 
26
26
 
27
- def filter_or(value: List[str], field_name: str, operator: str = "="):
27
+ def filter_or(value: List[str], field_name: str = None, operator: str = "="):
28
28
  """Format values for Taegis QL OR statement."""
29
29
  if not isinstance(value, list):
30
30
  raise ValueError("Input is not list.")
31
31
 
32
32
  return " OR ".join(
33
- [f"{field_name} {operator} {escape_value(item)}" for item in value]
33
+ [
34
+ f"{field_name} {operator} {escape_value(item)}" if field_name else value
35
+ for item in value
36
+ ]
34
37
  )
35
38
 
36
39