sift-stack-py 0.16.1__tar.gz → 0.17.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 (624) hide show
  1. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/PKG-INFO +22 -22
  2. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/_retry.py +29 -3
  3. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/transport.py +8 -1
  4. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/__init__.py +2 -0
  5. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/channels.py +55 -4
  6. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/exports.py +16 -7
  7. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/rules.py +12 -2
  8. sift_stack_py-0.17.0/lib/sift_client/_internal/low_level_wrappers/units.py +120 -0
  9. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/sync_wrapper.py +16 -1
  10. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/util/channels.py +3 -0
  11. sift_stack_py-0.17.0/lib/sift_client/_internal/util/hdf5.py +271 -0
  12. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/client.py +5 -0
  13. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/resources/channels.py +29 -1
  14. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/resources/data_imports.py +129 -16
  15. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/resources/sync_stubs/__init__.pyi +43 -11
  16. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/__init__.py +2 -0
  17. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/_base.py +4 -0
  18. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/calculated_channel.py +29 -5
  19. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/channel.py +132 -10
  20. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/data_import.py +54 -16
  21. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/rule.py +6 -1
  22. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/transport/grpc_transport.py +57 -6
  23. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/transport/rest_transport.py +15 -0
  24. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_stack_py.egg-info/PKG-INFO +22 -22
  25. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_stack_py.egg-info/SOURCES.txt +1 -46
  26. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_stack_py.egg-info/requires.txt +33 -19
  27. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/pyproject.toml +51 -31
  28. sift_stack_py-0.16.1/lib/sift_client/_internal/util/hdf5.py +0 -96
  29. sift_stack_py-0.16.1/lib/sift_client/_tests/__init__.py +0 -6
  30. sift_stack_py-0.16.1/lib/sift_client/_tests/_internal/low_level_wrappers/test_base.py +0 -165
  31. sift_stack_py-0.16.1/lib/sift_client/_tests/_internal/low_level_wrappers/test_ingestion.py +0 -56
  32. sift_stack_py-0.16.1/lib/sift_client/_tests/_internal/low_level_wrappers/test_upload.py +0 -62
  33. sift_stack_py-0.16.1/lib/sift_client/_tests/_internal/test_channels.py +0 -58
  34. sift_stack_py-0.16.1/lib/sift_client/_tests/_internal/test_gen_pyi.py +0 -74
  35. sift_stack_py-0.16.1/lib/sift_client/_tests/_internal/test_hdf5.py +0 -132
  36. sift_stack_py-0.16.1/lib/sift_client/_tests/_internal/test_stub_module/__init__.py +0 -6
  37. sift_stack_py-0.16.1/lib/sift_client/_tests/_internal/test_stub_module/test_py.py +0 -49
  38. sift_stack_py-0.16.1/lib/sift_client/_tests/_internal/test_sync_wrapper.py +0 -233
  39. sift_stack_py-0.16.1/lib/sift_client/_tests/_internal/test_tdms.py +0 -380
  40. sift_stack_py-0.16.1/lib/sift_client/_tests/_internal/test_transport.py +0 -66
  41. sift_stack_py-0.16.1/lib/sift_client/_tests/conftest.py +0 -87
  42. sift_stack_py-0.16.1/lib/sift_client/_tests/resources/test_assets.py +0 -198
  43. sift_stack_py-0.16.1/lib/sift_client/_tests/resources/test_calculated_channels.py +0 -557
  44. sift_stack_py-0.16.1/lib/sift_client/_tests/resources/test_channels.py +0 -414
  45. sift_stack_py-0.16.1/lib/sift_client/_tests/resources/test_data_imports.py +0 -364
  46. sift_stack_py-0.16.1/lib/sift_client/_tests/resources/test_exports.py +0 -340
  47. sift_stack_py-0.16.1/lib/sift_client/_tests/resources/test_file_attachments.py +0 -582
  48. sift_stack_py-0.16.1/lib/sift_client/_tests/resources/test_jobs.py +0 -625
  49. sift_stack_py-0.16.1/lib/sift_client/_tests/resources/test_ping.py +0 -62
  50. sift_stack_py-0.16.1/lib/sift_client/_tests/resources/test_reports.py +0 -414
  51. sift_stack_py-0.16.1/lib/sift_client/_tests/resources/test_rules.py +0 -873
  52. sift_stack_py-0.16.1/lib/sift_client/_tests/resources/test_runs.py +0 -571
  53. sift_stack_py-0.16.1/lib/sift_client/_tests/resources/test_tags.py +0 -141
  54. sift_stack_py-0.16.1/lib/sift_client/_tests/resources/test_test_results.py +0 -1130
  55. sift_stack_py-0.16.1/lib/sift_client/_tests/sift_types/test_asset.py +0 -186
  56. sift_stack_py-0.16.1/lib/sift_client/_tests/sift_types/test_base.py +0 -591
  57. sift_stack_py-0.16.1/lib/sift_client/_tests/sift_types/test_calculated_channel.py +0 -292
  58. sift_stack_py-0.16.1/lib/sift_client/_tests/sift_types/test_channel.py +0 -123
  59. sift_stack_py-0.16.1/lib/sift_client/_tests/sift_types/test_ingestion.py +0 -153
  60. sift_stack_py-0.16.1/lib/sift_client/_tests/sift_types/test_job.py +0 -281
  61. sift_stack_py-0.16.1/lib/sift_client/_tests/sift_types/test_report.py +0 -192
  62. sift_stack_py-0.16.1/lib/sift_client/_tests/sift_types/test_results.py +0 -497
  63. sift_stack_py-0.16.1/lib/sift_client/_tests/sift_types/test_rule.py +0 -149
  64. sift_stack_py-0.16.1/lib/sift_client/_tests/sift_types/test_run.py +0 -241
  65. sift_stack_py-0.16.1/lib/sift_client/_tests/sift_types/test_tag.py +0 -75
  66. sift_stack_py-0.16.1/lib/sift_client/_tests/test_client.py +0 -0
  67. sift_stack_py-0.16.1/lib/sift_client/_tests/util/conftest.py +0 -14
  68. sift_stack_py-0.16.1/lib/sift_client/_tests/util/test_cel_utils.py +0 -179
  69. sift_stack_py-0.16.1/lib/sift_client/_tests/util/test_test_results_utils.py +0 -703
  70. sift_stack_py-0.16.1/lib/sift_py/grpc/_interceptors/__init__.py +0 -0
  71. sift_stack_py-0.16.1/lib/sift_py/ingestion/config/yaml/__init__.py +0 -0
  72. sift_stack_py-0.16.1/lib/sift_py/report_templates/__init__.py +0 -0
  73. sift_stack_py-0.16.1/lib/sift_py/rule/__init__.py +0 -0
  74. sift_stack_py-0.16.1/lib/sift_py/yaml/__init__.py +0 -0
  75. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/LICENSE +0 -0
  76. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/README.md +0 -0
  77. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/__init__.py +0 -0
  78. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/annotation_logs/__init__.py +0 -0
  79. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/annotation_logs/v1/__init__.py +0 -0
  80. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/annotation_logs/v1/annotation_logs_pb2.py +0 -0
  81. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/annotation_logs/v1/annotation_logs_pb2.pyi +0 -0
  82. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/annotation_logs/v1/annotation_logs_pb2_grpc.py +0 -0
  83. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/annotation_logs/v1/annotation_logs_pb2_grpc.pyi +0 -0
  84. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/annotations/__init__.py +0 -0
  85. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/annotations/v1/__init__.py +0 -0
  86. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/annotations/v1/annotations_pb2.py +0 -0
  87. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/annotations/v1/annotations_pb2.pyi +0 -0
  88. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/annotations/v1/annotations_pb2_grpc.py +0 -0
  89. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/annotations/v1/annotations_pb2_grpc.pyi +0 -0
  90. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/api_keys/__init__.py +0 -0
  91. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/api_keys/v2/__init__.py +0 -0
  92. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/api_keys/v2/api_keys_pb2.py +0 -0
  93. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/api_keys/v2/api_keys_pb2.pyi +0 -0
  94. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/api_keys/v2/api_keys_pb2_grpc.py +0 -0
  95. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/api_keys/v2/api_keys_pb2_grpc.pyi +0 -0
  96. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/assets/__init__.py +0 -0
  97. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/assets/v1/__init__.py +0 -0
  98. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/assets/v1/assets_pb2.py +0 -0
  99. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/assets/v1/assets_pb2.pyi +0 -0
  100. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/assets/v1/assets_pb2_grpc.py +0 -0
  101. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/assets/v1/assets_pb2_grpc.pyi +0 -0
  102. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/__init__.py +0 -0
  103. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/v1/__init__.py +0 -0
  104. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/v1/calculated_channels_pb2.py +0 -0
  105. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/v1/calculated_channels_pb2.pyi +0 -0
  106. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/v1/calculated_channels_pb2_grpc.py +0 -0
  107. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/v1/calculated_channels_pb2_grpc.pyi +0 -0
  108. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/v2/__init__.py +0 -0
  109. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/v2/calculated_channels_pb2.py +0 -0
  110. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/v2/calculated_channels_pb2.pyi +0 -0
  111. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/v2/calculated_channels_pb2_grpc.py +0 -0
  112. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/v2/calculated_channels_pb2_grpc.pyi +0 -0
  113. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/campaigns/__init__.py +0 -0
  114. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/campaigns/v1/__init__.py +0 -0
  115. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/campaigns/v1/campaigns_pb2.py +0 -0
  116. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/campaigns/v1/campaigns_pb2.pyi +0 -0
  117. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/campaigns/v1/campaigns_pb2_grpc.py +0 -0
  118. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/campaigns/v1/campaigns_pb2_grpc.pyi +0 -0
  119. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/__init__.py +0 -0
  120. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/v1/__init__.py +0 -0
  121. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/v1/channel_schemas_pb2.py +0 -0
  122. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/v1/channel_schemas_pb2.pyi +0 -0
  123. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/v1/channel_schemas_pb2_grpc.py +0 -0
  124. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/v1/channel_schemas_pb2_grpc.pyi +0 -0
  125. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/v2/__init__.py +0 -0
  126. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/v2/channel_schemas_pb2.py +0 -0
  127. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/v2/channel_schemas_pb2.pyi +0 -0
  128. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/v2/channel_schemas_pb2_grpc.py +0 -0
  129. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/v2/channel_schemas_pb2_grpc.pyi +0 -0
  130. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channels/__init__.py +0 -0
  131. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channels/v2/__init__.py +0 -0
  132. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channels/v2/channels_pb2.py +0 -0
  133. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channels/v2/channels_pb2.pyi +0 -0
  134. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channels/v2/channels_pb2_grpc.py +0 -0
  135. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channels/v2/channels_pb2_grpc.pyi +0 -0
  136. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channels/v3/__init__.py +0 -0
  137. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channels/v3/channels_pb2.py +0 -0
  138. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channels/v3/channels_pb2.pyi +0 -0
  139. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channels/v3/channels_pb2_grpc.py +0 -0
  140. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/channels/v3/channels_pb2_grpc.pyi +0 -0
  141. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/comment/__init__.py +0 -0
  142. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/comment/v1/__init__.py +0 -0
  143. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/comment/v1/comment_pb2.py +0 -0
  144. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/comment/v1/comment_pb2.pyi +0 -0
  145. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/comment/v1/comment_pb2_grpc.py +0 -0
  146. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/comment/v1/comment_pb2_grpc.pyi +0 -0
  147. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/__init__.py +0 -0
  148. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/__init__.py +0 -0
  149. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/__init__.py +0 -0
  150. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/calculated_channels_pb2.py +0 -0
  151. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/calculated_channels_pb2.pyi +0 -0
  152. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/calculated_channels_pb2_grpc.py +0 -0
  153. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/calculated_channels_pb2_grpc.pyi +0 -0
  154. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_bit_field_element_pb2.py +0 -0
  155. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_bit_field_element_pb2.pyi +0 -0
  156. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_bit_field_element_pb2_grpc.py +0 -0
  157. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_bit_field_element_pb2_grpc.pyi +0 -0
  158. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_config_pb2.py +0 -0
  159. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_config_pb2.pyi +0 -0
  160. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_config_pb2_grpc.py +0 -0
  161. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_config_pb2_grpc.pyi +0 -0
  162. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_data_type_pb2.py +0 -0
  163. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_data_type_pb2.pyi +0 -0
  164. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_data_type_pb2_grpc.py +0 -0
  165. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_data_type_pb2_grpc.pyi +0 -0
  166. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_enum_type_pb2.py +0 -0
  167. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_enum_type_pb2.pyi +0 -0
  168. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_enum_type_pb2_grpc.py +0 -0
  169. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_enum_type_pb2_grpc.pyi +0 -0
  170. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/organization_pb2.py +0 -0
  171. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/organization_pb2.pyi +0 -0
  172. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/organization_pb2_grpc.py +0 -0
  173. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/organization_pb2_grpc.pyi +0 -0
  174. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/resource_identifier_pb2.py +0 -0
  175. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/resource_identifier_pb2.pyi +0 -0
  176. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/resource_identifier_pb2_grpc.py +0 -0
  177. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/resource_identifier_pb2_grpc.pyi +0 -0
  178. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/resource_ref_pb2.py +0 -0
  179. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/resource_ref_pb2.pyi +0 -0
  180. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/resource_ref_pb2_grpc.py +0 -0
  181. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/resource_ref_pb2_grpc.pyi +0 -0
  182. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/user_defined_functions_pb2.py +0 -0
  183. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/user_defined_functions_pb2.pyi +0 -0
  184. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/user_defined_functions_pb2_grpc.py +0 -0
  185. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/user_defined_functions_pb2_grpc.pyi +0 -0
  186. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/user_pb2.py +0 -0
  187. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/user_pb2.pyi +0 -0
  188. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/user_pb2_grpc.py +0 -0
  189. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/user_pb2_grpc.pyi +0 -0
  190. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/v1/__init__.py +0 -0
  191. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/v1/action_type_pb2.py +0 -0
  192. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/v1/action_type_pb2.pyi +0 -0
  193. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/v1/action_type_pb2_grpc.py +0 -0
  194. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/v1/action_type_pb2_grpc.pyi +0 -0
  195. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/v1/filter_field_pb2.py +0 -0
  196. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/v1/filter_field_pb2.pyi +0 -0
  197. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/v1/filter_field_pb2_grpc.py +0 -0
  198. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/v1/filter_field_pb2_grpc.pyi +0 -0
  199. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/v1/resource_type_pb2.py +0 -0
  200. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/v1/resource_type_pb2.pyi +0 -0
  201. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/v1/resource_type_pb2_grpc.py +0 -0
  202. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/common/v1/resource_type_pb2_grpc.pyi +0 -0
  203. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/data/__init__.py +0 -0
  204. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/data/v1/__init__.py +0 -0
  205. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/data/v1/data_pb2.py +0 -0
  206. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/data/v1/data_pb2.pyi +0 -0
  207. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/data/v1/data_pb2_grpc.py +0 -0
  208. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/data/v1/data_pb2_grpc.pyi +0 -0
  209. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/data/v2/__init__.py +0 -0
  210. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/data/v2/data_pb2.py +0 -0
  211. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/data/v2/data_pb2.pyi +0 -0
  212. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/data/v2/data_pb2_grpc.py +0 -0
  213. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/data/v2/data_pb2_grpc.pyi +0 -0
  214. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/data_imports/__init__.py +0 -0
  215. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/data_imports/v2/__init__.py +0 -0
  216. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/data_imports/v2/data_imports_pb2.py +0 -0
  217. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/data_imports/v2/data_imports_pb2.pyi +0 -0
  218. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/data_imports/v2/data_imports_pb2_grpc.py +0 -0
  219. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/data_imports/v2/data_imports_pb2_grpc.pyi +0 -0
  220. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/dlq_errors/__init__.py +0 -0
  221. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/dlq_errors/v2/__init__.py +0 -0
  222. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/dlq_errors/v2/dlq_errors_pb2.py +0 -0
  223. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/dlq_errors/v2/dlq_errors_pb2.pyi +0 -0
  224. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/dlq_errors/v2/dlq_errors_pb2_grpc.py +0 -0
  225. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/dlq_errors/v2/dlq_errors_pb2_grpc.pyi +0 -0
  226. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/exports/__init__.py +0 -0
  227. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/exports/v1/__init__.py +0 -0
  228. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/exports/v1/exports_pb2.py +0 -0
  229. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/exports/v1/exports_pb2.pyi +0 -0
  230. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/exports/v1/exports_pb2_grpc.py +0 -0
  231. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/exports/v1/exports_pb2_grpc.pyi +0 -0
  232. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/external_sync/__init__.py +0 -0
  233. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/external_sync/v1/__init__.py +0 -0
  234. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/external_sync/v1/external_sync_pb2.py +0 -0
  235. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/external_sync/v1/external_sync_pb2.pyi +0 -0
  236. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/external_sync/v1/external_sync_pb2_grpc.py +0 -0
  237. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/external_sync/v1/external_sync_pb2_grpc.pyi +0 -0
  238. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ingest/__init__.py +0 -0
  239. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ingest/v1/__init__.py +0 -0
  240. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ingest/v1/ingest_pb2.py +0 -0
  241. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ingest/v1/ingest_pb2.pyi +0 -0
  242. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ingest/v1/ingest_pb2_grpc.py +0 -0
  243. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ingest/v1/ingest_pb2_grpc.pyi +0 -0
  244. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/__init__.py +0 -0
  245. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/v1/__init__.py +0 -0
  246. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/v1/ingestion_configs_pb2.py +0 -0
  247. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/v1/ingestion_configs_pb2.pyi +0 -0
  248. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/v1/ingestion_configs_pb2_grpc.py +0 -0
  249. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/v1/ingestion_configs_pb2_grpc.pyi +0 -0
  250. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/v2/__init__.py +0 -0
  251. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/v2/ingestion_configs_pb2.py +0 -0
  252. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/v2/ingestion_configs_pb2.pyi +0 -0
  253. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/v2/ingestion_configs_pb2_grpc.py +0 -0
  254. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/v2/ingestion_configs_pb2_grpc.pyi +0 -0
  255. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/jobs/__init__.py +0 -0
  256. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/jobs/v1/__init__.py +0 -0
  257. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/jobs/v1/jobs_pb2.py +0 -0
  258. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/jobs/v1/jobs_pb2.pyi +0 -0
  259. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/jobs/v1/jobs_pb2_grpc.py +0 -0
  260. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/jobs/v1/jobs_pb2_grpc.pyi +0 -0
  261. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/me/__init__.py +0 -0
  262. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/me/v2/__init__.py +0 -0
  263. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/me/v2/me_pb2.py +0 -0
  264. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/me/v2/me_pb2.pyi +0 -0
  265. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/me/v2/me_pb2_grpc.py +0 -0
  266. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/me/v2/me_pb2_grpc.pyi +0 -0
  267. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/metadata/__init__.py +0 -0
  268. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/metadata/v1/__init__.py +0 -0
  269. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/metadata/v1/metadata_pb2.py +0 -0
  270. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/metadata/v1/metadata_pb2.pyi +0 -0
  271. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/metadata/v1/metadata_pb2_grpc.py +0 -0
  272. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/metadata/v1/metadata_pb2_grpc.pyi +0 -0
  273. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/notifications/__init__.py +0 -0
  274. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/notifications/v1/__init__.py +0 -0
  275. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/notifications/v1/notifications_pb2.py +0 -0
  276. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/notifications/v1/notifications_pb2.pyi +0 -0
  277. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/notifications/v1/notifications_pb2_grpc.py +0 -0
  278. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/notifications/v1/notifications_pb2_grpc.pyi +0 -0
  279. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/panel_configurations/__init__.py +0 -0
  280. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/panel_configurations/v1/__init__.py +0 -0
  281. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/panel_configurations/v1/panel_configuration_pb2.py +0 -0
  282. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/panel_configurations/v1/panel_configuration_pb2.pyi +0 -0
  283. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/panel_configurations/v1/panel_configuration_pb2_grpc.py +0 -0
  284. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/panel_configurations/v1/panel_configuration_pb2_grpc.pyi +0 -0
  285. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ping/__init__.py +0 -0
  286. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ping/v1/__init__.py +0 -0
  287. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ping/v1/ping_pb2.py +0 -0
  288. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ping/v1/ping_pb2.pyi +0 -0
  289. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ping/v1/ping_pb2_grpc.py +0 -0
  290. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/ping/v1/ping_pb2_grpc.pyi +0 -0
  291. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/protobuf_descriptors/__init__.py +0 -0
  292. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/protobuf_descriptors/v2/__init__.py +0 -0
  293. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/protobuf_descriptors/v2/channel_parsing_options_pb2.py +0 -0
  294. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/protobuf_descriptors/v2/channel_parsing_options_pb2.pyi +0 -0
  295. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/protobuf_descriptors/v2/channel_parsing_options_pb2_grpc.py +0 -0
  296. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/protobuf_descriptors/v2/channel_parsing_options_pb2_grpc.pyi +0 -0
  297. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/protobuf_descriptors/v2/protobuf_descriptors_pb2.py +0 -0
  298. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/protobuf_descriptors/v2/protobuf_descriptors_pb2.pyi +0 -0
  299. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/protobuf_descriptors/v2/protobuf_descriptors_pb2_grpc.py +0 -0
  300. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/protobuf_descriptors/v2/protobuf_descriptors_pb2_grpc.pyi +0 -0
  301. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/py.typed +0 -0
  302. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/remote_files/__init__.py +0 -0
  303. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/remote_files/v1/__init__.py +0 -0
  304. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/remote_files/v1/remote_files_pb2.py +0 -0
  305. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/remote_files/v1/remote_files_pb2.pyi +0 -0
  306. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/remote_files/v1/remote_files_pb2_grpc.py +0 -0
  307. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/remote_files/v1/remote_files_pb2_grpc.pyi +0 -0
  308. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/report_templates/__init__.py +0 -0
  309. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/report_templates/v1/__init__.py +0 -0
  310. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/report_templates/v1/report_templates_pb2.py +0 -0
  311. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/report_templates/v1/report_templates_pb2.pyi +0 -0
  312. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/report_templates/v1/report_templates_pb2_grpc.py +0 -0
  313. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/report_templates/v1/report_templates_pb2_grpc.pyi +0 -0
  314. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/reports/__init__.py +0 -0
  315. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/reports/v1/__init__.py +0 -0
  316. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/reports/v1/reports_pb2.py +0 -0
  317. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/reports/v1/reports_pb2.pyi +0 -0
  318. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/reports/v1/reports_pb2_grpc.py +0 -0
  319. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/reports/v1/reports_pb2_grpc.pyi +0 -0
  320. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/roles/__init__.py +0 -0
  321. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/roles/v2/__init__.py +0 -0
  322. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/roles/v2/roles_pb2.py +0 -0
  323. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/roles/v2/roles_pb2.pyi +0 -0
  324. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/roles/v2/roles_pb2_grpc.py +0 -0
  325. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/roles/v2/roles_pb2_grpc.pyi +0 -0
  326. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/rule_evaluation/__init__.py +0 -0
  327. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/rule_evaluation/v1/__init__.py +0 -0
  328. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/rule_evaluation/v1/rule_evaluation_pb2.py +0 -0
  329. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/rule_evaluation/v1/rule_evaluation_pb2.pyi +0 -0
  330. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/rule_evaluation/v1/rule_evaluation_pb2_grpc.py +0 -0
  331. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/rule_evaluation/v1/rule_evaluation_pb2_grpc.pyi +0 -0
  332. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/rules/__init__.py +0 -0
  333. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/rules/v1/__init__.py +0 -0
  334. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/rules/v1/rules_pb2.py +0 -0
  335. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/rules/v1/rules_pb2.pyi +0 -0
  336. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/rules/v1/rules_pb2_grpc.py +0 -0
  337. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/rules/v1/rules_pb2_grpc.pyi +0 -0
  338. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/runs/__init__.py +0 -0
  339. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/runs/v2/__init__.py +0 -0
  340. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/runs/v2/runs_pb2.py +0 -0
  341. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/runs/v2/runs_pb2.pyi +0 -0
  342. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/runs/v2/runs_pb2_grpc.py +0 -0
  343. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/runs/v2/runs_pb2_grpc.pyi +0 -0
  344. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/saved_searches/__init__.py +0 -0
  345. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/saved_searches/v1/__init__.py +0 -0
  346. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/saved_searches/v1/saved_searches_pb2.py +0 -0
  347. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/saved_searches/v1/saved_searches_pb2.pyi +0 -0
  348. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/saved_searches/v1/saved_searches_pb2_grpc.py +0 -0
  349. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/saved_searches/v1/saved_searches_pb2_grpc.pyi +0 -0
  350. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/tags/__init__.py +0 -0
  351. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/tags/v1/__init__.py +0 -0
  352. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/tags/v1/tags_pb2.py +0 -0
  353. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/tags/v1/tags_pb2.pyi +0 -0
  354. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/tags/v1/tags_pb2_grpc.py +0 -0
  355. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/tags/v1/tags_pb2_grpc.pyi +0 -0
  356. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/tags/v2/__init__.py +0 -0
  357. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/tags/v2/tags_pb2.py +0 -0
  358. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/tags/v2/tags_pb2.pyi +0 -0
  359. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/tags/v2/tags_pb2_grpc.py +0 -0
  360. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/tags/v2/tags_pb2_grpc.pyi +0 -0
  361. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/test_reports/__init__.py +0 -0
  362. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/test_reports/v1/__init__.py +0 -0
  363. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/test_reports/v1/test_reports_pb2.py +0 -0
  364. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/test_reports/v1/test_reports_pb2.pyi +0 -0
  365. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/test_reports/v1/test_reports_pb2_grpc.py +0 -0
  366. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/test_reports/v1/test_reports_pb2_grpc.pyi +0 -0
  367. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/unit/__init__.py +0 -0
  368. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/unit/v2/__init__.py +0 -0
  369. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/unit/v2/unit_pb2.py +0 -0
  370. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/unit/v2/unit_pb2.pyi +0 -0
  371. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/unit/v2/unit_pb2_grpc.py +0 -0
  372. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/unit/v2/unit_pb2_grpc.pyi +0 -0
  373. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/user_defined_functions/__init__.py +0 -0
  374. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/user_defined_functions/v1/__init__.py +0 -0
  375. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/user_defined_functions/v1/user_defined_functions_pb2.py +0 -0
  376. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/user_defined_functions/v1/user_defined_functions_pb2.pyi +0 -0
  377. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/user_defined_functions/v1/user_defined_functions_pb2_grpc.py +0 -0
  378. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/user_defined_functions/v1/user_defined_functions_pb2_grpc.pyi +0 -0
  379. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/user_groups/__init__.py +0 -0
  380. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/user_groups/v2/__init__.py +0 -0
  381. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/user_groups/v2/user_groups_pb2.py +0 -0
  382. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/user_groups/v2/user_groups_pb2.pyi +0 -0
  383. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/user_groups/v2/user_groups_pb2_grpc.py +0 -0
  384. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/user_groups/v2/user_groups_pb2_grpc.pyi +0 -0
  385. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/users/__init__.py +0 -0
  386. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/users/v2/__init__.py +0 -0
  387. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/users/v2/users_pb2.py +0 -0
  388. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/users/v2/users_pb2.pyi +0 -0
  389. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/users/v2/users_pb2_grpc.py +0 -0
  390. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/users/v2/users_pb2_grpc.pyi +0 -0
  391. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/views/__init__.py +0 -0
  392. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/views/v1/__init__.py +0 -0
  393. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/views/v1/views_pb2.py +0 -0
  394. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/views/v1/views_pb2.pyi +0 -0
  395. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/views/v1/views_pb2_grpc.py +0 -0
  396. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/views/v1/views_pb2_grpc.pyi +0 -0
  397. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/views/v2/__init__.py +0 -0
  398. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/views/v2/views_pb2.py +0 -0
  399. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/views/v2/views_pb2.pyi +0 -0
  400. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/views/v2/views_pb2_grpc.py +0 -0
  401. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/views/v2/views_pb2_grpc.pyi +0 -0
  402. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/webhooks/__init__.py +0 -0
  403. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/webhooks/v1/__init__.py +0 -0
  404. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/webhooks/v1/webhooks_pb2.py +0 -0
  405. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/webhooks/v1/webhooks_pb2.pyi +0 -0
  406. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/webhooks/v1/webhooks_pb2_grpc.py +0 -0
  407. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift/webhooks/v1/webhooks_pb2_grpc.pyi +0 -0
  408. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/__init__.py +0 -0
  409. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/__init__.py +0 -0
  410. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/gen_pyi.py +0 -0
  411. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/__init__.py +0 -0
  412. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/_async_interceptors/__init__.py +0 -0
  413. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/_async_interceptors/base.py +0 -0
  414. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/_async_interceptors/metadata.py +0 -0
  415. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/_interceptors/__init__.py +0 -0
  416. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/_interceptors/base.py +0 -0
  417. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/_interceptors/context.py +0 -0
  418. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/_interceptors/metadata.py +0 -0
  419. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/keepalive.py +0 -0
  420. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/server_interceptors/__init__.py +0 -0
  421. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/server_interceptors/server_interceptor.py +0 -0
  422. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/transport_test.py +0 -0
  423. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/_test_results_log.py +0 -0
  424. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/assets.py +0 -0
  425. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/base.py +0 -0
  426. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/calculated_channels.py +0 -0
  427. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/data.py +0 -0
  428. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/data_imports.py +0 -0
  429. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/ingestion.py +0 -0
  430. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/jobs.py +0 -0
  431. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/ping.py +0 -0
  432. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/remote_files.py +0 -0
  433. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/reports.py +0 -0
  434. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/runs.py +0 -0
  435. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/tags.py +0 -0
  436. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/test_results.py +0 -0
  437. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/upload.py +0 -0
  438. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/rest.py +0 -0
  439. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/time.py +0 -0
  440. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/util/__init__.py +0 -0
  441. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/util/executor.py +0 -0
  442. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/util/file.py +0 -0
  443. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/util/numpy_types.py +0 -0
  444. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/util/tdms.py +0 -0
  445. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/util/timestamp.py +0 -0
  446. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/_internal/util/util.py +0 -0
  447. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/config.py +0 -0
  448. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/errors.py +0 -0
  449. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/py.typed +0 -0
  450. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/resources/__init__.py +0 -0
  451. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/resources/_base.py +0 -0
  452. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/resources/assets.py +0 -0
  453. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/resources/calculated_channels.py +0 -0
  454. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/resources/exports.py +0 -0
  455. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/resources/file_attachments.py +0 -0
  456. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/resources/ingestion.py +0 -0
  457. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/resources/jobs.py +0 -0
  458. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/resources/ping.py +0 -0
  459. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/resources/py.typed +0 -0
  460. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/resources/reports.py +0 -0
  461. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/resources/rules.py +0 -0
  462. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/resources/runs.py +0 -0
  463. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/resources/sync_stubs/__init__.py +0 -0
  464. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/resources/sync_stubs/py.typed +0 -0
  465. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/resources/tags.py +0 -0
  466. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/resources/test_results.py +0 -0
  467. {sift_stack_py-0.16.1/lib/sift_client/_tests/_internal → sift_stack_py-0.17.0/lib/sift_client/scripts}/__init__.py +0 -0
  468. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/scripts/import_test_result_log.py +0 -0
  469. {sift_stack_py-0.16.1/lib/sift_client/_tests/_internal/low_level_wrappers → sift_stack_py-0.17.0/lib/sift_client/sift_types/_mixins}/__init__.py +0 -0
  470. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/_mixins/file_attachments.py +0 -0
  471. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/asset.py +0 -0
  472. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/export.py +0 -0
  473. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/file_attachment.py +0 -0
  474. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/ingestion.py +0 -0
  475. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/job.py +0 -0
  476. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/report.py +0 -0
  477. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/run.py +0 -0
  478. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/tag.py +0 -0
  479. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/test_report.py +0 -0
  480. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/transport/__init__.py +0 -0
  481. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/transport/base_connection.py +0 -0
  482. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/util/__init__.py +0 -0
  483. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/util/cel_utils.py +0 -0
  484. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/util/metadata.py +0 -0
  485. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/util/test_results/__init__.py +0 -0
  486. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/util/test_results/bounds.py +0 -0
  487. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/util/test_results/context_manager.py +0 -0
  488. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/util/test_results/pytest_util.py +0 -0
  489. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_client/util/util.py +0 -0
  490. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/__init__.py +0 -0
  491. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/_internal/__init__.py +0 -0
  492. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/_internal/cel.py +0 -0
  493. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/_internal/channel.py +0 -0
  494. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/_internal/convert/__init__.py +0 -0
  495. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/_internal/convert/json.py +0 -0
  496. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/_internal/convert/protobuf.py +0 -0
  497. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/_internal/convert/timestamp.py +0 -0
  498. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/_internal/metadata.py +0 -0
  499. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/_internal/metadata_test.py +0 -0
  500. {sift_stack_py-0.16.1/lib/sift_client/_tests/resources → sift_stack_py-0.17.0/lib/sift_py/_internal/test_util}/__init__.py +0 -0
  501. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/_internal/test_util/channel.py +0 -0
  502. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/_internal/test_util/fn.py +0 -0
  503. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/_internal/test_util/server_interceptor.py +0 -0
  504. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/_internal/time.py +0 -0
  505. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/_internal/user.py +0 -0
  506. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/_rest_test.py +0 -0
  507. {sift_stack_py-0.16.1/lib/sift_client/_tests/sift_types → sift_stack_py-0.17.0/lib/sift_py/asset}/__init__.py +0 -0
  508. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/asset/_config_test.py +0 -0
  509. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/asset/_internal/shared.py +0 -0
  510. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/asset/_service_test.py +0 -0
  511. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/asset/config.py +0 -0
  512. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/asset/service.py +0 -0
  513. {sift_stack_py-0.16.1/lib/sift_client/_tests/util → sift_stack_py-0.17.0/lib/sift_py/calculated_channels}/__init__.py +0 -0
  514. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/calculated_channels/_service_test.py +0 -0
  515. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/calculated_channels/config.py +0 -0
  516. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/calculated_channels/service.py +0 -0
  517. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data/__init__.py +0 -0
  518. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data/_channel.py +0 -0
  519. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data/_deserialize.py +0 -0
  520. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data/_deserialize_test.py +0 -0
  521. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data/_service_test.py +0 -0
  522. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data/_validate.py +0 -0
  523. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data/error.py +0 -0
  524. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data/query.py +0 -0
  525. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data/service.py +0 -0
  526. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/__init__.py +0 -0
  527. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_config.py +0 -0
  528. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_config_test.py +0 -0
  529. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_csv_test.py +0 -0
  530. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_hdf5_test.py +0 -0
  531. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_parquet_test.py +0 -0
  532. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_ros_channel.py +0 -0
  533. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_rosbag_test.py +0 -0
  534. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_status_test.py +0 -0
  535. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_tdms_test.py +0 -0
  536. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_utils.py +0 -0
  537. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_utils_test.py +0 -0
  538. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/ch10.py +0 -0
  539. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/config.py +0 -0
  540. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/csv.py +0 -0
  541. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/hdf5.py +0 -0
  542. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/parquet.py +0 -0
  543. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/parquet_complex_types.py +0 -0
  544. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/rosbags.py +0 -0
  545. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/status.py +0 -0
  546. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/tdms.py +0 -0
  547. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/tempfile.py +0 -0
  548. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/data_import/time_format.py +0 -0
  549. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/error.py +0 -0
  550. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/file_attachment/__init__.py +0 -0
  551. {sift_stack_py-0.16.1/lib/sift_client/scripts → sift_stack_py-0.17.0/lib/sift_py/file_attachment/_internal}/__init__.py +0 -0
  552. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/file_attachment/_internal/download.py +0 -0
  553. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/file_attachment/_internal/upload.py +0 -0
  554. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/file_attachment/_service_test.py +0 -0
  555. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/file_attachment/entity.py +0 -0
  556. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/file_attachment/metadata.py +0 -0
  557. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/file_attachment/service.py +0 -0
  558. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/grpc/__init__.py +0 -0
  559. {sift_stack_py-0.16.1/lib/sift_client/sift_types/_mixins → sift_stack_py-0.17.0/lib/sift_py/grpc/_async_interceptors}/__init__.py +0 -0
  560. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/grpc/_async_interceptors/base.py +0 -0
  561. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/grpc/_async_interceptors/metadata.py +0 -0
  562. {sift_stack_py-0.16.1/lib/sift_py/_internal/test_util → sift_stack_py-0.17.0/lib/sift_py/grpc/_interceptors}/__init__.py +0 -0
  563. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/grpc/_interceptors/base.py +0 -0
  564. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/grpc/_interceptors/context.py +0 -0
  565. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/grpc/_interceptors/metadata.py +0 -0
  566. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/grpc/_retry.py +0 -0
  567. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/grpc/keepalive.py +0 -0
  568. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/grpc/transport.py +0 -0
  569. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/grpc/transport_test.py +0 -0
  570. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/__init__.py +0 -0
  571. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/_internal/__init__.py +0 -0
  572. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/_internal/channel.py +0 -0
  573. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/_internal/error.py +0 -0
  574. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/_internal/ingest.py +0 -0
  575. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/_internal/ingest_test.py +0 -0
  576. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/_internal/ingestion_config.py +0 -0
  577. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/_internal/run.py +0 -0
  578. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/_service_test.py +0 -0
  579. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/buffer.py +0 -0
  580. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/channel.py +0 -0
  581. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/config/__init__.py +0 -0
  582. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/config/_telemetry_test.py +0 -0
  583. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/config/telemetry.py +0 -0
  584. {sift_stack_py-0.16.1/lib/sift_py/asset → sift_stack_py-0.17.0/lib/sift_py/ingestion/config/yaml}/__init__.py +0 -0
  585. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/config/yaml/error.py +0 -0
  586. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/config/yaml/load.py +0 -0
  587. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/config/yaml/spec.py +0 -0
  588. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/config/yaml/test_load.py +0 -0
  589. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/flow.py +0 -0
  590. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/manager.py +0 -0
  591. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/rule/__init__.py +0 -0
  592. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/rule/config.py +0 -0
  593. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/service.py +0 -0
  594. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/py.typed +0 -0
  595. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/report/_report_test.py +0 -0
  596. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/report/service.py +0 -0
  597. {sift_stack_py-0.16.1/lib/sift_py/calculated_channels → sift_stack_py-0.17.0/lib/sift_py/report_templates}/__init__.py +0 -0
  598. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/report_templates/_config_test.py +0 -0
  599. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/report_templates/_service_test.py +0 -0
  600. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/report_templates/config.py +0 -0
  601. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/report_templates/service.py +0 -0
  602. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/rest.py +0 -0
  603. {sift_stack_py-0.16.1/lib/sift_py/file_attachment/_internal → sift_stack_py-0.17.0/lib/sift_py/rule}/__init__.py +0 -0
  604. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/rule/_config_test.py +0 -0
  605. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/rule/_service_test.py +0 -0
  606. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/rule/config.py +0 -0
  607. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/rule/service.py +0 -0
  608. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/rule_evaluation/_service_test.py +0 -0
  609. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/rule_evaluation/service.py +0 -0
  610. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/tag/_internal/shared.py +0 -0
  611. {sift_stack_py-0.16.1/lib/sift_py/grpc/_async_interceptors → sift_stack_py-0.17.0/lib/sift_py/yaml}/__init__.py +0 -0
  612. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/yaml/_channel_test.py +0 -0
  613. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/yaml/_rule_test.py +0 -0
  614. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/yaml/_utils_test.py +0 -0
  615. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/yaml/calculated_channels.py +0 -0
  616. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/yaml/channel.py +0 -0
  617. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/yaml/report_templates.py +0 -0
  618. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/yaml/rule.py +0 -0
  619. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_py/yaml/utils.py +0 -0
  620. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_stack_py.egg-info/dependency_links.txt +0 -0
  621. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_stack_py.egg-info/entry_points.txt +0 -0
  622. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/lib/sift_stack_py.egg-info/top_level.txt +0 -0
  623. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/setup.cfg +0 -0
  624. {sift_stack_py-0.16.1 → sift_stack_py-0.17.0}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sift_stack_py
