sift-stack-py 0.17.1__tar.gz → 0.18.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (612) hide show
  1. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/PKG-INFO +11 -6
  2. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/transport.py +5 -20
  3. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/_test_results_log.py +16 -4
  4. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/ingestion.py +94 -60
  5. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/test_results.py +118 -31
  6. sift_stack_py-0.18.0/lib/sift_client/_internal/pyproject_config.py +84 -0
  7. sift_stack_py-0.18.0/lib/sift_client/_internal/pytest_plugin/audit_log.py +286 -0
  8. sift_stack_py-0.18.0/lib/sift_client/_internal/pytest_plugin/modes.py +68 -0
  9. sift_stack_py-0.18.0/lib/sift_client/_internal/pytest_plugin/options.py +651 -0
  10. sift_stack_py-0.18.0/lib/sift_client/_internal/pytest_plugin/report.py +619 -0
  11. sift_stack_py-0.18.0/lib/sift_client/_internal/pytest_plugin/steps.py +820 -0
  12. sift_stack_py-0.18.0/lib/sift_client/_internal/pytest_plugin/terminal.py +246 -0
  13. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/rest.py +2 -2
  14. sift_stack_py-0.18.0/lib/sift_client/_internal/urls.py +55 -0
  15. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/client.py +32 -0
  16. sift_stack_py-0.18.0/lib/sift_client/pytest_plugin.py +710 -0
  17. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/__init__.py +9 -1
  18. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/ingestion.py +281 -19
  19. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/reports.py +12 -2
  20. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/runs.py +16 -7
  21. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/sync_stubs/__init__.pyi +26 -9
  22. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/test_results.py +17 -9
  23. sift_stack_py-0.18.0/lib/sift_client/scripts/import_test_result_log.py +144 -0
  24. sift_stack_py-0.18.0/lib/sift_client/sift_types/_mixins/metadata.py +19 -0
  25. sift_stack_py-0.18.0/lib/sift_client/sift_types/_mixins/simulated.py +32 -0
  26. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/asset.py +2 -0
  27. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/report.py +2 -0
  28. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/run.py +2 -0
  29. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/test_report.py +48 -3
  30. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/transport/base_connection.py +6 -0
  31. sift_stack_py-0.18.0/lib/sift_client/util/test_results/__init__.py +155 -0
  32. sift_stack_py-0.18.0/lib/sift_client/util/test_results/bounds.py +152 -0
  33. sift_stack_py-0.18.0/lib/sift_client/util/test_results/context_manager.py +1197 -0
  34. sift_stack_py-0.18.0/lib/sift_py/yaml/__init__.py +0 -0
  35. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_stack_py.egg-info/PKG-INFO +11 -6
  36. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_stack_py.egg-info/SOURCES.txt +12 -1
  37. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_stack_py.egg-info/requires.txt +12 -5
  38. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/pyproject.toml +39 -8
  39. sift_stack_py-0.17.1/lib/sift_client/scripts/import_test_result_log.py +0 -93
  40. sift_stack_py-0.17.1/lib/sift_client/util/test_results/__init__.py +0 -126
  41. sift_stack_py-0.17.1/lib/sift_client/util/test_results/bounds.py +0 -83
  42. sift_stack_py-0.17.1/lib/sift_client/util/test_results/context_manager.py +0 -633
  43. sift_stack_py-0.17.1/lib/sift_client/util/test_results/pytest_util.py +0 -206
  44. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/LICENSE +0 -0
  45. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/README.md +0 -0
  46. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/__init__.py +0 -0
  47. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotation_logs/__init__.py +0 -0
  48. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotation_logs/v1/__init__.py +0 -0
  49. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotation_logs/v1/annotation_logs_pb2.py +0 -0
  50. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotation_logs/v1/annotation_logs_pb2.pyi +0 -0
  51. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotation_logs/v1/annotation_logs_pb2_grpc.py +0 -0
  52. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotation_logs/v1/annotation_logs_pb2_grpc.pyi +0 -0
  53. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotations/__init__.py +0 -0
  54. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotations/v1/__init__.py +0 -0
  55. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotations/v1/annotations_pb2.py +0 -0
  56. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotations/v1/annotations_pb2.pyi +0 -0
  57. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotations/v1/annotations_pb2_grpc.py +0 -0
  58. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotations/v1/annotations_pb2_grpc.pyi +0 -0
  59. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/api_keys/__init__.py +0 -0
  60. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/api_keys/v2/__init__.py +0 -0
  61. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/api_keys/v2/api_keys_pb2.py +0 -0
  62. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/api_keys/v2/api_keys_pb2.pyi +0 -0
  63. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/api_keys/v2/api_keys_pb2_grpc.py +0 -0
  64. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/api_keys/v2/api_keys_pb2_grpc.pyi +0 -0
  65. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/assets/__init__.py +0 -0
  66. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/assets/v1/__init__.py +0 -0
  67. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/assets/v1/assets_pb2.py +0 -0
  68. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/assets/v1/assets_pb2.pyi +0 -0
  69. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/assets/v1/assets_pb2_grpc.py +0 -0
  70. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/assets/v1/assets_pb2_grpc.pyi +0 -0
  71. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/__init__.py +0 -0
  72. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/v1/__init__.py +0 -0
  73. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/v1/calculated_channels_pb2.py +0 -0
  74. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/v1/calculated_channels_pb2.pyi +0 -0
  75. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/v1/calculated_channels_pb2_grpc.py +0 -0
  76. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/v1/calculated_channels_pb2_grpc.pyi +0 -0
  77. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/v2/__init__.py +0 -0
  78. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/v2/calculated_channels_pb2.py +0 -0
  79. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/v2/calculated_channels_pb2.pyi +0 -0
  80. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/v2/calculated_channels_pb2_grpc.py +0 -0
  81. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/v2/calculated_channels_pb2_grpc.pyi +0 -0
  82. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/campaigns/__init__.py +0 -0
  83. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/campaigns/v1/__init__.py +0 -0
  84. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/campaigns/v1/campaigns_pb2.py +0 -0
  85. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/campaigns/v1/campaigns_pb2.pyi +0 -0
  86. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/campaigns/v1/campaigns_pb2_grpc.py +0 -0
  87. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/campaigns/v1/campaigns_pb2_grpc.pyi +0 -0
  88. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/__init__.py +0 -0
  89. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/v1/__init__.py +0 -0
  90. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/v1/channel_schemas_pb2.py +0 -0
  91. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/v1/channel_schemas_pb2.pyi +0 -0
  92. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/v1/channel_schemas_pb2_grpc.py +0 -0
  93. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/v1/channel_schemas_pb2_grpc.pyi +0 -0
  94. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/v2/__init__.py +0 -0
  95. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/v2/channel_schemas_pb2.py +0 -0
  96. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/v2/channel_schemas_pb2.pyi +0 -0
  97. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/v2/channel_schemas_pb2_grpc.py +0 -0
  98. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/v2/channel_schemas_pb2_grpc.pyi +0 -0
  99. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/__init__.py +0 -0
  100. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/v2/__init__.py +0 -0
  101. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/v2/channels_pb2.py +0 -0
  102. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/v2/channels_pb2.pyi +0 -0
  103. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/v2/channels_pb2_grpc.py +0 -0
  104. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/v2/channels_pb2_grpc.pyi +0 -0
  105. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/v3/__init__.py +0 -0
  106. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/v3/channels_pb2.py +0 -0
  107. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/v3/channels_pb2.pyi +0 -0
  108. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/v3/channels_pb2_grpc.py +0 -0
  109. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/v3/channels_pb2_grpc.pyi +0 -0
  110. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/comment/__init__.py +0 -0
  111. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/comment/v1/__init__.py +0 -0
  112. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/comment/v1/comment_pb2.py +0 -0
  113. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/comment/v1/comment_pb2.pyi +0 -0
  114. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/comment/v1/comment_pb2_grpc.py +0 -0
  115. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/comment/v1/comment_pb2_grpc.pyi +0 -0
  116. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/__init__.py +0 -0
  117. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/__init__.py +0 -0
  118. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/__init__.py +0 -0
  119. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/calculated_channels_pb2.py +0 -0
  120. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/calculated_channels_pb2.pyi +0 -0
  121. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/calculated_channels_pb2_grpc.py +0 -0
  122. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/calculated_channels_pb2_grpc.pyi +0 -0
  123. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_bit_field_element_pb2.py +0 -0
  124. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_bit_field_element_pb2.pyi +0 -0
  125. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_bit_field_element_pb2_grpc.py +0 -0
  126. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_bit_field_element_pb2_grpc.pyi +0 -0
  127. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_config_pb2.py +0 -0
  128. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_config_pb2.pyi +0 -0
  129. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_config_pb2_grpc.py +0 -0
  130. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_config_pb2_grpc.pyi +0 -0
  131. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_data_type_pb2.py +0 -0
  132. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_data_type_pb2.pyi +0 -0
  133. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_data_type_pb2_grpc.py +0 -0
  134. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_data_type_pb2_grpc.pyi +0 -0
  135. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_enum_type_pb2.py +0 -0
  136. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_enum_type_pb2.pyi +0 -0
  137. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_enum_type_pb2_grpc.py +0 -0
  138. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_enum_type_pb2_grpc.pyi +0 -0
  139. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/organization_pb2.py +0 -0
  140. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/organization_pb2.pyi +0 -0
  141. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/organization_pb2_grpc.py +0 -0
  142. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/organization_pb2_grpc.pyi +0 -0
  143. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/resource_identifier_pb2.py +0 -0
  144. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/resource_identifier_pb2.pyi +0 -0
  145. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/resource_identifier_pb2_grpc.py +0 -0
  146. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/resource_identifier_pb2_grpc.pyi +0 -0
  147. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/resource_ref_pb2.py +0 -0
  148. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/resource_ref_pb2.pyi +0 -0
  149. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/resource_ref_pb2_grpc.py +0 -0
  150. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/resource_ref_pb2_grpc.pyi +0 -0
  151. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/user_defined_functions_pb2.py +0 -0
  152. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/user_defined_functions_pb2.pyi +0 -0
  153. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/user_defined_functions_pb2_grpc.py +0 -0
  154. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/user_defined_functions_pb2_grpc.pyi +0 -0
  155. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/user_pb2.py +0 -0
  156. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/user_pb2.pyi +0 -0
  157. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/user_pb2_grpc.py +0 -0
  158. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/user_pb2_grpc.pyi +0 -0
  159. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/__init__.py +0 -0
  160. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/action_type_pb2.py +0 -0
  161. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/action_type_pb2.pyi +0 -0
  162. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/action_type_pb2_grpc.py +0 -0
  163. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/action_type_pb2_grpc.pyi +0 -0
  164. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/filter_field_pb2.py +0 -0
  165. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/filter_field_pb2.pyi +0 -0
  166. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/filter_field_pb2_grpc.py +0 -0
  167. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/filter_field_pb2_grpc.pyi +0 -0
  168. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/resource_type_pb2.py +0 -0
  169. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/resource_type_pb2.pyi +0 -0
  170. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/resource_type_pb2_grpc.py +0 -0
  171. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/resource_type_pb2_grpc.pyi +0 -0
  172. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/__init__.py +0 -0
  173. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/v1/__init__.py +0 -0
  174. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/v1/data_pb2.py +0 -0
  175. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/v1/data_pb2.pyi +0 -0
  176. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/v1/data_pb2_grpc.py +0 -0
  177. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/v1/data_pb2_grpc.pyi +0 -0
  178. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/v2/__init__.py +0 -0
  179. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/v2/data_pb2.py +0 -0
  180. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/v2/data_pb2.pyi +0 -0
  181. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/v2/data_pb2_grpc.py +0 -0
  182. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/v2/data_pb2_grpc.pyi +0 -0
  183. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data_imports/__init__.py +0 -0
  184. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data_imports/v2/__init__.py +0 -0
  185. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data_imports/v2/data_imports_pb2.py +0 -0
  186. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data_imports/v2/data_imports_pb2.pyi +0 -0
  187. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data_imports/v2/data_imports_pb2_grpc.py +0 -0
  188. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data_imports/v2/data_imports_pb2_grpc.pyi +0 -0
  189. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/dlq_errors/__init__.py +0 -0
  190. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/dlq_errors/v2/__init__.py +0 -0
  191. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/dlq_errors/v2/dlq_errors_pb2.py +0 -0
  192. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/dlq_errors/v2/dlq_errors_pb2.pyi +0 -0
  193. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/dlq_errors/v2/dlq_errors_pb2_grpc.py +0 -0
  194. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/dlq_errors/v2/dlq_errors_pb2_grpc.pyi +0 -0
  195. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/exports/__init__.py +0 -0
  196. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/exports/v1/__init__.py +0 -0
  197. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/exports/v1/exports_pb2.py +0 -0
  198. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/exports/v1/exports_pb2.pyi +0 -0
  199. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/exports/v1/exports_pb2_grpc.py +0 -0
  200. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/exports/v1/exports_pb2_grpc.pyi +0 -0
  201. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/external_sync/__init__.py +0 -0
  202. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/external_sync/v1/__init__.py +0 -0
  203. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/external_sync/v1/external_sync_pb2.py +0 -0
  204. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/external_sync/v1/external_sync_pb2.pyi +0 -0
  205. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/external_sync/v1/external_sync_pb2_grpc.py +0 -0
  206. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/external_sync/v1/external_sync_pb2_grpc.pyi +0 -0
  207. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingest/__init__.py +0 -0
  208. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingest/v1/__init__.py +0 -0
  209. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingest/v1/ingest_pb2.py +0 -0
  210. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingest/v1/ingest_pb2.pyi +0 -0
  211. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingest/v1/ingest_pb2_grpc.py +0 -0
  212. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingest/v1/ingest_pb2_grpc.pyi +0 -0
  213. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/__init__.py +0 -0
  214. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/v1/__init__.py +0 -0
  215. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/v1/ingestion_configs_pb2.py +0 -0
  216. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/v1/ingestion_configs_pb2.pyi +0 -0
  217. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/v1/ingestion_configs_pb2_grpc.py +0 -0
  218. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/v1/ingestion_configs_pb2_grpc.pyi +0 -0
  219. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/v2/__init__.py +0 -0
  220. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/v2/ingestion_configs_pb2.py +0 -0
  221. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/v2/ingestion_configs_pb2.pyi +0 -0
  222. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/v2/ingestion_configs_pb2_grpc.py +0 -0
  223. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/v2/ingestion_configs_pb2_grpc.pyi +0 -0
  224. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/jobs/__init__.py +0 -0
  225. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/jobs/v1/__init__.py +0 -0
  226. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/jobs/v1/jobs_pb2.py +0 -0
  227. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/jobs/v1/jobs_pb2.pyi +0 -0
  228. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/jobs/v1/jobs_pb2_grpc.py +0 -0
  229. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/jobs/v1/jobs_pb2_grpc.pyi +0 -0
  230. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/me/__init__.py +0 -0
  231. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/me/v2/__init__.py +0 -0
  232. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/me/v2/me_pb2.py +0 -0
  233. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/me/v2/me_pb2.pyi +0 -0
  234. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/me/v2/me_pb2_grpc.py +0 -0
  235. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/me/v2/me_pb2_grpc.pyi +0 -0
  236. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/metadata/__init__.py +0 -0
  237. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/metadata/v1/__init__.py +0 -0
  238. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/metadata/v1/metadata_pb2.py +0 -0
  239. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/metadata/v1/metadata_pb2.pyi +0 -0
  240. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/metadata/v1/metadata_pb2_grpc.py +0 -0
  241. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/metadata/v1/metadata_pb2_grpc.pyi +0 -0
  242. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/notifications/__init__.py +0 -0
  243. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/notifications/v1/__init__.py +0 -0
  244. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/notifications/v1/notifications_pb2.py +0 -0
  245. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/notifications/v1/notifications_pb2.pyi +0 -0
  246. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/notifications/v1/notifications_pb2_grpc.py +0 -0
  247. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/notifications/v1/notifications_pb2_grpc.pyi +0 -0
  248. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/panel_configurations/__init__.py +0 -0
  249. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/panel_configurations/v1/__init__.py +0 -0
  250. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/panel_configurations/v1/panel_configuration_pb2.py +0 -0
  251. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/panel_configurations/v1/panel_configuration_pb2.pyi +0 -0
  252. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/panel_configurations/v1/panel_configuration_pb2_grpc.py +0 -0
  253. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/panel_configurations/v1/panel_configuration_pb2_grpc.pyi +0 -0
  254. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ping/__init__.py +0 -0
  255. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ping/v1/__init__.py +0 -0
  256. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ping/v1/ping_pb2.py +0 -0
  257. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ping/v1/ping_pb2.pyi +0 -0
  258. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ping/v1/ping_pb2_grpc.py +0 -0
  259. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ping/v1/ping_pb2_grpc.pyi +0 -0
  260. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/policies/__init__.py +0 -0
  261. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/policies/v1/__init__.py +0 -0
  262. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/policies/v1/policies_pb2.py +0 -0
  263. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/policies/v1/policies_pb2.pyi +0 -0
  264. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/policies/v1/policies_pb2_grpc.py +0 -0
  265. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/policies/v1/policies_pb2_grpc.pyi +0 -0
  266. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/principal_attributes/__init__.py +0 -0
  267. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/principal_attributes/v1/__init__.py +0 -0
  268. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/principal_attributes/v1/principal_attributes_pb2.py +0 -0
  269. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/principal_attributes/v1/principal_attributes_pb2.pyi +0 -0
  270. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/principal_attributes/v1/principal_attributes_pb2_grpc.py +0 -0
  271. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/principal_attributes/v1/principal_attributes_pb2_grpc.pyi +0 -0
  272. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/protobuf_descriptors/__init__.py +0 -0
  273. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/protobuf_descriptors/v2/__init__.py +0 -0
  274. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/protobuf_descriptors/v2/channel_parsing_options_pb2.py +0 -0
  275. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/protobuf_descriptors/v2/channel_parsing_options_pb2.pyi +0 -0
  276. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/protobuf_descriptors/v2/channel_parsing_options_pb2_grpc.py +0 -0
  277. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/protobuf_descriptors/v2/channel_parsing_options_pb2_grpc.pyi +0 -0
  278. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/protobuf_descriptors/v2/protobuf_descriptors_pb2.py +0 -0
  279. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/protobuf_descriptors/v2/protobuf_descriptors_pb2.pyi +0 -0
  280. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/protobuf_descriptors/v2/protobuf_descriptors_pb2_grpc.py +0 -0
  281. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/protobuf_descriptors/v2/protobuf_descriptors_pb2_grpc.pyi +0 -0
  282. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/py.typed +0 -0
  283. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/remote_files/__init__.py +0 -0
  284. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/remote_files/v1/__init__.py +0 -0
  285. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/remote_files/v1/remote_files_pb2.py +0 -0
  286. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/remote_files/v1/remote_files_pb2.pyi +0 -0
  287. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/remote_files/v1/remote_files_pb2_grpc.py +0 -0
  288. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/remote_files/v1/remote_files_pb2_grpc.pyi +0 -0
  289. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/report_templates/__init__.py +0 -0
  290. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/report_templates/v1/__init__.py +0 -0
  291. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/report_templates/v1/report_templates_pb2.py +0 -0
  292. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/report_templates/v1/report_templates_pb2.pyi +0 -0
  293. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/report_templates/v1/report_templates_pb2_grpc.py +0 -0
  294. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/report_templates/v1/report_templates_pb2_grpc.pyi +0 -0
  295. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/reports/__init__.py +0 -0
  296. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/reports/v1/__init__.py +0 -0
  297. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/reports/v1/reports_pb2.py +0 -0
  298. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/reports/v1/reports_pb2.pyi +0 -0
  299. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/reports/v1/reports_pb2_grpc.py +0 -0
  300. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/reports/v1/reports_pb2_grpc.pyi +0 -0
  301. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/resource_attribute/__init__.py +0 -0
  302. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/resource_attribute/v1/__init__.py +0 -0
  303. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/resource_attribute/v1/resource_attribute_pb2.py +0 -0
  304. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/resource_attribute/v1/resource_attribute_pb2.pyi +0 -0
  305. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/resource_attribute/v1/resource_attribute_pb2_grpc.py +0 -0
  306. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/resource_attribute/v1/resource_attribute_pb2_grpc.pyi +0 -0
  307. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/roles/__init__.py +0 -0
  308. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/roles/v2/__init__.py +0 -0
  309. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/roles/v2/roles_pb2.py +0 -0
  310. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/roles/v2/roles_pb2.pyi +0 -0
  311. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/roles/v2/roles_pb2_grpc.py +0 -0
  312. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/roles/v2/roles_pb2_grpc.pyi +0 -0
  313. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rule_evaluation/__init__.py +0 -0
  314. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rule_evaluation/v1/__init__.py +0 -0
  315. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rule_evaluation/v1/rule_evaluation_pb2.py +0 -0
  316. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rule_evaluation/v1/rule_evaluation_pb2.pyi +0 -0
  317. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rule_evaluation/v1/rule_evaluation_pb2_grpc.py +0 -0
  318. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rule_evaluation/v1/rule_evaluation_pb2_grpc.pyi +0 -0
  319. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rules/__init__.py +0 -0
  320. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rules/v1/__init__.py +0 -0
  321. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rules/v1/rules_pb2.py +0 -0
  322. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rules/v1/rules_pb2.pyi +0 -0
  323. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rules/v1/rules_pb2_grpc.py +0 -0
  324. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rules/v1/rules_pb2_grpc.pyi +0 -0
  325. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/runs/__init__.py +0 -0
  326. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/runs/v2/__init__.py +0 -0
  327. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/runs/v2/runs_pb2.py +0 -0
  328. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/runs/v2/runs_pb2.pyi +0 -0
  329. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/runs/v2/runs_pb2_grpc.py +0 -0
  330. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/runs/v2/runs_pb2_grpc.pyi +0 -0
  331. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/saved_searches/__init__.py +0 -0
  332. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/saved_searches/v1/__init__.py +0 -0
  333. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/saved_searches/v1/saved_searches_pb2.py +0 -0
  334. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/saved_searches/v1/saved_searches_pb2.pyi +0 -0
  335. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/saved_searches/v1/saved_searches_pb2_grpc.py +0 -0
  336. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/saved_searches/v1/saved_searches_pb2_grpc.pyi +0 -0
  337. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/__init__.py +0 -0
  338. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/v1/__init__.py +0 -0
  339. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/v1/tags_pb2.py +0 -0
  340. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/v1/tags_pb2.pyi +0 -0
  341. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/v1/tags_pb2_grpc.py +0 -0
  342. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/v1/tags_pb2_grpc.pyi +0 -0
  343. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/v2/__init__.py +0 -0
  344. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/v2/tags_pb2.py +0 -0
  345. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/v2/tags_pb2.pyi +0 -0
  346. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/v2/tags_pb2_grpc.py +0 -0
  347. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/v2/tags_pb2_grpc.pyi +0 -0
  348. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/test_reports/__init__.py +0 -0
  349. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/test_reports/v1/__init__.py +0 -0
  350. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/test_reports/v1/test_reports_pb2.py +0 -0
  351. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/test_reports/v1/test_reports_pb2.pyi +0 -0
  352. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/test_reports/v1/test_reports_pb2_grpc.py +0 -0
  353. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/test_reports/v1/test_reports_pb2_grpc.pyi +0 -0
  354. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/unit/__init__.py +0 -0
  355. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/unit/v2/__init__.py +0 -0
  356. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/unit/v2/unit_pb2.py +0 -0
  357. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/unit/v2/unit_pb2.pyi +0 -0
  358. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/unit/v2/unit_pb2_grpc.py +0 -0
  359. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/unit/v2/unit_pb2_grpc.pyi +0 -0
  360. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_defined_functions/__init__.py +0 -0
  361. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_defined_functions/v1/__init__.py +0 -0
  362. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_defined_functions/v1/user_defined_functions_pb2.py +0 -0
  363. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_defined_functions/v1/user_defined_functions_pb2.pyi +0 -0
  364. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_defined_functions/v1/user_defined_functions_pb2_grpc.py +0 -0
  365. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_defined_functions/v1/user_defined_functions_pb2_grpc.pyi +0 -0
  366. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_groups/__init__.py +0 -0
  367. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_groups/v2/__init__.py +0 -0
  368. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_groups/v2/user_groups_pb2.py +0 -0
  369. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_groups/v2/user_groups_pb2.pyi +0 -0
  370. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_groups/v2/user_groups_pb2_grpc.py +0 -0
  371. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_groups/v2/user_groups_pb2_grpc.pyi +0 -0
  372. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/users/__init__.py +0 -0
  373. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/users/v2/__init__.py +0 -0
  374. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/users/v2/users_pb2.py +0 -0
  375. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/users/v2/users_pb2.pyi +0 -0
  376. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/users/v2/users_pb2_grpc.py +0 -0
  377. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/users/v2/users_pb2_grpc.pyi +0 -0
  378. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/__init__.py +0 -0
  379. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/v1/__init__.py +0 -0
  380. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/v1/views_pb2.py +0 -0
  381. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/v1/views_pb2.pyi +0 -0
  382. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/v1/views_pb2_grpc.py +0 -0
  383. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/v1/views_pb2_grpc.pyi +0 -0
  384. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/v2/__init__.py +0 -0
  385. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/v2/views_pb2.py +0 -0
  386. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/v2/views_pb2.pyi +0 -0
  387. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/v2/views_pb2_grpc.py +0 -0
  388. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/v2/views_pb2_grpc.pyi +0 -0
  389. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/webhooks/__init__.py +0 -0
  390. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/webhooks/v1/__init__.py +0 -0
  391. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/webhooks/v1/webhooks_pb2.py +0 -0
  392. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/webhooks/v1/webhooks_pb2.pyi +0 -0
  393. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/webhooks/v1/webhooks_pb2_grpc.py +0 -0
  394. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/webhooks/v1/webhooks_pb2_grpc.pyi +0 -0
  395. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/__init__.py +0 -0
  396. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/__init__.py +0 -0
  397. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/gen_pyi.py +0 -0
  398. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/__init__.py +0 -0
  399. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/_async_interceptors/__init__.py +0 -0
  400. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/_async_interceptors/base.py +0 -0
  401. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/_async_interceptors/metadata.py +0 -0
  402. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/_interceptors/__init__.py +0 -0
  403. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/_interceptors/base.py +0 -0
  404. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/_interceptors/context.py +0 -0
  405. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/_interceptors/metadata.py +0 -0
  406. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/_retry.py +0 -0
  407. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/keepalive.py +0 -0
  408. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/server_interceptors/__init__.py +0 -0
  409. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/server_interceptors/server_interceptor.py +0 -0
  410. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/transport_test.py +0 -0
  411. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/__init__.py +0 -0
  412. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/assets.py +0 -0
  413. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/base.py +0 -0
  414. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/calculated_channels.py +0 -0
  415. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/channels.py +0 -0
  416. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/data.py +0 -0
  417. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/data_imports.py +0 -0
  418. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/exports.py +0 -0
  419. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/jobs.py +0 -0
  420. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/ping.py +0 -0
  421. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/remote_files.py +0 -0
  422. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/reports.py +0 -0
  423. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/rules.py +0 -0
  424. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/runs.py +0 -0
  425. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/tags.py +0 -0
  426. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/units.py +0 -0
  427. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/upload.py +0 -0
  428. {sift_stack_py-0.17.1/lib/sift_client/_internal/util → sift_stack_py-0.18.0/lib/sift_client/_internal/pytest_plugin}/__init__.py +0 -0
  429. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/sync_wrapper.py +0 -0
  430. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/time.py +0 -0
  431. {sift_stack_py-0.17.1/lib/sift_client/scripts → sift_stack_py-0.18.0/lib/sift_client/_internal/util}/__init__.py +0 -0
  432. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/util/channels.py +0 -0
  433. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/util/executor.py +0 -0
  434. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/util/file.py +0 -0
  435. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/util/hdf5.py +0 -0
  436. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/util/numpy_types.py +0 -0
  437. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/util/progress.py +0 -0
  438. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/util/tdms.py +0 -0
  439. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/util/timestamp.py +0 -0
  440. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/util/util.py +0 -0
  441. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/config.py +0 -0
  442. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/errors.py +0 -0
  443. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/py.typed +0 -0
  444. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/_base.py +0 -0
  445. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/assets.py +0 -0
  446. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/calculated_channels.py +0 -0
  447. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/channels.py +0 -0
  448. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/data_imports.py +0 -0
  449. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/exports.py +0 -0
  450. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/file_attachments.py +0 -0
  451. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/jobs.py +0 -0
  452. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/ping.py +0 -0
  453. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/py.typed +0 -0
  454. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/rules.py +0 -0
  455. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/sync_stubs/__init__.py +0 -0
  456. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/sync_stubs/py.typed +0 -0
  457. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/tags.py +0 -0
  458. {sift_stack_py-0.17.1/lib/sift_client/sift_types/_mixins → sift_stack_py-0.18.0/lib/sift_client/scripts}/__init__.py +0 -0
  459. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/__init__.py +0 -0
  460. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/_base.py +0 -0
  461. {sift_stack_py-0.17.1/lib/sift_py/_internal/test_util → sift_stack_py-0.18.0/lib/sift_client/sift_types/_mixins}/__init__.py +0 -0
  462. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/_mixins/file_attachments.py +0 -0
  463. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/calculated_channel.py +0 -0
  464. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/channel.py +0 -0
  465. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/data_import.py +0 -0
  466. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/export.py +0 -0
  467. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/file_attachment.py +0 -0
  468. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/ingestion.py +0 -0
  469. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/job.py +0 -0
  470. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/rule.py +0 -0
  471. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/tag.py +0 -0
  472. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/transport/__init__.py +0 -0
  473. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/transport/grpc_transport.py +0 -0
  474. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/transport/rest_transport.py +0 -0
  475. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/util/__init__.py +0 -0
  476. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/util/cel_utils.py +0 -0
  477. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/util/metadata.py +0 -0
  478. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/util/util.py +0 -0
  479. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/__init__.py +0 -0
  480. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/__init__.py +0 -0
  481. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/cel.py +0 -0
  482. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/channel.py +0 -0
  483. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/convert/__init__.py +0 -0
  484. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/convert/json.py +0 -0
  485. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/convert/protobuf.py +0 -0
  486. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/convert/timestamp.py +0 -0
  487. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/metadata.py +0 -0
  488. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/metadata_test.py +0 -0
  489. {sift_stack_py-0.17.1/lib/sift_py/asset → sift_stack_py-0.18.0/lib/sift_py/_internal/test_util}/__init__.py +0 -0
  490. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/test_util/channel.py +0 -0
  491. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/test_util/fn.py +0 -0
  492. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/test_util/server_interceptor.py +0 -0
  493. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/time.py +0 -0
  494. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/user.py +0 -0
  495. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_rest_test.py +0 -0
  496. {sift_stack_py-0.17.1/lib/sift_py/calculated_channels → sift_stack_py-0.18.0/lib/sift_py/asset}/__init__.py +0 -0
  497. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/asset/_config_test.py +0 -0
  498. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/asset/_internal/shared.py +0 -0
  499. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/asset/_service_test.py +0 -0
  500. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/asset/config.py +0 -0
  501. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/asset/service.py +0 -0
  502. {sift_stack_py-0.17.1/lib/sift_py/file_attachment/_internal → sift_stack_py-0.18.0/lib/sift_py/calculated_channels}/__init__.py +0 -0
  503. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/calculated_channels/_service_test.py +0 -0
  504. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/calculated_channels/config.py +0 -0
  505. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/calculated_channels/service.py +0 -0
  506. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data/__init__.py +0 -0
  507. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data/_channel.py +0 -0
  508. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data/_deserialize.py +0 -0
  509. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data/_deserialize_test.py +0 -0
  510. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data/_service_test.py +0 -0
  511. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data/_validate.py +0 -0
  512. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data/error.py +0 -0
  513. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data/query.py +0 -0
  514. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data/service.py +0 -0
  515. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/__init__.py +0 -0
  516. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_config.py +0 -0
  517. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_config_test.py +0 -0
  518. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_csv_test.py +0 -0
  519. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_hdf5_test.py +0 -0
  520. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_parquet_test.py +0 -0
  521. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_ros_channel.py +0 -0
  522. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_rosbag_test.py +0 -0
  523. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_status_test.py +0 -0
  524. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_tdms_test.py +0 -0
  525. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_utils.py +0 -0
  526. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_utils_test.py +0 -0
  527. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/ch10.py +0 -0
  528. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/config.py +0 -0
  529. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/csv.py +0 -0
  530. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/hdf5.py +0 -0
  531. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/parquet.py +0 -0
  532. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/parquet_complex_types.py +0 -0
  533. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/rosbags.py +0 -0
  534. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/status.py +0 -0
  535. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/tdms.py +0 -0
  536. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/tempfile.py +0 -0
  537. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/time_format.py +0 -0
  538. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/error.py +0 -0
  539. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/file_attachment/__init__.py +0 -0
  540. {sift_stack_py-0.17.1/lib/sift_py/grpc/_async_interceptors → sift_stack_py-0.18.0/lib/sift_py/file_attachment/_internal}/__init__.py +0 -0
  541. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/file_attachment/_internal/download.py +0 -0
  542. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/file_attachment/_internal/upload.py +0 -0
  543. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/file_attachment/_service_test.py +0 -0
  544. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/file_attachment/entity.py +0 -0
  545. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/file_attachment/metadata.py +0 -0
  546. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/file_attachment/service.py +0 -0
  547. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/grpc/__init__.py +0 -0
  548. {sift_stack_py-0.17.1/lib/sift_py/grpc/_interceptors → sift_stack_py-0.18.0/lib/sift_py/grpc/_async_interceptors}/__init__.py +0 -0
  549. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/grpc/_async_interceptors/base.py +0 -0
  550. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/grpc/_async_interceptors/metadata.py +0 -0
  551. {sift_stack_py-0.17.1/lib/sift_py/ingestion/config/yaml → sift_stack_py-0.18.0/lib/sift_py/grpc/_interceptors}/__init__.py +0 -0
  552. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/grpc/_interceptors/base.py +0 -0
  553. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/grpc/_interceptors/context.py +0 -0
  554. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/grpc/_interceptors/metadata.py +0 -0
  555. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/grpc/_retry.py +0 -0
  556. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/grpc/keepalive.py +0 -0
  557. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/grpc/transport.py +0 -0
  558. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/grpc/transport_test.py +0 -0
  559. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/__init__.py +0 -0
  560. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/_internal/__init__.py +0 -0
  561. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/_internal/channel.py +0 -0
  562. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/_internal/error.py +0 -0
  563. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/_internal/ingest.py +0 -0
  564. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/_internal/ingest_test.py +0 -0
  565. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/_internal/ingestion_config.py +0 -0
  566. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/_internal/run.py +0 -0
  567. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/_service_test.py +0 -0
  568. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/buffer.py +0 -0
  569. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/channel.py +0 -0
  570. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/config/__init__.py +0 -0
  571. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/config/_telemetry_test.py +0 -0
  572. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/config/telemetry.py +0 -0
  573. {sift_stack_py-0.17.1/lib/sift_py/report_templates → sift_stack_py-0.18.0/lib/sift_py/ingestion/config/yaml}/__init__.py +0 -0
  574. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/config/yaml/error.py +0 -0
  575. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/config/yaml/load.py +0 -0
  576. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/config/yaml/spec.py +0 -0
  577. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/config/yaml/test_load.py +0 -0
  578. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/flow.py +0 -0
  579. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/manager.py +0 -0
  580. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/rule/__init__.py +0 -0
  581. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/rule/config.py +0 -0
  582. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/service.py +0 -0
  583. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/py.typed +0 -0
  584. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/report/_report_test.py +0 -0
  585. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/report/service.py +0 -0
  586. {sift_stack_py-0.17.1/lib/sift_py/rule → sift_stack_py-0.18.0/lib/sift_py/report_templates}/__init__.py +0 -0
  587. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/report_templates/_config_test.py +0 -0
  588. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/report_templates/_service_test.py +0 -0
  589. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/report_templates/config.py +0 -0
  590. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/report_templates/service.py +0 -0
  591. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/rest.py +0 -0
  592. {sift_stack_py-0.17.1/lib/sift_py/yaml → sift_stack_py-0.18.0/lib/sift_py/rule}/__init__.py +0 -0
  593. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/rule/_config_test.py +0 -0
  594. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/rule/_service_test.py +0 -0
  595. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/rule/config.py +0 -0
  596. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/rule/service.py +0 -0
  597. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/rule_evaluation/_service_test.py +0 -0
  598. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/rule_evaluation/service.py +0 -0
  599. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/tag/_internal/shared.py +0 -0
  600. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/yaml/_channel_test.py +0 -0
  601. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/yaml/_rule_test.py +0 -0
  602. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/yaml/_utils_test.py +0 -0
  603. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/yaml/calculated_channels.py +0 -0
  604. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/yaml/channel.py +0 -0
  605. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/yaml/report_templates.py +0 -0
  606. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/yaml/rule.py +0 -0
  607. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/yaml/utils.py +0 -0
  608. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_stack_py.egg-info/dependency_links.txt +0 -0
  609. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_stack_py.egg-info/entry_points.txt +0 -0
  610. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_stack_py.egg-info/top_level.txt +0 -0
  611. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/setup.cfg +0 -0
  612. {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sift_stack_py
3
- Version: 0.17.1
3
+ Version: 0.18.0
4
4
  Summary: Python client library for the Sift API
5
5
  Maintainer-email: Sift Software Engineers <engineering@siftstack.com>
6
6
  License: Copyright (c) 2024 Azimuth Industries Inc.
@@ -46,6 +46,7 @@ Requires-Dist: types-requests~=2.25
46
46
  Requires-Dist: googleapis-common-protos>=1.60
47
47
  Requires-Dist: protoc-gen-openapiv2>=0.0.1
48
48
  Requires-Dist: filelock~=3.15
49
+ Requires-Dist: tomli~=2.0; python_version < "3.11"
49
50
  Provides-Extra: all
50
51
  Requires-Dist: cffi~=1.14; extra == "all"
51
52
  Requires-Dist: h5py~=3.11; extra == "all"
@@ -54,7 +55,7 @@ Requires-Dist: polars~=1.8; extra == "all"
54
55
  Requires-Dist: pyOpenSSL<24.0.0; extra == "all"
55
56
  Requires-Dist: pyarrow>=17.0.0; extra == "all"
56
57
  Requires-Dist: rosbags~=0.0; python_full_version >= "3.8.2" and extra == "all"
57
- Requires-Dist: sift-stream-bindings==0.3.0; extra == "all"
58
+ Requires-Dist: sift-stream-bindings==0.4.1; extra == "all"
58
59
  Requires-Dist: types-pyOpenSSL<24.0.0; extra == "all"
59
60
  Provides-Extra: build
60
61
  Requires-Dist: build==1.2.1; extra == "build"
@@ -69,6 +70,7 @@ Requires-Dist: pytest-asyncio==0.23.7; extra == "dev"
69
70
  Requires-Dist: pytest-benchmark==4.0.0; extra == "dev"
70
71
  Requires-Dist: pytest-dotenv==0.5.2; extra == "dev"
71
72
  Requires-Dist: pytest-mock==3.14.0; extra == "dev"
73
+ Requires-Dist: pytest-randomly==3.15.0; extra == "dev"
72
74
  Requires-Dist: pytest==8.2.2; extra == "dev"
73
75
  Requires-Dist: ruff~=0.12.10; extra == "dev"
74
76
  Requires-Dist: tomlkit~=0.13.3; extra == "dev"
@@ -88,10 +90,11 @@ Requires-Dist: pytest-asyncio==0.23.7; extra == "dev-all"
88
90
  Requires-Dist: pytest-benchmark==4.0.0; extra == "dev-all"
89
91
  Requires-Dist: pytest-dotenv==0.5.2; extra == "dev-all"
90
92
  Requires-Dist: pytest-mock==3.14.0; extra == "dev-all"
93
+ Requires-Dist: pytest-randomly==3.15.0; extra == "dev-all"
91
94
  Requires-Dist: pytest==8.2.2; extra == "dev-all"
92
95
  Requires-Dist: rosbags~=0.0; python_full_version >= "3.8.2" and extra == "dev-all"
93
96
  Requires-Dist: ruff~=0.12.10; extra == "dev-all"
94
- Requires-Dist: sift-stream-bindings==0.3.0; extra == "dev-all"
97
+ Requires-Dist: sift-stream-bindings==0.4.1; extra == "dev-all"
95
98
  Requires-Dist: tomlkit~=0.13.3; extra == "dev-all"
96
99
  Requires-Dist: types-pyOpenSSL<24.0.0; extra == "dev-all"
97
100
  Provides-Extra: development
@@ -102,6 +105,7 @@ Requires-Dist: pytest-asyncio==0.23.7; extra == "development"
102
105
  Requires-Dist: pytest-benchmark==4.0.0; extra == "development"
103
106
  Requires-Dist: pytest-dotenv==0.5.2; extra == "development"
104
107
  Requires-Dist: pytest-mock==3.14.0; extra == "development"
108
+ Requires-Dist: pytest-randomly==3.15.0; extra == "development"
105
109
  Requires-Dist: pytest==8.2.2; extra == "development"
106
110
  Requires-Dist: ruff~=0.12.10; extra == "development"
107
111
  Requires-Dist: tomlkit~=0.13.3; extra == "development"
@@ -138,10 +142,11 @@ Requires-Dist: pytest-asyncio==0.23.7; extra == "docs-build"
138
142
  Requires-Dist: pytest-benchmark==4.0.0; extra == "docs-build"
139
143
  Requires-Dist: pytest-dotenv==0.5.2; extra == "docs-build"
140
144
  Requires-Dist: pytest-mock==3.14.0; extra == "docs-build"
145
+ Requires-Dist: pytest-randomly==3.15.0; extra == "docs-build"
141
146
  Requires-Dist: pytest==8.2.2; extra == "docs-build"
142
147
  Requires-Dist: rosbags~=0.0; python_full_version >= "3.8.2" and extra == "docs-build"
143
148
  Requires-Dist: ruff~=0.12.10; extra == "docs-build"
144
- Requires-Dist: sift-stream-bindings==0.3.0; extra == "docs-build"
149
+ Requires-Dist: sift-stream-bindings==0.4.1; extra == "docs-build"
145
150
  Requires-Dist: tomlkit~=0.13.3; extra == "docs-build"
146
151
  Requires-Dist: types-pyOpenSSL<24.0.0; extra == "docs-build"
147
152
  Provides-Extra: file-imports
@@ -159,9 +164,9 @@ Requires-Dist: types-pyOpenSSL<24.0.0; extra == "openssl"
159
164
  Provides-Extra: rosbags
160
165
  Requires-Dist: rosbags~=0.0; python_full_version >= "3.8.2" and extra == "rosbags"
161
166
  Provides-Extra: sift-stream
162
- Requires-Dist: sift-stream-bindings==0.3.0; extra == "sift-stream"
167
+ Requires-Dist: sift-stream-bindings==0.4.1; extra == "sift-stream"
163
168
  Provides-Extra: sift-stream-bindings
164
- Requires-Dist: sift-stream-bindings==0.3.0; extra == "sift-stream-bindings"
169
+ Requires-Dist: sift-stream-bindings==0.4.1; extra == "sift-stream-bindings"
165
170
  Provides-Extra: tdms
166
171
  Requires-Dist: npTDMS~=1.9; extra == "tdms"
167
172
 
@@ -8,7 +8,6 @@ from __future__ import annotations
8
8
 
9
9
  from importlib.metadata import PackageNotFoundError, version
10
10
  from typing import TYPE_CHECKING, Any, TypedDict, cast
11
- from urllib.parse import ParseResult, urlparse
12
11
 
13
12
  import grpc
14
13
  import grpc.aio as grpc_aio
@@ -21,6 +20,7 @@ from sift_client._internal.grpc_transport._interceptors.metadata import (
21
20
  Metadata,
22
21
  MetadataInterceptor,
23
22
  )
23
+ from sift_client._internal.urls import parse_host
24
24
 
25
25
  if TYPE_CHECKING:
26
26
  from sift_client._internal.grpc_transport._async_interceptors.base import ClientAsyncInterceptor
@@ -81,7 +81,7 @@ def use_sift_channel(
81
81
 
82
82
  credentials = get_ssl_credentials(cert_via_openssl)
83
83
  options = _compute_channel_options(config)
84
- api_uri = _clean_uri(config["uri"], use_ssl)
84
+ api_uri = parse_host(config["uri"])
85
85
  channel = grpc.secure_channel(api_uri, credentials, options)
86
86
  interceptors = _compute_sift_interceptors(config, metadata)
87
87
  return grpc.intercept_channel(channel, *interceptors)
@@ -101,7 +101,7 @@ def use_sift_async_channel(
101
101
  return _use_insecure_sift_async_channel(config, metadata)
102
102
 
103
103
  return grpc_aio.secure_channel(
104
- target=_clean_uri(config["uri"], use_ssl),
104
+ target=parse_host(config["uri"]),
105
105
  credentials=get_ssl_credentials(cert_via_openssl),
106
106
  options=_compute_channel_options(config),
107
107
  interceptors=_compute_sift_async_interceptors(config, metadata),
@@ -115,7 +115,7 @@ def _use_insecure_sift_channel(
115
115
  FOR DEVELOPMENT PURPOSES ONLY
116
116
  """
117
117
  options = _compute_channel_options(config)
118
- api_uri = _clean_uri(config["uri"], False)
118
+ api_uri = parse_host(config["uri"])
119
119
  channel = grpc.insecure_channel(api_uri, options)
120
120
  interceptors = _compute_sift_interceptors(config, metadata)
121
121
  return grpc.intercept_channel(channel, *interceptors)
@@ -128,7 +128,7 @@ def _use_insecure_sift_async_channel(
128
128
  FOR DEVELOPMENT PURPOSES ONLY
129
129
  """
130
130
  return grpc_aio.insecure_channel(
131
- target=_clean_uri(config["uri"], False),
131
+ target=parse_host(config["uri"]),
132
132
  options=_compute_channel_options(config),
133
133
  interceptors=_compute_sift_async_interceptors(config, metadata),
134
134
  )
@@ -209,21 +209,6 @@ def _metadata_async_interceptor(
209
209
  return MetadataAsyncInterceptor(md)
210
210
 
211
211
 
212
- def _clean_uri(uri: str, use_ssl: bool) -> str:
213
- """
214
- This will automatically transform the URI to an acceptable form regardless of whether or not
215
- users included the scheme in the URL or included trailing slashes.
216
- """
217
-
218
- if "http://" in uri or "https://" in uri:
219
- parsed: ParseResult = urlparse(uri)
220
- return parsed.netloc
221
-
222
- full_uri = f"https://{uri}" if use_ssl else f"http://{uri}"
223
- parsed_res: ParseResult = urlparse(full_uri)
224
- return parsed_res.netloc
225
-
226
-
227
212
  def _compute_user_agent() -> str:
228
213
  try:
229
214
  return f"sift_stack_py/{version('sift_stack_py')}"
@@ -32,8 +32,8 @@ versa), which is acceptable because writes are tiny and we only have one reader.
32
32
 
33
33
  Waiting for the lock is cooperative: ``AsyncFileLock`` retries a non-blocking
34
34
  acquire and sleeps on the event loop between attempts, so a contended or stale
35
- lock never blocks the loop thread (the hang in ENG-12003). The acquire is also
36
- bounded by ``LOG_LOCK_TIMEOUT_SECONDS``, surfacing a stuck lock as
35
+ lock never blocks the loop thread. The acquire is also
36
+ bounded by ``LOG_LOCK_TIMEOUT_SECONDS``, so a stuck lock surfaces as
37
37
  ``TimeoutError`` instead of waiting forever. The file read/write under the lock
38
38
  runs inline on the loop; it is a tiny local-file operation, the same class of
39
39
  brief synchronous work async methods do throughout this client.
@@ -49,6 +49,7 @@ Ad-hoc writers to the same path are not protected.
49
49
  from __future__ import annotations
50
50
 
51
51
  import json
52
+ import logging
52
53
  import os
53
54
  import re
54
55
  from dataclasses import dataclass, field
@@ -58,9 +59,13 @@ from typing import TYPE_CHECKING, Any, Generator
58
59
  from filelock import AsyncFileLock, Timeout
59
60
  from google.protobuf import json_format
60
61
 
62
+ from sift_client._internal.pytest_plugin.audit_log import log_event
63
+
61
64
  if TYPE_CHECKING:
62
65
  from sift_client.sift_types.test_report import TestMeasurement, TestReport, TestStep
63
66
 
67
+ logger = logging.getLogger(__name__)
68
+
64
69
 
65
70
  # Seconds to wait for the sidecar lock before raising TimeoutError. Long enough
66
71
  # to absorb brief contention, short enough that a stale holder can't block forever.
@@ -158,9 +163,13 @@ class _ReplayState:
158
163
 
159
164
  @dataclass
160
165
  class ReplayResult:
161
- """Result of replaying a log file."""
166
+ """Result of replaying a log file.
162
167
 
163
- report: TestReport
168
+ ``report`` is None on an incremental resume tick that uploaded only steps or
169
+ measurements; the report itself was created on an earlier tick.
170
+ """
171
+
172
+ report: TestReport | None = None
164
173
  steps: list[TestStep] = field(default_factory=list)
165
174
  measurements: list[TestMeasurement] = field(default_factory=list)
166
175
 
@@ -270,6 +279,9 @@ def parse_log_data_lines(
270
279
  continue
271
280
  match = line_pattern.match(line)
272
281
  if not match:
282
+ log_event(
283
+ logger, logging.WARNING, "log.parse_error", line=data_line_count + 1, text=line
284
+ )
273
285
  raise ValueError(f"Invalid log line: {line}")
274
286
  data_line_count += 1
275
287
  if data_line_count <= start_line:
@@ -236,6 +236,86 @@ class IngestionLowLevelClient(LowLevelClientBase, WithGrpcClient):
236
236
  return _hash_flows(asset_name=asset_name, flows=flows)
237
237
 
238
238
 
239
+ async def _build_sift_stream_instance(
240
+ api_key: str,
241
+ grpc_uri: str,
242
+ ingestion_config_form: IngestionConfigFormPy,
243
+ run_form: RunFormPy | None = None,
244
+ run_id: str | None = None,
245
+ asset_tags: list[str] | None = None,
246
+ asset_metadata: list[MetadataPy] | None = None,
247
+ streaming_mode: StreamingMode = ..., # type: ignore[assignment]
248
+ retry_policy: RetryPolicyPy | None = None,
249
+ disk_backup_policy: DiskBackupPolicyPy | None = None,
250
+ checkpoint_interval_seconds: int | None = None,
251
+ enable_tls: bool = True,
252
+ tracing_config: TracingConfig | None = None,
253
+ ) -> SiftStreamPy:
254
+ """Build a raw `SiftStreamPy` without wrapping it in a client.
255
+
256
+ Shared by both `IngestionConfigStreamingLowLevelClient` and the auto-register path.
257
+ """
258
+ # Importing here to allow sift_stream_bindings to be an optional dependency for non-ingestion users
259
+ # TODO(nathan): Fix bindings to fix mypy issues with tracing functions
260
+ from sift_stream_bindings import ( # type: ignore[attr-defined]
261
+ DurationPy,
262
+ SiftStreamBuilderPy,
263
+ init_tracing, # type: ignore[attr-defined]
264
+ init_tracing_with_file, # type: ignore[attr-defined]
265
+ is_tracing_initialized, # type: ignore[attr-defined]
266
+ )
267
+
268
+ from sift_client.resources.ingestion import StreamingMode, TracingConfig
269
+
270
+ _default_max_log_files = 7
271
+ _default_logfile_prefix = "sift_stream_bindings.log"
272
+
273
+ if streaming_mode is ...: # type: ignore[comparison-overlap]
274
+ streaming_mode = StreamingMode.LIVE_WITH_BACKUPS
275
+
276
+ if not is_tracing_initialized():
277
+ if tracing_config is None:
278
+ tracing_config = TracingConfig.with_file()
279
+
280
+ if tracing_config.log_dir is not None:
281
+ init_tracing_with_file(
282
+ tracing_config.level,
283
+ tracing_config.log_dir,
284
+ tracing_config.filename_prefix or _default_logfile_prefix,
285
+ tracing_config.max_log_files or _default_max_log_files,
286
+ )
287
+ else:
288
+ init_tracing(tracing_config.level)
289
+
290
+ sift_builder = SiftStreamBuilderPy(uri=grpc_uri, apikey=api_key)
291
+ sift_builder.enable_tls = enable_tls
292
+
293
+ config_builder = sift_builder.ingestion_config(ingestion_config_form)
294
+ config_builder.run = run_form
295
+ config_builder.run_id = run_id
296
+ config_builder.asset_tags = asset_tags
297
+ config_builder.metadata = asset_metadata
298
+
299
+ if streaming_mode == StreamingMode.LIVE_ONLY:
300
+ return await config_builder.live_only().build()
301
+
302
+ elif streaming_mode == StreamingMode.FILE_BACKUP:
303
+ fb_builder = config_builder.file_backup()
304
+ if disk_backup_policy is not None:
305
+ fb_builder.disk_backup_policy = disk_backup_policy
306
+ return await fb_builder.build()
307
+
308
+ else: # LIVE_WITH_BACKUPS (default)
309
+ lwb_builder = config_builder.live_with_backups()
310
+ if retry_policy is not None:
311
+ lwb_builder.retry_policy = retry_policy
312
+ if disk_backup_policy is not None:
313
+ lwb_builder.disk_backup_policy = disk_backup_policy
314
+ if checkpoint_interval_seconds is not None:
315
+ lwb_builder.checkpoint_interval = DurationPy(secs=checkpoint_interval_seconds, nanos=0)
316
+ return await lwb_builder.build()
317
+
318
+
239
319
  class IngestionConfigStreamingLowLevelClient(LowLevelClientBase):
240
320
  DEFAULT_MAX_LOG_FILES = 7 # Equal to 1 week of logs
241
321
  DEFAULT_LOGFILE_PREFIX = "sift_stream_bindings.log"
@@ -262,67 +342,21 @@ class IngestionConfigStreamingLowLevelClient(LowLevelClientBase):
262
342
  enable_tls: bool = True,
263
343
  tracing_config: TracingConfig | None = None,
264
344
  ) -> IngestionConfigStreamingLowLevelClient:
265
- # Importing here to allow sift_stream_bindings to be an optional dependancy for non-ingestion users
266
- # TODO(nathan): Fix bindings to fix mypy issues with tracing functions
267
- from sift_stream_bindings import ( # type: ignore[attr-defined]
268
- DurationPy,
269
- SiftStreamBuilderPy,
270
- init_tracing, # type: ignore[attr-defined]
271
- init_tracing_with_file, # type: ignore[attr-defined]
272
- is_tracing_initialized, # type: ignore[attr-defined]
345
+ sift_stream_instance = await _build_sift_stream_instance(
346
+ api_key=api_key,
347
+ grpc_uri=grpc_uri,
348
+ ingestion_config_form=ingestion_config_form,
349
+ run_form=run_form,
350
+ run_id=run_id,
351
+ asset_tags=asset_tags,
352
+ asset_metadata=asset_metadata,
353
+ streaming_mode=streaming_mode,
354
+ retry_policy=retry_policy,
355
+ disk_backup_policy=disk_backup_policy,
356
+ checkpoint_interval_seconds=checkpoint_interval_seconds,
357
+ enable_tls=enable_tls,
358
+ tracing_config=tracing_config,
273
359
  )
274
-
275
- from sift_client.resources.ingestion import StreamingMode, TracingConfig
276
-
277
- if streaming_mode is ...: # type: ignore[comparison-overlap]
278
- streaming_mode = StreamingMode.LIVE_WITH_BACKUPS
279
-
280
- if not is_tracing_initialized():
281
- if tracing_config is None:
282
- tracing_config = TracingConfig.with_file()
283
-
284
- if tracing_config.log_dir is not None:
285
- # Use file logging
286
- init_tracing_with_file(
287
- tracing_config.level,
288
- tracing_config.log_dir,
289
- tracing_config.filename_prefix or cls.DEFAULT_LOGFILE_PREFIX,
290
- tracing_config.max_log_files or cls.DEFAULT_MAX_LOG_FILES,
291
- )
292
- else:
293
- # Use stdout/stderr only
294
- init_tracing(tracing_config.level)
295
-
296
- sift_builder = SiftStreamBuilderPy(uri=grpc_uri, apikey=api_key)
297
- sift_builder.enable_tls = enable_tls
298
-
299
- config_builder = sift_builder.ingestion_config(ingestion_config_form)
300
- config_builder.run = run_form
301
- config_builder.run_id = run_id
302
- config_builder.asset_tags = asset_tags
303
- config_builder.metadata = asset_metadata
304
-
305
- if streaming_mode == StreamingMode.LIVE_ONLY:
306
- sift_stream_instance = await config_builder.live_only().build()
307
-
308
- elif streaming_mode == StreamingMode.FILE_BACKUP:
309
- fb_builder = config_builder.file_backup()
310
- if disk_backup_policy is not None:
311
- fb_builder.disk_backup_policy = disk_backup_policy
312
- sift_stream_instance = await fb_builder.build()
313
-
314
- else: # LIVE_WITH_BACKUPS (default)
315
- lwb_builder = config_builder.live_with_backups()
316
- if retry_policy is not None:
317
- lwb_builder.retry_policy = retry_policy
318
- if disk_backup_policy is not None:
319
- lwb_builder.disk_backup_policy = disk_backup_policy
320
- if checkpoint_interval_seconds is not None:
321
- lwb_builder.checkpoint_interval = DurationPy(
322
- secs=checkpoint_interval_seconds, nanos=0
323
- )
324
- sift_stream_instance = await lwb_builder.build()
325
-
326
360
  return cls(sift_stream_instance)
327
361
 
328
362
  async def send(self, flow: FlowPy):