sift-stack-py 0.16.2__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.2 → sift_stack_py-0.17.0}/PKG-INFO +22 -22
  2. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/_retry.py +29 -3
  3. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/transport.py +8 -1
  4. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/__init__.py +2 -0
  5. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/channels.py +55 -4
  6. sift_stack_py-0.17.0/lib/sift_client/_internal/low_level_wrappers/units.py +120 -0
  7. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/sync_wrapper.py +16 -1
  8. sift_stack_py-0.17.0/lib/sift_client/_internal/util/hdf5.py +271 -0
  9. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/client.py +5 -0
  10. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/resources/channels.py +29 -1
  11. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/resources/data_imports.py +87 -14
  12. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/resources/sync_stubs/__init__.pyi +43 -11
  13. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/__init__.py +2 -0
  14. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/_base.py +4 -0
  15. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/channel.py +86 -5
  16. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/data_import.py +54 -16
  17. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/transport/grpc_transport.py +57 -6
  18. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/transport/rest_transport.py +15 -0
  19. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_stack_py.egg-info/PKG-INFO +22 -22
  20. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_stack_py.egg-info/SOURCES.txt +1 -46
  21. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_stack_py.egg-info/requires.txt +33 -19
  22. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/pyproject.toml +51 -31
  23. sift_stack_py-0.16.2/lib/sift_client/_internal/util/hdf5.py +0 -96
  24. sift_stack_py-0.16.2/lib/sift_client/_tests/__init__.py +0 -6
  25. sift_stack_py-0.16.2/lib/sift_client/_tests/_internal/low_level_wrappers/test_base.py +0 -165
  26. sift_stack_py-0.16.2/lib/sift_client/_tests/_internal/low_level_wrappers/test_ingestion.py +0 -56
  27. sift_stack_py-0.16.2/lib/sift_client/_tests/_internal/low_level_wrappers/test_upload.py +0 -62
  28. sift_stack_py-0.16.2/lib/sift_client/_tests/_internal/test_channels.py +0 -77
  29. sift_stack_py-0.16.2/lib/sift_client/_tests/_internal/test_gen_pyi.py +0 -74
  30. sift_stack_py-0.16.2/lib/sift_client/_tests/_internal/test_hdf5.py +0 -132
  31. sift_stack_py-0.16.2/lib/sift_client/_tests/_internal/test_stub_module/__init__.py +0 -6
  32. sift_stack_py-0.16.2/lib/sift_client/_tests/_internal/test_stub_module/test_py.py +0 -49
  33. sift_stack_py-0.16.2/lib/sift_client/_tests/_internal/test_sync_wrapper.py +0 -233
  34. sift_stack_py-0.16.2/lib/sift_client/_tests/_internal/test_tdms.py +0 -380
  35. sift_stack_py-0.16.2/lib/sift_client/_tests/_internal/test_transport.py +0 -66
  36. sift_stack_py-0.16.2/lib/sift_client/_tests/conftest.py +0 -87
  37. sift_stack_py-0.16.2/lib/sift_client/_tests/resources/test_assets.py +0 -198
  38. sift_stack_py-0.16.2/lib/sift_client/_tests/resources/test_calculated_channels.py +0 -557
  39. sift_stack_py-0.16.2/lib/sift_client/_tests/resources/test_channels.py +0 -414
  40. sift_stack_py-0.16.2/lib/sift_client/_tests/resources/test_data_imports.py +0 -516
  41. sift_stack_py-0.16.2/lib/sift_client/_tests/resources/test_exports.py +0 -340
  42. sift_stack_py-0.16.2/lib/sift_client/_tests/resources/test_file_attachments.py +0 -582
  43. sift_stack_py-0.16.2/lib/sift_client/_tests/resources/test_jobs.py +0 -625
  44. sift_stack_py-0.16.2/lib/sift_client/_tests/resources/test_ping.py +0 -62
  45. sift_stack_py-0.16.2/lib/sift_client/_tests/resources/test_reports.py +0 -414
  46. sift_stack_py-0.16.2/lib/sift_client/_tests/resources/test_rules.py +0 -873
  47. sift_stack_py-0.16.2/lib/sift_client/_tests/resources/test_runs.py +0 -571
  48. sift_stack_py-0.16.2/lib/sift_client/_tests/resources/test_tags.py +0 -141
  49. sift_stack_py-0.16.2/lib/sift_client/_tests/resources/test_test_results.py +0 -1130
  50. sift_stack_py-0.16.2/lib/sift_client/_tests/sift_types/test_asset.py +0 -186
  51. sift_stack_py-0.16.2/lib/sift_client/_tests/sift_types/test_base.py +0 -591
  52. sift_stack_py-0.16.2/lib/sift_client/_tests/sift_types/test_calculated_channel.py +0 -355
  53. sift_stack_py-0.16.2/lib/sift_client/_tests/sift_types/test_channel.py +0 -217
  54. sift_stack_py-0.16.2/lib/sift_client/_tests/sift_types/test_ingestion.py +0 -153
  55. sift_stack_py-0.16.2/lib/sift_client/_tests/sift_types/test_job.py +0 -281
  56. sift_stack_py-0.16.2/lib/sift_client/_tests/sift_types/test_report.py +0 -192
  57. sift_stack_py-0.16.2/lib/sift_client/_tests/sift_types/test_results.py +0 -497
  58. sift_stack_py-0.16.2/lib/sift_client/_tests/sift_types/test_rule.py +0 -222
  59. sift_stack_py-0.16.2/lib/sift_client/_tests/sift_types/test_run.py +0 -241
  60. sift_stack_py-0.16.2/lib/sift_client/_tests/sift_types/test_tag.py +0 -75
  61. sift_stack_py-0.16.2/lib/sift_client/_tests/test_client.py +0 -0
  62. sift_stack_py-0.16.2/lib/sift_client/_tests/util/conftest.py +0 -14
  63. sift_stack_py-0.16.2/lib/sift_client/_tests/util/test_cel_utils.py +0 -179
  64. sift_stack_py-0.16.2/lib/sift_client/_tests/util/test_test_results_utils.py +0 -703
  65. sift_stack_py-0.16.2/lib/sift_py/grpc/_interceptors/__init__.py +0 -0
  66. sift_stack_py-0.16.2/lib/sift_py/ingestion/config/yaml/__init__.py +0 -0
  67. sift_stack_py-0.16.2/lib/sift_py/report_templates/__init__.py +0 -0
  68. sift_stack_py-0.16.2/lib/sift_py/rule/__init__.py +0 -0
  69. sift_stack_py-0.16.2/lib/sift_py/yaml/__init__.py +0 -0
  70. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/LICENSE +0 -0
  71. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/README.md +0 -0
  72. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/__init__.py +0 -0
  73. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/annotation_logs/__init__.py +0 -0
  74. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/annotation_logs/v1/__init__.py +0 -0
  75. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/annotation_logs/v1/annotation_logs_pb2.py +0 -0
  76. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/annotation_logs/v1/annotation_logs_pb2.pyi +0 -0
  77. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/annotation_logs/v1/annotation_logs_pb2_grpc.py +0 -0
  78. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/annotation_logs/v1/annotation_logs_pb2_grpc.pyi +0 -0
  79. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/annotations/__init__.py +0 -0
  80. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/annotations/v1/__init__.py +0 -0
  81. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/annotations/v1/annotations_pb2.py +0 -0
  82. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/annotations/v1/annotations_pb2.pyi +0 -0
  83. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/annotations/v1/annotations_pb2_grpc.py +0 -0
  84. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/annotations/v1/annotations_pb2_grpc.pyi +0 -0
  85. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/api_keys/__init__.py +0 -0
  86. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/api_keys/v2/__init__.py +0 -0
  87. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/api_keys/v2/api_keys_pb2.py +0 -0
  88. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/api_keys/v2/api_keys_pb2.pyi +0 -0
  89. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/api_keys/v2/api_keys_pb2_grpc.py +0 -0
  90. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/api_keys/v2/api_keys_pb2_grpc.pyi +0 -0
  91. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/assets/__init__.py +0 -0
  92. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/assets/v1/__init__.py +0 -0
  93. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/assets/v1/assets_pb2.py +0 -0
  94. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/assets/v1/assets_pb2.pyi +0 -0
  95. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/assets/v1/assets_pb2_grpc.py +0 -0
  96. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/assets/v1/assets_pb2_grpc.pyi +0 -0
  97. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/__init__.py +0 -0
  98. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/v1/__init__.py +0 -0
  99. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/v1/calculated_channels_pb2.py +0 -0
  100. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/v1/calculated_channels_pb2.pyi +0 -0
  101. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/v1/calculated_channels_pb2_grpc.py +0 -0
  102. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/v1/calculated_channels_pb2_grpc.pyi +0 -0
  103. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/v2/__init__.py +0 -0
  104. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/v2/calculated_channels_pb2.py +0 -0
  105. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/v2/calculated_channels_pb2.pyi +0 -0
  106. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/v2/calculated_channels_pb2_grpc.py +0 -0
  107. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/calculated_channels/v2/calculated_channels_pb2_grpc.pyi +0 -0
  108. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/campaigns/__init__.py +0 -0
  109. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/campaigns/v1/__init__.py +0 -0
  110. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/campaigns/v1/campaigns_pb2.py +0 -0
  111. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/campaigns/v1/campaigns_pb2.pyi +0 -0
  112. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/campaigns/v1/campaigns_pb2_grpc.py +0 -0
  113. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/campaigns/v1/campaigns_pb2_grpc.pyi +0 -0
  114. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/__init__.py +0 -0
  115. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/v1/__init__.py +0 -0
  116. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/v1/channel_schemas_pb2.py +0 -0
  117. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/v1/channel_schemas_pb2.pyi +0 -0
  118. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/v1/channel_schemas_pb2_grpc.py +0 -0
  119. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/v1/channel_schemas_pb2_grpc.pyi +0 -0
  120. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/v2/__init__.py +0 -0
  121. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/v2/channel_schemas_pb2.py +0 -0
  122. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/v2/channel_schemas_pb2.pyi +0 -0
  123. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/v2/channel_schemas_pb2_grpc.py +0 -0
  124. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channel_schemas/v2/channel_schemas_pb2_grpc.pyi +0 -0
  125. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channels/__init__.py +0 -0
  126. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channels/v2/__init__.py +0 -0
  127. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channels/v2/channels_pb2.py +0 -0
  128. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channels/v2/channels_pb2.pyi +0 -0
  129. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channels/v2/channels_pb2_grpc.py +0 -0
  130. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channels/v2/channels_pb2_grpc.pyi +0 -0
  131. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channels/v3/__init__.py +0 -0
  132. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channels/v3/channels_pb2.py +0 -0
  133. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channels/v3/channels_pb2.pyi +0 -0
  134. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channels/v3/channels_pb2_grpc.py +0 -0
  135. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/channels/v3/channels_pb2_grpc.pyi +0 -0
  136. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/comment/__init__.py +0 -0
  137. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/comment/v1/__init__.py +0 -0
  138. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/comment/v1/comment_pb2.py +0 -0
  139. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/comment/v1/comment_pb2.pyi +0 -0
  140. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/comment/v1/comment_pb2_grpc.py +0 -0
  141. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/comment/v1/comment_pb2_grpc.pyi +0 -0
  142. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/__init__.py +0 -0
  143. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/__init__.py +0 -0
  144. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/__init__.py +0 -0
  145. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/calculated_channels_pb2.py +0 -0
  146. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/calculated_channels_pb2.pyi +0 -0
  147. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/calculated_channels_pb2_grpc.py +0 -0
  148. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/calculated_channels_pb2_grpc.pyi +0 -0
  149. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_bit_field_element_pb2.py +0 -0
  150. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_bit_field_element_pb2.pyi +0 -0
  151. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_bit_field_element_pb2_grpc.py +0 -0
  152. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_bit_field_element_pb2_grpc.pyi +0 -0
  153. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_config_pb2.py +0 -0
  154. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_config_pb2.pyi +0 -0
  155. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_config_pb2_grpc.py +0 -0
  156. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_config_pb2_grpc.pyi +0 -0
  157. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_data_type_pb2.py +0 -0
  158. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_data_type_pb2.pyi +0 -0
  159. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_data_type_pb2_grpc.py +0 -0
  160. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_data_type_pb2_grpc.pyi +0 -0
  161. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_enum_type_pb2.py +0 -0
  162. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_enum_type_pb2.pyi +0 -0
  163. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_enum_type_pb2_grpc.py +0 -0
  164. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/channel_enum_type_pb2_grpc.pyi +0 -0
  165. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/organization_pb2.py +0 -0
  166. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/organization_pb2.pyi +0 -0
  167. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/organization_pb2_grpc.py +0 -0
  168. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/organization_pb2_grpc.pyi +0 -0
  169. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/resource_identifier_pb2.py +0 -0
  170. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/resource_identifier_pb2.pyi +0 -0
  171. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/resource_identifier_pb2_grpc.py +0 -0
  172. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/resource_identifier_pb2_grpc.pyi +0 -0
  173. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/resource_ref_pb2.py +0 -0
  174. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/resource_ref_pb2.pyi +0 -0
  175. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/resource_ref_pb2_grpc.py +0 -0
  176. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/resource_ref_pb2_grpc.pyi +0 -0
  177. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/user_defined_functions_pb2.py +0 -0
  178. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/user_defined_functions_pb2.pyi +0 -0
  179. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/user_defined_functions_pb2_grpc.py +0 -0
  180. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/user_defined_functions_pb2_grpc.pyi +0 -0
  181. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/user_pb2.py +0 -0
  182. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/user_pb2.pyi +0 -0
  183. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/user_pb2_grpc.py +0 -0
  184. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/type/v1/user_pb2_grpc.pyi +0 -0
  185. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/v1/__init__.py +0 -0
  186. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/v1/action_type_pb2.py +0 -0
  187. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/v1/action_type_pb2.pyi +0 -0
  188. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/v1/action_type_pb2_grpc.py +0 -0
  189. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/v1/action_type_pb2_grpc.pyi +0 -0
  190. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/v1/filter_field_pb2.py +0 -0
  191. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/v1/filter_field_pb2.pyi +0 -0
  192. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/v1/filter_field_pb2_grpc.py +0 -0
  193. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/v1/filter_field_pb2_grpc.pyi +0 -0
  194. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/v1/resource_type_pb2.py +0 -0
  195. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/v1/resource_type_pb2.pyi +0 -0
  196. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/v1/resource_type_pb2_grpc.py +0 -0
  197. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/common/v1/resource_type_pb2_grpc.pyi +0 -0
  198. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/data/__init__.py +0 -0
  199. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/data/v1/__init__.py +0 -0
  200. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/data/v1/data_pb2.py +0 -0
  201. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/data/v1/data_pb2.pyi +0 -0
  202. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/data/v1/data_pb2_grpc.py +0 -0
  203. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/data/v1/data_pb2_grpc.pyi +0 -0
  204. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/data/v2/__init__.py +0 -0
  205. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/data/v2/data_pb2.py +0 -0
  206. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/data/v2/data_pb2.pyi +0 -0
  207. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/data/v2/data_pb2_grpc.py +0 -0
  208. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/data/v2/data_pb2_grpc.pyi +0 -0
  209. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/data_imports/__init__.py +0 -0
  210. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/data_imports/v2/__init__.py +0 -0
  211. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/data_imports/v2/data_imports_pb2.py +0 -0
  212. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/data_imports/v2/data_imports_pb2.pyi +0 -0
  213. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/data_imports/v2/data_imports_pb2_grpc.py +0 -0
  214. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/data_imports/v2/data_imports_pb2_grpc.pyi +0 -0
  215. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/dlq_errors/__init__.py +0 -0
  216. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/dlq_errors/v2/__init__.py +0 -0
  217. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/dlq_errors/v2/dlq_errors_pb2.py +0 -0
  218. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/dlq_errors/v2/dlq_errors_pb2.pyi +0 -0
  219. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/dlq_errors/v2/dlq_errors_pb2_grpc.py +0 -0
  220. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/dlq_errors/v2/dlq_errors_pb2_grpc.pyi +0 -0
  221. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/exports/__init__.py +0 -0
  222. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/exports/v1/__init__.py +0 -0
  223. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/exports/v1/exports_pb2.py +0 -0
  224. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/exports/v1/exports_pb2.pyi +0 -0
  225. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/exports/v1/exports_pb2_grpc.py +0 -0
  226. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/exports/v1/exports_pb2_grpc.pyi +0 -0
  227. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/external_sync/__init__.py +0 -0
  228. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/external_sync/v1/__init__.py +0 -0
  229. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/external_sync/v1/external_sync_pb2.py +0 -0
  230. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/external_sync/v1/external_sync_pb2.pyi +0 -0
  231. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/external_sync/v1/external_sync_pb2_grpc.py +0 -0
  232. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/external_sync/v1/external_sync_pb2_grpc.pyi +0 -0
  233. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ingest/__init__.py +0 -0
  234. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ingest/v1/__init__.py +0 -0
  235. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ingest/v1/ingest_pb2.py +0 -0
  236. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ingest/v1/ingest_pb2.pyi +0 -0
  237. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ingest/v1/ingest_pb2_grpc.py +0 -0
  238. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ingest/v1/ingest_pb2_grpc.pyi +0 -0
  239. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/__init__.py +0 -0
  240. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/v1/__init__.py +0 -0
  241. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/v1/ingestion_configs_pb2.py +0 -0
  242. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/v1/ingestion_configs_pb2.pyi +0 -0
  243. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/v1/ingestion_configs_pb2_grpc.py +0 -0
  244. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/v1/ingestion_configs_pb2_grpc.pyi +0 -0
  245. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/v2/__init__.py +0 -0
  246. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/v2/ingestion_configs_pb2.py +0 -0
  247. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/v2/ingestion_configs_pb2.pyi +0 -0
  248. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/v2/ingestion_configs_pb2_grpc.py +0 -0
  249. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ingestion_configs/v2/ingestion_configs_pb2_grpc.pyi +0 -0
  250. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/jobs/__init__.py +0 -0
  251. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/jobs/v1/__init__.py +0 -0
  252. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/jobs/v1/jobs_pb2.py +0 -0
  253. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/jobs/v1/jobs_pb2.pyi +0 -0
  254. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/jobs/v1/jobs_pb2_grpc.py +0 -0
  255. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/jobs/v1/jobs_pb2_grpc.pyi +0 -0
  256. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/me/__init__.py +0 -0
  257. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/me/v2/__init__.py +0 -0
  258. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/me/v2/me_pb2.py +0 -0
  259. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/me/v2/me_pb2.pyi +0 -0
  260. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/me/v2/me_pb2_grpc.py +0 -0
  261. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/me/v2/me_pb2_grpc.pyi +0 -0
  262. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/metadata/__init__.py +0 -0
  263. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/metadata/v1/__init__.py +0 -0
  264. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/metadata/v1/metadata_pb2.py +0 -0
  265. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/metadata/v1/metadata_pb2.pyi +0 -0
  266. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/metadata/v1/metadata_pb2_grpc.py +0 -0
  267. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/metadata/v1/metadata_pb2_grpc.pyi +0 -0
  268. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/notifications/__init__.py +0 -0
  269. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/notifications/v1/__init__.py +0 -0
  270. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/notifications/v1/notifications_pb2.py +0 -0
  271. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/notifications/v1/notifications_pb2.pyi +0 -0
  272. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/notifications/v1/notifications_pb2_grpc.py +0 -0
  273. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/notifications/v1/notifications_pb2_grpc.pyi +0 -0
  274. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/panel_configurations/__init__.py +0 -0
  275. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/panel_configurations/v1/__init__.py +0 -0
  276. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/panel_configurations/v1/panel_configuration_pb2.py +0 -0
  277. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/panel_configurations/v1/panel_configuration_pb2.pyi +0 -0
  278. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/panel_configurations/v1/panel_configuration_pb2_grpc.py +0 -0
  279. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/panel_configurations/v1/panel_configuration_pb2_grpc.pyi +0 -0
  280. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ping/__init__.py +0 -0
  281. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ping/v1/__init__.py +0 -0
  282. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ping/v1/ping_pb2.py +0 -0
  283. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ping/v1/ping_pb2.pyi +0 -0
  284. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ping/v1/ping_pb2_grpc.py +0 -0
  285. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/ping/v1/ping_pb2_grpc.pyi +0 -0
  286. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/protobuf_descriptors/__init__.py +0 -0
  287. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/protobuf_descriptors/v2/__init__.py +0 -0
  288. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/protobuf_descriptors/v2/channel_parsing_options_pb2.py +0 -0
  289. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/protobuf_descriptors/v2/channel_parsing_options_pb2.pyi +0 -0
  290. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/protobuf_descriptors/v2/channel_parsing_options_pb2_grpc.py +0 -0
  291. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/protobuf_descriptors/v2/channel_parsing_options_pb2_grpc.pyi +0 -0
  292. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/protobuf_descriptors/v2/protobuf_descriptors_pb2.py +0 -0
  293. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/protobuf_descriptors/v2/protobuf_descriptors_pb2.pyi +0 -0
  294. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/protobuf_descriptors/v2/protobuf_descriptors_pb2_grpc.py +0 -0
  295. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/protobuf_descriptors/v2/protobuf_descriptors_pb2_grpc.pyi +0 -0
  296. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/py.typed +0 -0
  297. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/remote_files/__init__.py +0 -0
  298. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/remote_files/v1/__init__.py +0 -0
  299. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/remote_files/v1/remote_files_pb2.py +0 -0
  300. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/remote_files/v1/remote_files_pb2.pyi +0 -0
  301. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/remote_files/v1/remote_files_pb2_grpc.py +0 -0
  302. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/remote_files/v1/remote_files_pb2_grpc.pyi +0 -0
  303. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/report_templates/__init__.py +0 -0
  304. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/report_templates/v1/__init__.py +0 -0
  305. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/report_templates/v1/report_templates_pb2.py +0 -0
  306. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/report_templates/v1/report_templates_pb2.pyi +0 -0
  307. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/report_templates/v1/report_templates_pb2_grpc.py +0 -0
  308. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/report_templates/v1/report_templates_pb2_grpc.pyi +0 -0
  309. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/reports/__init__.py +0 -0
  310. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/reports/v1/__init__.py +0 -0
  311. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/reports/v1/reports_pb2.py +0 -0
  312. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/reports/v1/reports_pb2.pyi +0 -0
  313. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/reports/v1/reports_pb2_grpc.py +0 -0
  314. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/reports/v1/reports_pb2_grpc.pyi +0 -0
  315. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/roles/__init__.py +0 -0
  316. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/roles/v2/__init__.py +0 -0
  317. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/roles/v2/roles_pb2.py +0 -0
  318. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/roles/v2/roles_pb2.pyi +0 -0
  319. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/roles/v2/roles_pb2_grpc.py +0 -0
  320. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/roles/v2/roles_pb2_grpc.pyi +0 -0
  321. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/rule_evaluation/__init__.py +0 -0
  322. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/rule_evaluation/v1/__init__.py +0 -0
  323. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/rule_evaluation/v1/rule_evaluation_pb2.py +0 -0
  324. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/rule_evaluation/v1/rule_evaluation_pb2.pyi +0 -0
  325. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/rule_evaluation/v1/rule_evaluation_pb2_grpc.py +0 -0
  326. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/rule_evaluation/v1/rule_evaluation_pb2_grpc.pyi +0 -0
  327. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/rules/__init__.py +0 -0
  328. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/rules/v1/__init__.py +0 -0
  329. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/rules/v1/rules_pb2.py +0 -0
  330. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/rules/v1/rules_pb2.pyi +0 -0
  331. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/rules/v1/rules_pb2_grpc.py +0 -0
  332. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/rules/v1/rules_pb2_grpc.pyi +0 -0
  333. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/runs/__init__.py +0 -0
  334. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/runs/v2/__init__.py +0 -0
  335. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/runs/v2/runs_pb2.py +0 -0
  336. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/runs/v2/runs_pb2.pyi +0 -0
  337. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/runs/v2/runs_pb2_grpc.py +0 -0
  338. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/runs/v2/runs_pb2_grpc.pyi +0 -0
  339. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/saved_searches/__init__.py +0 -0
  340. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/saved_searches/v1/__init__.py +0 -0
  341. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/saved_searches/v1/saved_searches_pb2.py +0 -0
  342. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/saved_searches/v1/saved_searches_pb2.pyi +0 -0
  343. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/saved_searches/v1/saved_searches_pb2_grpc.py +0 -0
  344. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/saved_searches/v1/saved_searches_pb2_grpc.pyi +0 -0
  345. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/tags/__init__.py +0 -0
  346. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/tags/v1/__init__.py +0 -0
  347. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/tags/v1/tags_pb2.py +0 -0
  348. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/tags/v1/tags_pb2.pyi +0 -0
  349. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/tags/v1/tags_pb2_grpc.py +0 -0
  350. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/tags/v1/tags_pb2_grpc.pyi +0 -0
  351. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/tags/v2/__init__.py +0 -0
  352. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/tags/v2/tags_pb2.py +0 -0
  353. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/tags/v2/tags_pb2.pyi +0 -0
  354. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/tags/v2/tags_pb2_grpc.py +0 -0
  355. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/tags/v2/tags_pb2_grpc.pyi +0 -0
  356. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/test_reports/__init__.py +0 -0
  357. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/test_reports/v1/__init__.py +0 -0
  358. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/test_reports/v1/test_reports_pb2.py +0 -0
  359. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/test_reports/v1/test_reports_pb2.pyi +0 -0
  360. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/test_reports/v1/test_reports_pb2_grpc.py +0 -0
  361. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/test_reports/v1/test_reports_pb2_grpc.pyi +0 -0
  362. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/unit/__init__.py +0 -0
  363. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/unit/v2/__init__.py +0 -0
  364. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/unit/v2/unit_pb2.py +0 -0
  365. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/unit/v2/unit_pb2.pyi +0 -0
  366. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/unit/v2/unit_pb2_grpc.py +0 -0
  367. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/unit/v2/unit_pb2_grpc.pyi +0 -0
  368. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/user_defined_functions/__init__.py +0 -0
  369. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/user_defined_functions/v1/__init__.py +0 -0
  370. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/user_defined_functions/v1/user_defined_functions_pb2.py +0 -0
  371. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/user_defined_functions/v1/user_defined_functions_pb2.pyi +0 -0
  372. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/user_defined_functions/v1/user_defined_functions_pb2_grpc.py +0 -0
  373. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/user_defined_functions/v1/user_defined_functions_pb2_grpc.pyi +0 -0
  374. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/user_groups/__init__.py +0 -0
  375. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/user_groups/v2/__init__.py +0 -0
  376. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/user_groups/v2/user_groups_pb2.py +0 -0
  377. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/user_groups/v2/user_groups_pb2.pyi +0 -0
  378. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/user_groups/v2/user_groups_pb2_grpc.py +0 -0
  379. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/user_groups/v2/user_groups_pb2_grpc.pyi +0 -0
  380. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/users/__init__.py +0 -0
  381. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/users/v2/__init__.py +0 -0
  382. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/users/v2/users_pb2.py +0 -0
  383. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/users/v2/users_pb2.pyi +0 -0
  384. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/users/v2/users_pb2_grpc.py +0 -0
  385. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/users/v2/users_pb2_grpc.pyi +0 -0
  386. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/views/__init__.py +0 -0
  387. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/views/v1/__init__.py +0 -0
  388. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/views/v1/views_pb2.py +0 -0
  389. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/views/v1/views_pb2.pyi +0 -0
  390. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/views/v1/views_pb2_grpc.py +0 -0
  391. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/views/v1/views_pb2_grpc.pyi +0 -0
  392. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/views/v2/__init__.py +0 -0
  393. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/views/v2/views_pb2.py +0 -0
  394. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/views/v2/views_pb2.pyi +0 -0
  395. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/views/v2/views_pb2_grpc.py +0 -0
  396. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/views/v2/views_pb2_grpc.pyi +0 -0
  397. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/webhooks/__init__.py +0 -0
  398. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/webhooks/v1/__init__.py +0 -0
  399. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/webhooks/v1/webhooks_pb2.py +0 -0
  400. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/webhooks/v1/webhooks_pb2.pyi +0 -0
  401. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/webhooks/v1/webhooks_pb2_grpc.py +0 -0
  402. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift/webhooks/v1/webhooks_pb2_grpc.pyi +0 -0
  403. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/__init__.py +0 -0
  404. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/__init__.py +0 -0
  405. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/gen_pyi.py +0 -0
  406. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/__init__.py +0 -0
  407. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/_async_interceptors/__init__.py +0 -0
  408. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/_async_interceptors/base.py +0 -0
  409. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/_async_interceptors/metadata.py +0 -0
  410. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/_interceptors/__init__.py +0 -0
  411. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/_interceptors/base.py +0 -0
  412. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/_interceptors/context.py +0 -0
  413. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/_interceptors/metadata.py +0 -0
  414. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/keepalive.py +0 -0
  415. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/server_interceptors/__init__.py +0 -0
  416. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/server_interceptors/server_interceptor.py +0 -0
  417. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/grpc_transport/transport_test.py +0 -0
  418. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/_test_results_log.py +0 -0
  419. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/assets.py +0 -0
  420. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/base.py +0 -0
  421. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/calculated_channels.py +0 -0
  422. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/data.py +0 -0
  423. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/data_imports.py +0 -0
  424. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/exports.py +0 -0
  425. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/ingestion.py +0 -0
  426. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/jobs.py +0 -0
  427. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/ping.py +0 -0
  428. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/remote_files.py +0 -0
  429. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/reports.py +0 -0
  430. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/rules.py +0 -0
  431. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/runs.py +0 -0
  432. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/tags.py +0 -0
  433. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/test_results.py +0 -0
  434. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/low_level_wrappers/upload.py +0 -0
  435. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/rest.py +0 -0
  436. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/time.py +0 -0
  437. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/util/__init__.py +0 -0
  438. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/util/channels.py +0 -0
  439. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/util/executor.py +0 -0
  440. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/util/file.py +0 -0
  441. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/util/numpy_types.py +0 -0
  442. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/util/tdms.py +0 -0
  443. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/util/timestamp.py +0 -0
  444. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/_internal/util/util.py +0 -0
  445. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/config.py +0 -0
  446. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/errors.py +0 -0
  447. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/py.typed +0 -0
  448. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/resources/__init__.py +0 -0
  449. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/resources/_base.py +0 -0
  450. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/resources/assets.py +0 -0
  451. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/resources/calculated_channels.py +0 -0
  452. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/resources/exports.py +0 -0
  453. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/resources/file_attachments.py +0 -0
  454. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/resources/ingestion.py +0 -0
  455. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/resources/jobs.py +0 -0
  456. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/resources/ping.py +0 -0
  457. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/resources/py.typed +0 -0
  458. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/resources/reports.py +0 -0
  459. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/resources/rules.py +0 -0
  460. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/resources/runs.py +0 -0
  461. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/resources/sync_stubs/__init__.py +0 -0
  462. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/resources/sync_stubs/py.typed +0 -0
  463. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/resources/tags.py +0 -0
  464. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/resources/test_results.py +0 -0
  465. {sift_stack_py-0.16.2/lib/sift_client/_tests/_internal → sift_stack_py-0.17.0/lib/sift_client/scripts}/__init__.py +0 -0
  466. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/scripts/import_test_result_log.py +0 -0
  467. {sift_stack_py-0.16.2/lib/sift_client/_tests/_internal/low_level_wrappers → sift_stack_py-0.17.0/lib/sift_client/sift_types/_mixins}/__init__.py +0 -0
  468. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/_mixins/file_attachments.py +0 -0
  469. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/asset.py +0 -0
  470. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/calculated_channel.py +0 -0
  471. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/export.py +0 -0
  472. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/file_attachment.py +0 -0
  473. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/ingestion.py +0 -0
  474. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/job.py +0 -0
  475. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/report.py +0 -0
  476. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/rule.py +0 -0
  477. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/run.py +0 -0
  478. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/tag.py +0 -0
  479. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/sift_types/test_report.py +0 -0
  480. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/transport/__init__.py +0 -0
  481. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/transport/base_connection.py +0 -0
  482. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/util/__init__.py +0 -0
  483. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/util/cel_utils.py +0 -0
  484. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/util/metadata.py +0 -0
  485. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/util/test_results/__init__.py +0 -0
  486. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/util/test_results/bounds.py +0 -0
  487. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/util/test_results/context_manager.py +0 -0
  488. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/util/test_results/pytest_util.py +0 -0
  489. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_client/util/util.py +0 -0
  490. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/__init__.py +0 -0
  491. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/_internal/__init__.py +0 -0
  492. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/_internal/cel.py +0 -0
  493. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/_internal/channel.py +0 -0
  494. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/_internal/convert/__init__.py +0 -0
  495. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/_internal/convert/json.py +0 -0
  496. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/_internal/convert/protobuf.py +0 -0
  497. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/_internal/convert/timestamp.py +0 -0
  498. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/_internal/metadata.py +0 -0
  499. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/_internal/metadata_test.py +0 -0
  500. {sift_stack_py-0.16.2/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.2 → sift_stack_py-0.17.0}/lib/sift_py/_internal/test_util/channel.py +0 -0
  502. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/_internal/test_util/fn.py +0 -0
  503. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/_internal/test_util/server_interceptor.py +0 -0
  504. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/_internal/time.py +0 -0
  505. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/_internal/user.py +0 -0
  506. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/_rest_test.py +0 -0
  507. {sift_stack_py-0.16.2/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.2 → sift_stack_py-0.17.0}/lib/sift_py/asset/_config_test.py +0 -0
  509. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/asset/_internal/shared.py +0 -0
  510. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/asset/_service_test.py +0 -0
  511. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/asset/config.py +0 -0
  512. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/asset/service.py +0 -0
  513. {sift_stack_py-0.16.2/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.2 → sift_stack_py-0.17.0}/lib/sift_py/calculated_channels/_service_test.py +0 -0
  515. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/calculated_channels/config.py +0 -0
  516. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/calculated_channels/service.py +0 -0
  517. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data/__init__.py +0 -0
  518. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data/_channel.py +0 -0
  519. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data/_deserialize.py +0 -0
  520. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data/_deserialize_test.py +0 -0
  521. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data/_service_test.py +0 -0
  522. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data/_validate.py +0 -0
  523. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data/error.py +0 -0
  524. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data/query.py +0 -0
  525. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data/service.py +0 -0
  526. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/__init__.py +0 -0
  527. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_config.py +0 -0
  528. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_config_test.py +0 -0
  529. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_csv_test.py +0 -0
  530. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_hdf5_test.py +0 -0
  531. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_parquet_test.py +0 -0
  532. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_ros_channel.py +0 -0
  533. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_rosbag_test.py +0 -0
  534. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_status_test.py +0 -0
  535. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_tdms_test.py +0 -0
  536. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_utils.py +0 -0
  537. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/_utils_test.py +0 -0
  538. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/ch10.py +0 -0
  539. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/config.py +0 -0
  540. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/csv.py +0 -0
  541. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/hdf5.py +0 -0
  542. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/parquet.py +0 -0
  543. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/parquet_complex_types.py +0 -0
  544. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/rosbags.py +0 -0
  545. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/status.py +0 -0
  546. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/tdms.py +0 -0
  547. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/tempfile.py +0 -0
  548. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/data_import/time_format.py +0 -0
  549. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/error.py +0 -0
  550. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/file_attachment/__init__.py +0 -0
  551. {sift_stack_py-0.16.2/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.2 → sift_stack_py-0.17.0}/lib/sift_py/file_attachment/_internal/download.py +0 -0
  553. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/file_attachment/_internal/upload.py +0 -0
  554. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/file_attachment/_service_test.py +0 -0
  555. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/file_attachment/entity.py +0 -0
  556. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/file_attachment/metadata.py +0 -0
  557. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/file_attachment/service.py +0 -0
  558. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/grpc/__init__.py +0 -0
  559. {sift_stack_py-0.16.2/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.2 → sift_stack_py-0.17.0}/lib/sift_py/grpc/_async_interceptors/base.py +0 -0
  561. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/grpc/_async_interceptors/metadata.py +0 -0
  562. {sift_stack_py-0.16.2/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.2 → sift_stack_py-0.17.0}/lib/sift_py/grpc/_interceptors/base.py +0 -0
  564. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/grpc/_interceptors/context.py +0 -0
  565. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/grpc/_interceptors/metadata.py +0 -0
  566. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/grpc/_retry.py +0 -0
  567. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/grpc/keepalive.py +0 -0
  568. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/grpc/transport.py +0 -0
  569. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/grpc/transport_test.py +0 -0
  570. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/__init__.py +0 -0
  571. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/_internal/__init__.py +0 -0
  572. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/_internal/channel.py +0 -0
  573. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/_internal/error.py +0 -0
  574. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/_internal/ingest.py +0 -0
  575. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/_internal/ingest_test.py +0 -0
  576. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/_internal/ingestion_config.py +0 -0
  577. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/_internal/run.py +0 -0
  578. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/_service_test.py +0 -0
  579. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/buffer.py +0 -0
  580. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/channel.py +0 -0
  581. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/config/__init__.py +0 -0
  582. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/config/_telemetry_test.py +0 -0
  583. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/config/telemetry.py +0 -0
  584. {sift_stack_py-0.16.2/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.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/config/yaml/error.py +0 -0
  586. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/config/yaml/load.py +0 -0
  587. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/config/yaml/spec.py +0 -0
  588. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/config/yaml/test_load.py +0 -0
  589. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/flow.py +0 -0
  590. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/manager.py +0 -0
  591. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/rule/__init__.py +0 -0
  592. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/rule/config.py +0 -0
  593. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/ingestion/service.py +0 -0
  594. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/py.typed +0 -0
  595. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/report/_report_test.py +0 -0
  596. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/report/service.py +0 -0
  597. {sift_stack_py-0.16.2/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.2 → sift_stack_py-0.17.0}/lib/sift_py/report_templates/_config_test.py +0 -0
  599. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/report_templates/_service_test.py +0 -0
  600. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/report_templates/config.py +0 -0
  601. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/report_templates/service.py +0 -0
  602. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/rest.py +0 -0
  603. {sift_stack_py-0.16.2/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.2 → sift_stack_py-0.17.0}/lib/sift_py/rule/_config_test.py +0 -0
  605. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/rule/_service_test.py +0 -0
  606. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/rule/config.py +0 -0
  607. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/rule/service.py +0 -0
  608. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/rule_evaluation/_service_test.py +0 -0
  609. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/rule_evaluation/service.py +0 -0
  610. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/tag/_internal/shared.py +0 -0
  611. {sift_stack_py-0.16.2/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.2 → sift_stack_py-0.17.0}/lib/sift_py/yaml/_channel_test.py +0 -0
  613. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/yaml/_rule_test.py +0 -0
  614. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/yaml/_utils_test.py +0 -0
  615. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/yaml/calculated_channels.py +0 -0
  616. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/yaml/channel.py +0 -0
  617. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/yaml/report_templates.py +0 -0
  618. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/yaml/rule.py +0 -0
  619. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_py/yaml/utils.py +0 -0
  620. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_stack_py.egg-info/dependency_links.txt +0 -0
  621. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_stack_py.egg-info/entry_points.txt +0 -0
  622. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/lib/sift_stack_py.egg-info/top_level.txt +0 -0
  623. {sift_stack_py-0.16.2 → sift_stack_py-0.17.0}/setup.cfg +0 -0
  624. {sift_stack_py-0.16.2 → 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.2
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
 
@@ -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 = {