3
- Version: 0.16.1
3
+ Version: 0.17.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.
@@ -53,7 +53,7 @@ Requires-Dist: npTDMS~=1.9; extra == "all"
53
53
  Requires-Dist: polars~=1.8; extra == "all"
54
54
  Requires-Dist: pyOpenSSL<24.0.0; extra == "all"
55
55
  Requires-Dist: pyarrow>=17.0.0; extra == "all"
56
- Requires-Dist: rosbags~=0.0; extra == "all"
56
+ Requires-Dist: rosbags~=0.0; python_full_version >= "3.8.2" and extra == "all"
57
57
  Requires-Dist: sift-stream-bindings==0.3.0; extra == "all"
58
58
  Requires-Dist: types-pyOpenSSL<24.0.0; extra == "all"
59
59
  Provides-Extra: build
@@ -89,7 +89,7 @@ Requires-Dist: pytest-benchmark==4.0.0; extra == "dev-all"
89
89
  Requires-Dist: pytest-dotenv==0.5.2; extra == "dev-all"
90
90
  Requires-Dist: pytest-mock==3.14.0; extra == "dev-all"
91
91
  Requires-Dist: pytest==8.2.2; extra == "dev-all"
92
- Requires-Dist: rosbags~=0.0; extra == "dev-all"
92
+ Requires-Dist: rosbags~=0.0; python_full_version >= "3.8.2" and extra == "dev-all"
93
93
  Requires-Dist: ruff~=0.12.10; extra == "dev-all"
94
94
  Requires-Dist: sift-stream-bindings==0.3.0; extra == "dev-all"
95
95
  Requires-Dist: tomlkit~=0.13.3; extra == "dev-all"
@@ -106,27 +106,27 @@ Requires-Dist: pytest==8.2.2; extra == "development"
106
106
  Requires-Dist: ruff~=0.12.10; extra == "development"
107
107
  Requires-Dist: tomlkit~=0.13.3; extra == "development"
108
108
  Provides-Extra: docs
109
- Requires-Dist: griffe-pydantic==1.3.1; extra == "docs"
110
- Requires-Dist: mike==2.1.3; extra == "docs"
111
- Requires-Dist: mkdocs-api-autonav==0.4.0; extra == "docs"
112
- Requires-Dist: mkdocs-include-markdown-plugin==7.1.6; extra == "docs"
113
- Requires-Dist: mkdocs-jupyter==0.25.1; extra == "docs"
114
- Requires-Dist: mkdocs-material==9.7.5; extra == "docs"
115
- Requires-Dist: mkdocs==1.6.1; extra == "docs"
116
- Requires-Dist: mkdocstrings[python]==1.0.3; extra == "docs"
109
+ Requires-Dist: griffe-pydantic==1.3.1; python_version >= "3.10" and extra == "docs"
110
+ Requires-Dist: mike==2.1.3; python_version >= "3.10" and extra == "docs"
111
+ Requires-Dist: mkdocs-api-autonav==0.4.0; python_version >= "3.10" and extra == "docs"
112
+ Requires-Dist: mkdocs-include-markdown-plugin==7.1.6; python_version >= "3.10" and extra == "docs"
113
+ Requires-Dist: mkdocs-jupyter==0.25.1; python_version >= "3.10" and extra == "docs"
114
+ Requires-Dist: mkdocs-material==9.7.5; python_version >= "3.10" and extra == "docs"
115
+ Requires-Dist: mkdocs==1.6.1; python_version >= "3.10" and extra == "docs"
116
+ Requires-Dist: mkdocstrings[python]==1.0.3; python_version >= "3.10" and extra == "docs"
117
117
  Provides-Extra: docs-build
118
118
  Requires-Dist: build==1.2.1; extra == "docs-build"
119
119
  Requires-Dist: cffi~=1.14; extra == "docs-build"
120
- Requires-Dist: griffe-pydantic==1.3.1; extra == "docs-build"
120
+ Requires-Dist: griffe-pydantic==1.3.1; python_version >= "3.10" and extra == "docs-build"
121
121
  Requires-Dist: grpcio-testing~=1.13; extra == "docs-build"
122
122
  Requires-Dist: h5py~=3.11; extra == "docs-build"
123
- Requires-Dist: mike==2.1.3; extra == "docs-build"
124
- Requires-Dist: mkdocs-api-autonav==0.4.0; extra == "docs-build"
125
- Requires-Dist: mkdocs-include-markdown-plugin==7.1.6; extra == "docs-build"
126
- Requires-Dist: mkdocs-jupyter==0.25.1; extra == "docs-build"
127
- Requires-Dist: mkdocs-material==9.7.5; extra == "docs-build"
128
- Requires-Dist: mkdocs==1.6.1; extra == "docs-build"
129
- Requires-Dist: mkdocstrings[python]==1.0.3; extra == "docs-build"
123
+ Requires-Dist: mike==2.1.3; python_version >= "3.10" and extra == "docs-build"
124
+ Requires-Dist: mkdocs-api-autonav==0.4.0; python_version >= "3.10" and extra == "docs-build"
125
+ Requires-Dist: mkdocs-include-markdown-plugin==7.1.6; python_version >= "3.10" and extra == "docs-build"
126
+ Requires-Dist: mkdocs-jupyter==0.25.1; python_version >= "3.10" and extra == "docs-build"
127
+ Requires-Dist: mkdocs-material==9.7.5; python_version >= "3.10" and extra == "docs-build"
128
+ Requires-Dist: mkdocs==1.6.1; python_version >= "3.10" and extra == "docs-build"
129
+ Requires-Dist: mkdocstrings[python]==1.0.3; python_version >= "3.10" and extra == "docs-build"
130
130
  Requires-Dist: mypy==1.10.0; extra == "docs-build"
131
131
  Requires-Dist: npTDMS~=1.9; extra == "docs-build"
132
132
  Requires-Dist: pdoc==14.5.0; extra == "docs-build"
@@ -139,7 +139,7 @@ Requires-Dist: pytest-benchmark==4.0.0; extra == "docs-build"
139
139
  Requires-Dist: pytest-dotenv==0.5.2; extra == "docs-build"
140
140
  Requires-Dist: pytest-mock==3.14.0; extra == "docs-build"
141
141
  Requires-Dist: pytest==8.2.2; extra == "docs-build"
142
- Requires-Dist: rosbags~=0.0; extra == "docs-build"
142
+ Requires-Dist: rosbags~=0.0; python_full_version >= "3.8.2" and extra == "docs-build"
143
143
  Requires-Dist: ruff~=0.12.10; extra == "docs-build"
144
144
  Requires-Dist: sift-stream-bindings==0.3.0; extra == "docs-build"
145
145
  Requires-Dist: tomlkit~=0.13.3; extra == "docs-build"
@@ -148,7 +148,7 @@ Provides-Extra: file-imports
148
148
  Requires-Dist: h5py~=3.11; extra == "file-imports"
149
149
  Requires-Dist: npTDMS~=1.9; extra == "file-imports"
150
150
  Requires-Dist: polars~=1.8; extra == "file-imports"
151
- Requires-Dist: rosbags~=0.0; extra == "file-imports"
151
+ Requires-Dist: rosbags~=0.0; python_full_version >= "3.8.2" and extra == "file-imports"
152
152
  Provides-Extra: hdf5
153
153
  Requires-Dist: h5py~=3.11; extra == "hdf5"
154
154
  Requires-Dist: polars~=1.8; extra == "hdf5"
@@ -157,7 +157,7 @@ Requires-Dist: cffi~=1.14; extra == "openssl"
157
157
  Requires-Dist: pyOpenSSL<24.0.0; extra == "openssl"
158
158
  Requires-Dist: types-pyOpenSSL<24.0.0; extra == "openssl"
159
159
  Provides-Extra: rosbags
160
- Requires-Dist: rosbags~=0.0; extra == "rosbags"
160
+ Requires-Dist: rosbags~=0.0; python_full_version >= "3.8.2" and extra == "rosbags"
161
161
  Provides-Extra: sift-stream
162
162
  Requires-Dist: sift-stream-bindings==0.3.0; extra == "sift-stream"
163
163
  Provides-Extra: sift-stream-bindings
@@ -4,7 +4,13 @@ import json
4
4
  from typing import ClassVar, TypedDict
5
5
 
6
6
  from grpc import StatusCode
7
- from typing_extensions import Self
7
+ from typing_extensions import NotRequired, Self
8
+
9
+
10
+ def _format_grpc_duration(seconds: float) -> str:
11
+ """Format seconds as a protobuf Duration string, e.g. ``60s`` or ``0.5s``."""
12
+ trimmed = f"{seconds:.9f}".rstrip("0").rstrip(".")
13
+ return f"{trimmed}s"
8
14
 
9
15
 
10
16
  class RetryPolicy:
@@ -50,8 +56,24 @@ class RetryPolicy:
50
56
  return json.dumps(self.config)
51
57
 
52
58
  @classmethod
53
- def default(cls) -> Self:
54
- return cls(config=cls.DEFAULT_POLICY)
59
+ def default(cls, timeout_seconds: float | None = None) -> Self:
60
+ """Build the default policy, optionally with a per-call deadline.
61
+
62
+ When ``timeout_seconds`` is set, every method config carries a
63
+ ``timeout`` so the C-core fails a stalled call with ``DEADLINE_EXCEEDED``
64
+ instead of hanging. The deadline bounds the whole call, retries included,
65
+ and a per-call ``timeout=`` still overrides it.
66
+ """
67
+ if timeout_seconds is None:
68
+ return cls(config=cls.DEFAULT_POLICY)
69
+ duration = _format_grpc_duration(timeout_seconds)
70
+ config: RetryConfig = {
71
+ "methodConfig": [
72
+ {**method_config, "timeout": duration}
73
+ for method_config in cls.DEFAULT_POLICY["methodConfig"]
74
+ ]
75
+ }
76
+ return cls(config=config)
55
77
 
56
78
 
57
79
  class RetryConfig(TypedDict):
@@ -61,6 +83,10 @@ class RetryConfig(TypedDict):
61
83
  class MethodConfigDict(TypedDict):
62
84
  name: list[dict[str, str]]
63
85
  retryPolicy: RetryConfigDict
86
+ # Applies to all methods via the wildcard `name` matcher above. If a
87
+ # server-streaming RPC is ever added to this channel, scope this by method
88
+ # name so the deadline doesn't clip a long-lived stream.
89
+ timeout: NotRequired[str]
64
90
 
65
91
 
66
92
  class RetryConfigDict(TypedDict):
@@ -31,6 +31,9 @@ from sift_client._internal.grpc_transport.keepalive import DEFAULT_KEEPALIVE_CON
31
31
  SiftChannel: TypeAlias = grpc.Channel
32
32
  SiftAsyncChannel: TypeAlias = grpc_aio.Channel
33
33
 
34
+ DEFAULT_REQUEST_TIMEOUT_SECONDS = 60.0
35
+ """Default per-call deadline applied to unary RPCs that don't set their own."""
36
+
34
37
 
35
38
  def get_ssl_credentials(cert_via_openssl: bool) -> grpc.ChannelCredentials:
36
39
  """
@@ -155,9 +158,10 @@ def _compute_channel_options(opts: SiftChannelConfig) -> list[tuple[str, Any]]:
155
158
  Initialize all [channel options](https://github.com/grpc/grpc/blob/v1.64.x/include/grpc/impl/channel_arg_names.h) here.
156
159
  """
157
160
 
161
+ request_timeout = opts.get("request_timeout", DEFAULT_REQUEST_TIMEOUT_SECONDS)
158
162
  options = [
159
163
  ("grpc.enable_retries", 1),
160
- ("grpc.service_config", RetryPolicy.default().as_json()),
164
+ ("grpc.service_config", RetryPolicy.default(timeout_seconds=request_timeout).as_json()),
161
165
  # Primary cannot be overriden:
162
166
  # https://github.com/grpc/grpc/blob/0498194240f55d7f4b12633ad01339fb690621bf/src/core/ext/filters/http/client/http_client_filter.cc#L97
163
167
  ("grpc.secondary_user_agent", _compute_user_agent()),
@@ -248,6 +252,8 @@ class SiftChannelConfig(TypedDict):
248
252
  Run `pip install sift-stack-py[openssl]` to install the dependencies required to use this option.
249
253
  This works around this issue with grpc loading SSL certificates: https://github.com/grpc/grpc/issues/29682.
250
254
  Default is False.
255
+ - `request_timeout`: Default deadline in seconds applied to unary RPCs that don't set their own.
256
+ Defaults to 60s. Set to `None` to disable the default deadline.
251
257
  """
252
258
 
253
259
  uri: str
@@ -255,3 +261,4 @@ class SiftChannelConfig(TypedDict):
255
261
  enable_keepalive: NotRequired[bool | KeepaliveConfig]
256
262
  use_ssl: NotRequired[bool]
257
263
  cert_via_openssl: NotRequired[bool]
264
+ request_timeout: NotRequired[float | None]
@@ -12,6 +12,7 @@ from sift_client._internal.low_level_wrappers.rules import RulesLowLevelClient
12
12
  from sift_client._internal.low_level_wrappers.runs import RunsLowLevelClient
13
13
  from sift_client._internal.low_level_wrappers.tags import TagsLowLevelClient
14
14
  from sift_client._internal.low_level_wrappers.test_results import TestResultsLowLevelClient
15
+ from sift_client._internal.low_level_wrappers.units import UnitsLowLevelClient
15
16
  from sift_client._internal.low_level_wrappers.upload import UploadLowLevelClient
16
17
 
17
18
  __all__ = [
@@ -27,5 +28,6 @@ __all__ = [
27
28
  "RunsLowLevelClient",
28
29
  "TagsLowLevelClient",
29
30
  "TestResultsLowLevelClient",
31
+ "UnitsLowLevelClient",
30
32
  "UploadLowLevelClient",
31
33
  ]
@@ -10,12 +10,17 @@ from sift.channels.v3.channels_pb2 import (
10
10
  GetChannelResponse,
11
11
  ListChannelsRequest,
12
12
  ListChannelsResponse,
13
+ UpdateChannelRequest,
14
+ UpdateChannelResponse,
13
15
  )
16
+ from sift.channels.v3.channels_pb2 import Channel as ChannelProto
14
17
  from sift.channels.v3.channels_pb2_grpc import ChannelServiceStub
15
18
 
16
19
  from sift_client._internal.low_level_wrappers.base import LowLevelClientBase
17
- from sift_client.sift_types.channel import Channel
20
+ from sift_client._internal.low_level_wrappers.units import UnitsLowLevelClient
21
+ from sift_client.sift_types.channel import Channel, ChannelUpdate
18
22
  from sift_client.transport import WithGrpcClient
23
+ from sift_client.util import cel_utils as cel
19
24
 
20
25
  if TYPE_CHECKING:
21
26
  from sift_client.transport.grpc_transport import GrpcClient
@@ -39,6 +44,38 @@ class ChannelsLowLevelClient(LowLevelClientBase, WithGrpcClient):
39
44
  grpc_client: The gRPC client to use for making API calls.
40
45
  """
41
46
  super().__init__(grpc_client)
47
+ self._units_low_level_client = UnitsLowLevelClient(grpc_client=grpc_client)
48
+
49
+ async def _build_channels(self, protos: list[ChannelProto]) -> list[Channel]:
50
+ """Build Channels from protos, resolving each unit id to its name.
51
+
52
+ The proto carries the unit as an id, so the ids are looked up against the Units
53
+ service and the Channel is built with the abbreviated name. This keeps a Channel's
54
+ ``unit`` field a human-readable name, never an id.
55
+
56
+ Args:
57
+ protos: The channel protos to build.
58
+
59
+ Returns:
60
+ The built Channels, with unit names resolved.
61
+ """
62
+ unit_ids = {(proto.display_unit_id or proto.unit_id) for proto in protos}
63
+ unit_ids.discard("")
64
+ names: dict[str, str] = {}
65
+ if unit_ids:
66
+ units = await self._units_low_level_client.list_all_units(
67
+ query_filter=cel.in_("unit_id", list(unit_ids)),
68
+ )
69
+ names = {unit.unit_id: unit.abbreviated_name for unit in units}
70
+ return [
71
+ Channel._from_proto(proto, unit=names.get(proto.display_unit_id or proto.unit_id, ""))
72
+ for proto in protos
73
+ ]
74
+
75
+ async def _build_channel(self, proto: ChannelProto) -> Channel:
76
+ """Build a single Channel from a proto, resolving its unit id to a name."""
77
+ channels = await self._build_channels([proto])
78
+ return channels[0]
42
79
 
43
80
  async def get_channel(self, channel_id: str) -> Channel:
44
81
  """Get a channel by channel_id.
@@ -55,8 +92,7 @@ class ChannelsLowLevelClient(LowLevelClientBase, WithGrpcClient):
55
92
  request = GetChannelRequest(channel_id=channel_id)
56
93
  response = await self._grpc_client.get_stub(ChannelServiceStub).GetChannel(request)
57
94
  grpc_channel = cast("GetChannelResponse", response).channel
58
- channel = Channel._from_proto(grpc_channel)
59
- return channel
95
+ return await self._build_channel(grpc_channel)
60
96
 
61
97
  async def list_channels(
62
98
  self,
@@ -91,7 +127,7 @@ class ChannelsLowLevelClient(LowLevelClientBase, WithGrpcClient):
91
127
  response = await self._grpc_client.get_stub(ChannelServiceStub).ListChannels(request)
92
128
  response = cast("ListChannelsResponse", response)
93
129
 
94
- channels = [Channel._from_proto(channel) for channel in response.channels]
130
+ channels = await self._build_channels(list(response.channels))
95
131
  return channels, response.next_page_token
96
132
 
97
133
  async def list_all_channels(
@@ -120,6 +156,21 @@ class ChannelsLowLevelClient(LowLevelClientBase, WithGrpcClient):
120
156
  max_results=max_results,
121
157
  )
122
158
 
159
+ async def update_channel(self, update: ChannelUpdate) -> Channel:
160
+ """Update a channel.
161
+
162
+ Args:
163
+ update: The ChannelUpdate to apply.
164
+
165
+ Returns:
166
+ The updated Channel.
167
+ """
168
+ grpc_channel, update_mask = update.to_proto_with_mask()
169
+ request = UpdateChannelRequest(channel=grpc_channel, update_mask=update_mask)
170
+ response = await self._grpc_client.get_stub(ChannelServiceStub).UpdateChannel(request)
171
+ updated_grpc_channel = cast("UpdateChannelResponse", response).channel
172
+ return await self._build_channel(updated_grpc_channel)
173
+
123
174
  async def batch_archive_channels(self, channel_ids: list[str]) -> None:
124
175
  """Batch archive channels by setting active to false.
125
176
 
@@ -26,10 +26,25 @@ from sift_client.transport import WithGrpcClient
26
26
  if TYPE_CHECKING:
27
27
  from datetime import datetime
28
28
 
29
+ from sift_client.sift_types.channel import ChannelReference
29
30
  from sift_client.sift_types.export import ExportOutputFormat
30
31
  from sift_client.transport.grpc_transport import GrpcClient
31
32
 
32
33
 
34
+ def _abstract_ref_to_proto(ref: ChannelReference) -> CalculatedChannelAbstractChannelReference:
35
+ # After ChannelReference validation, calculated_channel is always a version_id string.
36
+ if ref.calculated_channel:
37
+ assert isinstance(ref.calculated_channel, str)
38
+ return CalculatedChannelAbstractChannelReference(
39
+ channel_reference=ref.channel_reference,
40
+ calculated_channel_version_id=ref.calculated_channel,
41
+ )
42
+ return CalculatedChannelAbstractChannelReference(
43
+ channel_reference=ref.channel_reference,
44
+ channel_identifier=ref.channel_identifier or "",
45
+ )
46
+
47
+
33
48
  def _build_calc_channel_configs(
34
49
  calculated_channels: list[CalculatedChannel | CalculatedChannelCreate] | None,
35
50
  ) -> list[CalculatedChannelConfig]:
@@ -46,13 +61,7 @@ def _build_calc_channel_configs(
46
61
  CalculatedChannelConfig(
47
62
  name=cc.name,
48
63
  expression=cc.expression or "",
49
- channel_references=[
50
- CalculatedChannelAbstractChannelReference(
51
- channel_reference=ref.channel_reference,
52
- channel_identifier=ref.channel_identifier,
53
- )
54
- for ref in refs
55
- ],
64
+ channel_references=[_abstract_ref_to_proto(ref) for ref in refs],
56
65
  units=cc.units,
57
66
  )
58
67
  )
@@ -75,6 +75,16 @@ if TYPE_CHECKING:
75
75
  logger = logging.getLogger(__name__)
76
76
 
77
77
 
78
+ def _channel_reference_to_proto(ref: ChannelReference) -> ChannelReferenceProto:
79
+ # ChannelReference's validator normalizes calculated_channel to a version_id str
80
+ # and guarantees exactly one of calculated_channel / channel_identifier is set.
81
+ if ref.calculated_channel:
82
+ return ChannelReferenceProto(
83
+ calculated_channel_version_id=cast("str", ref.calculated_channel)
84
+ )
85
+ return ChannelReferenceProto(name=cast("str", ref.channel_identifier))
86
+
87
+
78
88
  class RulesLowLevelClient(LowLevelClientBase, WithGrpcClient):
79
89
  """Low-level client for the RulesAPI.
80
90
 
@@ -126,7 +136,7 @@ class RulesLowLevelClient(LowLevelClientBase, WithGrpcClient):
126
136
  calculated_channel=CalculatedChannelConfig(
127
137
  expression=create.expression,
128
138
  channel_references={
129
- c.channel_reference: ChannelReferenceProto(name=c.channel_identifier)
139
+ c.channel_reference: _channel_reference_to_proto(c)
130
140
  for c in create.channel_references
131
141
  },
132
142
  )
@@ -259,7 +269,7 @@ class RulesLowLevelClient(LowLevelClientBase, WithGrpcClient):
259
269
  CalculatedChannelConfig(
260
270
  expression=expression,
261
271
  channel_references={
262
- c.channel_reference: ChannelReferenceProto(name=c.channel_identifier)
272
+ c.channel_reference: _channel_reference_to_proto(c)
263
273
  for c in channel_references
264
274
  },
265
275
  )
@@ -0,0 +1,120 @@
1
+ from __future__ import annotations
2
+
3
+ import logging
4
+ from typing import TYPE_CHECKING, Any, cast
5
+
6
+ from sift.unit.v2.unit_pb2 import (
7
+ CreateUnitRequest,
8
+ CreateUnitResponse,
9
+ ListUnitsRequest,
10
+ ListUnitsResponse,
11
+ )
12
+ from sift.unit.v2.unit_pb2 import Unit as UnitProto
13
+ from sift.unit.v2.unit_pb2_grpc import UnitServiceStub
14
+
15
+ from sift_client._internal.low_level_wrappers.base import DEFAULT_PAGE_SIZE, LowLevelClientBase
16
+ from sift_client.transport import WithGrpcClient
17
+
18
+ if TYPE_CHECKING:
19
+ from sift_client.transport.grpc_transport import GrpcClient
20
+
21
+ # Configure logging
22
+ logger = logging.getLogger(__name__)
23
+
24
+
25
+ class UnitsLowLevelClient(LowLevelClientBase, WithGrpcClient):
26
+ """Low-level client for the Units service.
27
+
28
+ This class provides a thin wrapper around the autogenerated bindings for the Units service.
29
+ """
30
+
31
+ def __init__(self, grpc_client: GrpcClient):
32
+ """Initialize the UnitsLowLevelClient.
33
+
34
+ Args:
35
+ grpc_client: The gRPC client to use for making API calls.
36
+ """
37
+ super().__init__(grpc_client)
38
+
39
+ async def create_unit(self, name: str) -> UnitProto:
40
+ """Create a new unit.
41
+
42
+ If a unit with the same name already exists, it is returned instead of creating a duplicate.
43
+
44
+ Args:
45
+ name: The name of the unit.
46
+
47
+ Returns:
48
+ The created unit proto, whose unit_id is used to reference the unit.
49
+
50
+ Raises:
51
+ ValueError: If name is not provided.
52
+ """
53
+ if not name:
54
+ raise ValueError("name must be provided")
55
+
56
+ request = CreateUnitRequest(name=name)
57
+ response = await self._grpc_client.get_stub(UnitServiceStub).CreateUnit(request)
58
+ return cast("CreateUnitResponse", response).unit
59
+
60
+ async def list_units(
61
+ self,
62
+ *,
63
+ page_size: int | None = DEFAULT_PAGE_SIZE,
64
+ page_token: str | None = None,
65
+ query_filter: str | None = None,
66
+ order_by: str | None = None,
67
+ ) -> tuple[list[UnitProto], str]:
68
+ """List units with optional filtering and pagination.
69
+
70
+ Args:
71
+ page_size: The maximum number of units to return.
72
+ page_token: A page token for pagination.
73
+ query_filter: A CEL filter string (e.g. filtering on unit_id or abbreviated_name).
74
+ order_by: How to order the retrieved units.
75
+
76
+ Returns:
77
+ A tuple of (unit protos, next_page_token).
78
+ """
79
+ request_kwargs: dict[str, Any] = {}
80
+ if page_size is not None:
81
+ request_kwargs["page_size"] = page_size
82
+ if page_token is not None:
83
+ request_kwargs["page_token"] = page_token
84
+ if query_filter is not None:
85
+ request_kwargs["filter"] = query_filter
86
+ if order_by is not None:
87
+ request_kwargs["order_by"] = order_by
88
+
89
+ request = ListUnitsRequest(**request_kwargs)
90
+ response = await self._grpc_client.get_stub(UnitServiceStub).ListUnits(request)
91
+ response = cast("ListUnitsResponse", response)
92
+
93
+ return list(response.units), response.next_page_token
94
+
95
+ async def list_all_units(
96
+ self,
97
+ *,
98
+ query_filter: str | None = None,
99
+ order_by: str | None = None,
100
+ page_size: int | None = DEFAULT_PAGE_SIZE,
101
+ max_results: int | None = None,
102
+ ) -> list[UnitProto]:
103
+ """List all units with optional filtering, following pagination.
104
+
105
+ Args:
106
+ query_filter: A CEL filter string.
107
+ order_by: How to order the retrieved units.
108
+ page_size: The number of units to fetch per request.
109
+ max_results: Maximum number of results to return.
110
+
111
+ Returns:
112
+ A list of all matching unit protos.
113
+ """
114
+ return await self._handle_pagination(
115
+ self.list_units,
116
+ kwargs={"query_filter": query_filter},
117
+ page_size=page_size,
118
+ order_by=order_by,
119
+ max_results=max_results,
120
+ )
@@ -53,7 +53,22 @@ def generate_sync_api(cls: type[ResourceBase], sync_name: str) -> type:
53
53
  self._async_impl._is_sync = True
54
54
 
55
55
  def _run(self, coro):
56
- loop = self._async_impl.client.get_asyncio_loop()
56
+ client = self._async_impl.client
57
+ loop = client.get_asyncio_loop()
58
+
59
+ # Fail fast if the loop has stopped (e.g. the client was closed during
60
+ # teardown). Scheduling onto a stopped loop would block forever because
61
+ # the coroutine can never run.
62
+ loop_running = getattr(client, "is_loop_running", None)
63
+ if loop_running is None:
64
+ loop_running = loop.is_running()
65
+ if not loop_running:
66
+ coro.close()
67
+ raise RuntimeError("Sift client is closed; cannot make synchronous API calls.")
68
+
69
+ # No wall-clock cap here: stalled calls are bounded at the transport layer
70
+ # (GrpcConfig/RestConfig request_timeout), and waiting on the whole coroutine
71
+ # lets methods like wait_until_complete honor their own timeout_secs.
57
72
  return asyncio.run_coroutine_threadsafe(coro, loop).result()
58
73
 
59
74
  namespace = {
@@ -32,6 +32,9 @@ async def resolve_calculated_channels(
32
32
 
33
33
  resolved_refs: list[ChannelReference] = []
34
34
  for ref in refs:
35
+ if ref.calculated_channel:
36
+ resolved_refs.append(ref)
37
+ continue
35
38
  channel = await channels_api.find(
36
39
  name=ref.channel_identifier,
37
40
  assets=cc.asset_ids,