sift-stack-py 0.17.1__tar.gz → 0.18.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/PKG-INFO +11 -6
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/transport.py +5 -20
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/_test_results_log.py +16 -4
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/ingestion.py +94 -60
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/test_results.py +118 -31
- sift_stack_py-0.18.0/lib/sift_client/_internal/pyproject_config.py +84 -0
- sift_stack_py-0.18.0/lib/sift_client/_internal/pytest_plugin/audit_log.py +286 -0
- sift_stack_py-0.18.0/lib/sift_client/_internal/pytest_plugin/modes.py +68 -0
- sift_stack_py-0.18.0/lib/sift_client/_internal/pytest_plugin/options.py +651 -0
- sift_stack_py-0.18.0/lib/sift_client/_internal/pytest_plugin/report.py +619 -0
- sift_stack_py-0.18.0/lib/sift_client/_internal/pytest_plugin/steps.py +820 -0
- sift_stack_py-0.18.0/lib/sift_client/_internal/pytest_plugin/terminal.py +246 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/rest.py +2 -2
- sift_stack_py-0.18.0/lib/sift_client/_internal/urls.py +55 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/client.py +32 -0
- sift_stack_py-0.18.0/lib/sift_client/pytest_plugin.py +710 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/__init__.py +9 -1
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/ingestion.py +281 -19
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/reports.py +12 -2
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/runs.py +16 -7
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/sync_stubs/__init__.pyi +26 -9
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/test_results.py +17 -9
- sift_stack_py-0.18.0/lib/sift_client/scripts/import_test_result_log.py +144 -0
- sift_stack_py-0.18.0/lib/sift_client/sift_types/_mixins/metadata.py +19 -0
- sift_stack_py-0.18.0/lib/sift_client/sift_types/_mixins/simulated.py +32 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/asset.py +2 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/report.py +2 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/run.py +2 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/test_report.py +48 -3
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/transport/base_connection.py +6 -0
- sift_stack_py-0.18.0/lib/sift_client/util/test_results/__init__.py +155 -0
- sift_stack_py-0.18.0/lib/sift_client/util/test_results/bounds.py +152 -0
- sift_stack_py-0.18.0/lib/sift_client/util/test_results/context_manager.py +1197 -0
- sift_stack_py-0.18.0/lib/sift_py/yaml/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_stack_py.egg-info/PKG-INFO +11 -6
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_stack_py.egg-info/SOURCES.txt +12 -1
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_stack_py.egg-info/requires.txt +12 -5
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/pyproject.toml +39 -8
- sift_stack_py-0.17.1/lib/sift_client/scripts/import_test_result_log.py +0 -93
- sift_stack_py-0.17.1/lib/sift_client/util/test_results/__init__.py +0 -126
- sift_stack_py-0.17.1/lib/sift_client/util/test_results/bounds.py +0 -83
- sift_stack_py-0.17.1/lib/sift_client/util/test_results/context_manager.py +0 -633
- sift_stack_py-0.17.1/lib/sift_client/util/test_results/pytest_util.py +0 -206
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/LICENSE +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/README.md +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotation_logs/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotation_logs/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotation_logs/v1/annotation_logs_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotation_logs/v1/annotation_logs_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotation_logs/v1/annotation_logs_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotation_logs/v1/annotation_logs_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotations/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotations/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotations/v1/annotations_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotations/v1/annotations_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotations/v1/annotations_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/annotations/v1/annotations_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/api_keys/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/api_keys/v2/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/api_keys/v2/api_keys_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/api_keys/v2/api_keys_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/api_keys/v2/api_keys_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/api_keys/v2/api_keys_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/assets/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/assets/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/assets/v1/assets_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/assets/v1/assets_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/assets/v1/assets_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/assets/v1/assets_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/v1/calculated_channels_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/v1/calculated_channels_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/v1/calculated_channels_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/v1/calculated_channels_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/v2/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/v2/calculated_channels_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/v2/calculated_channels_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/v2/calculated_channels_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/calculated_channels/v2/calculated_channels_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/campaigns/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/campaigns/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/campaigns/v1/campaigns_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/campaigns/v1/campaigns_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/campaigns/v1/campaigns_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/campaigns/v1/campaigns_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/v1/channel_schemas_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/v1/channel_schemas_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/v1/channel_schemas_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/v1/channel_schemas_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/v2/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/v2/channel_schemas_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/v2/channel_schemas_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/v2/channel_schemas_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channel_schemas/v2/channel_schemas_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/v2/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/v2/channels_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/v2/channels_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/v2/channels_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/v2/channels_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/v3/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/v3/channels_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/v3/channels_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/v3/channels_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/channels/v3/channels_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/comment/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/comment/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/comment/v1/comment_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/comment/v1/comment_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/comment/v1/comment_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/comment/v1/comment_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/calculated_channels_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/calculated_channels_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/calculated_channels_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/calculated_channels_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_bit_field_element_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_bit_field_element_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_bit_field_element_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_bit_field_element_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_config_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_config_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_config_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_config_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_data_type_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_data_type_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_data_type_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_data_type_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_enum_type_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_enum_type_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_enum_type_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/channel_enum_type_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/organization_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/organization_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/organization_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/organization_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/resource_identifier_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/resource_identifier_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/resource_identifier_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/resource_identifier_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/resource_ref_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/resource_ref_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/resource_ref_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/resource_ref_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/user_defined_functions_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/user_defined_functions_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/user_defined_functions_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/user_defined_functions_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/user_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/user_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/user_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/type/v1/user_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/action_type_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/action_type_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/action_type_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/action_type_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/filter_field_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/filter_field_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/filter_field_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/filter_field_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/resource_type_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/resource_type_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/resource_type_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/common/v1/resource_type_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/v1/data_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/v1/data_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/v1/data_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/v1/data_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/v2/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/v2/data_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/v2/data_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/v2/data_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data/v2/data_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data_imports/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data_imports/v2/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data_imports/v2/data_imports_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data_imports/v2/data_imports_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data_imports/v2/data_imports_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/data_imports/v2/data_imports_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/dlq_errors/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/dlq_errors/v2/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/dlq_errors/v2/dlq_errors_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/dlq_errors/v2/dlq_errors_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/dlq_errors/v2/dlq_errors_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/dlq_errors/v2/dlq_errors_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/exports/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/exports/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/exports/v1/exports_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/exports/v1/exports_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/exports/v1/exports_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/exports/v1/exports_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/external_sync/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/external_sync/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/external_sync/v1/external_sync_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/external_sync/v1/external_sync_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/external_sync/v1/external_sync_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/external_sync/v1/external_sync_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingest/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingest/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingest/v1/ingest_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingest/v1/ingest_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingest/v1/ingest_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingest/v1/ingest_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/v1/ingestion_configs_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/v1/ingestion_configs_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/v1/ingestion_configs_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/v1/ingestion_configs_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/v2/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/v2/ingestion_configs_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/v2/ingestion_configs_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/v2/ingestion_configs_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ingestion_configs/v2/ingestion_configs_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/jobs/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/jobs/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/jobs/v1/jobs_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/jobs/v1/jobs_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/jobs/v1/jobs_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/jobs/v1/jobs_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/me/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/me/v2/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/me/v2/me_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/me/v2/me_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/me/v2/me_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/me/v2/me_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/metadata/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/metadata/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/metadata/v1/metadata_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/metadata/v1/metadata_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/metadata/v1/metadata_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/metadata/v1/metadata_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/notifications/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/notifications/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/notifications/v1/notifications_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/notifications/v1/notifications_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/notifications/v1/notifications_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/notifications/v1/notifications_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/panel_configurations/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/panel_configurations/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/panel_configurations/v1/panel_configuration_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/panel_configurations/v1/panel_configuration_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/panel_configurations/v1/panel_configuration_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/panel_configurations/v1/panel_configuration_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ping/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ping/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ping/v1/ping_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ping/v1/ping_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ping/v1/ping_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/ping/v1/ping_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/policies/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/policies/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/policies/v1/policies_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/policies/v1/policies_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/policies/v1/policies_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/policies/v1/policies_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/principal_attributes/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/principal_attributes/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/principal_attributes/v1/principal_attributes_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/principal_attributes/v1/principal_attributes_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/principal_attributes/v1/principal_attributes_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/principal_attributes/v1/principal_attributes_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/protobuf_descriptors/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/protobuf_descriptors/v2/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/protobuf_descriptors/v2/channel_parsing_options_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/protobuf_descriptors/v2/channel_parsing_options_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/protobuf_descriptors/v2/channel_parsing_options_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/protobuf_descriptors/v2/channel_parsing_options_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/protobuf_descriptors/v2/protobuf_descriptors_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/protobuf_descriptors/v2/protobuf_descriptors_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/protobuf_descriptors/v2/protobuf_descriptors_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/protobuf_descriptors/v2/protobuf_descriptors_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/py.typed +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/remote_files/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/remote_files/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/remote_files/v1/remote_files_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/remote_files/v1/remote_files_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/remote_files/v1/remote_files_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/remote_files/v1/remote_files_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/report_templates/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/report_templates/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/report_templates/v1/report_templates_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/report_templates/v1/report_templates_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/report_templates/v1/report_templates_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/report_templates/v1/report_templates_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/reports/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/reports/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/reports/v1/reports_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/reports/v1/reports_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/reports/v1/reports_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/reports/v1/reports_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/resource_attribute/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/resource_attribute/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/resource_attribute/v1/resource_attribute_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/resource_attribute/v1/resource_attribute_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/resource_attribute/v1/resource_attribute_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/resource_attribute/v1/resource_attribute_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/roles/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/roles/v2/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/roles/v2/roles_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/roles/v2/roles_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/roles/v2/roles_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/roles/v2/roles_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rule_evaluation/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rule_evaluation/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rule_evaluation/v1/rule_evaluation_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rule_evaluation/v1/rule_evaluation_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rule_evaluation/v1/rule_evaluation_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rule_evaluation/v1/rule_evaluation_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rules/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rules/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rules/v1/rules_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rules/v1/rules_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rules/v1/rules_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/rules/v1/rules_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/runs/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/runs/v2/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/runs/v2/runs_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/runs/v2/runs_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/runs/v2/runs_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/runs/v2/runs_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/saved_searches/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/saved_searches/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/saved_searches/v1/saved_searches_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/saved_searches/v1/saved_searches_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/saved_searches/v1/saved_searches_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/saved_searches/v1/saved_searches_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/v1/tags_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/v1/tags_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/v1/tags_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/v1/tags_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/v2/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/v2/tags_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/v2/tags_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/v2/tags_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/tags/v2/tags_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/test_reports/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/test_reports/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/test_reports/v1/test_reports_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/test_reports/v1/test_reports_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/test_reports/v1/test_reports_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/test_reports/v1/test_reports_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/unit/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/unit/v2/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/unit/v2/unit_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/unit/v2/unit_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/unit/v2/unit_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/unit/v2/unit_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_defined_functions/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_defined_functions/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_defined_functions/v1/user_defined_functions_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_defined_functions/v1/user_defined_functions_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_defined_functions/v1/user_defined_functions_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_defined_functions/v1/user_defined_functions_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_groups/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_groups/v2/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_groups/v2/user_groups_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_groups/v2/user_groups_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_groups/v2/user_groups_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/user_groups/v2/user_groups_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/users/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/users/v2/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/users/v2/users_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/users/v2/users_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/users/v2/users_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/users/v2/users_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/v1/views_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/v1/views_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/v1/views_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/v1/views_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/v2/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/v2/views_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/v2/views_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/v2/views_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/views/v2/views_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/webhooks/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/webhooks/v1/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/webhooks/v1/webhooks_pb2.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/webhooks/v1/webhooks_pb2.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/webhooks/v1/webhooks_pb2_grpc.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift/webhooks/v1/webhooks_pb2_grpc.pyi +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/gen_pyi.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/_async_interceptors/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/_async_interceptors/base.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/_async_interceptors/metadata.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/_interceptors/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/_interceptors/base.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/_interceptors/context.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/_interceptors/metadata.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/_retry.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/keepalive.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/server_interceptors/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/server_interceptors/server_interceptor.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/transport_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/assets.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/base.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/calculated_channels.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/channels.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/data.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/data_imports.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/exports.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/jobs.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/ping.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/remote_files.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/reports.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/rules.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/runs.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/tags.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/units.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/low_level_wrappers/upload.py +0 -0
- {sift_stack_py-0.17.1/lib/sift_client/_internal/util → sift_stack_py-0.18.0/lib/sift_client/_internal/pytest_plugin}/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/sync_wrapper.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/time.py +0 -0
- {sift_stack_py-0.17.1/lib/sift_client/scripts → sift_stack_py-0.18.0/lib/sift_client/_internal/util}/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/util/channels.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/util/executor.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/util/file.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/util/hdf5.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/util/numpy_types.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/util/progress.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/util/tdms.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/util/timestamp.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/util/util.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/config.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/errors.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/py.typed +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/_base.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/assets.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/calculated_channels.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/channels.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/data_imports.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/exports.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/file_attachments.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/jobs.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/ping.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/py.typed +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/rules.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/sync_stubs/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/sync_stubs/py.typed +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/resources/tags.py +0 -0
- {sift_stack_py-0.17.1/lib/sift_client/sift_types/_mixins → sift_stack_py-0.18.0/lib/sift_client/scripts}/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/_base.py +0 -0
- {sift_stack_py-0.17.1/lib/sift_py/_internal/test_util → sift_stack_py-0.18.0/lib/sift_client/sift_types/_mixins}/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/_mixins/file_attachments.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/calculated_channel.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/channel.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/data_import.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/export.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/file_attachment.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/ingestion.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/job.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/rule.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/sift_types/tag.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/transport/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/transport/grpc_transport.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/transport/rest_transport.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/util/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/util/cel_utils.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/util/metadata.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/util/util.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/cel.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/channel.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/convert/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/convert/json.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/convert/protobuf.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/convert/timestamp.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/metadata.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/metadata_test.py +0 -0
- {sift_stack_py-0.17.1/lib/sift_py/asset → sift_stack_py-0.18.0/lib/sift_py/_internal/test_util}/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/test_util/channel.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/test_util/fn.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/test_util/server_interceptor.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/time.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_internal/user.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/_rest_test.py +0 -0
- {sift_stack_py-0.17.1/lib/sift_py/calculated_channels → sift_stack_py-0.18.0/lib/sift_py/asset}/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/asset/_config_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/asset/_internal/shared.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/asset/_service_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/asset/config.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/asset/service.py +0 -0
- {sift_stack_py-0.17.1/lib/sift_py/file_attachment/_internal → sift_stack_py-0.18.0/lib/sift_py/calculated_channels}/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/calculated_channels/_service_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/calculated_channels/config.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/calculated_channels/service.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data/_channel.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data/_deserialize.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data/_deserialize_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data/_service_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data/_validate.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data/error.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data/query.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data/service.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_config.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_config_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_csv_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_hdf5_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_parquet_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_ros_channel.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_rosbag_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_status_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_tdms_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_utils.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/_utils_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/ch10.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/config.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/csv.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/hdf5.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/parquet.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/parquet_complex_types.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/rosbags.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/status.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/tdms.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/tempfile.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/data_import/time_format.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/error.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/file_attachment/__init__.py +0 -0
- {sift_stack_py-0.17.1/lib/sift_py/grpc/_async_interceptors → sift_stack_py-0.18.0/lib/sift_py/file_attachment/_internal}/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/file_attachment/_internal/download.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/file_attachment/_internal/upload.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/file_attachment/_service_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/file_attachment/entity.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/file_attachment/metadata.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/file_attachment/service.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/grpc/__init__.py +0 -0
- {sift_stack_py-0.17.1/lib/sift_py/grpc/_interceptors → sift_stack_py-0.18.0/lib/sift_py/grpc/_async_interceptors}/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/grpc/_async_interceptors/base.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/grpc/_async_interceptors/metadata.py +0 -0
- {sift_stack_py-0.17.1/lib/sift_py/ingestion/config/yaml → sift_stack_py-0.18.0/lib/sift_py/grpc/_interceptors}/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/grpc/_interceptors/base.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/grpc/_interceptors/context.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/grpc/_interceptors/metadata.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/grpc/_retry.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/grpc/keepalive.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/grpc/transport.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/grpc/transport_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/_internal/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/_internal/channel.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/_internal/error.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/_internal/ingest.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/_internal/ingest_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/_internal/ingestion_config.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/_internal/run.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/_service_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/buffer.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/channel.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/config/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/config/_telemetry_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/config/telemetry.py +0 -0
- {sift_stack_py-0.17.1/lib/sift_py/report_templates → sift_stack_py-0.18.0/lib/sift_py/ingestion/config/yaml}/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/config/yaml/error.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/config/yaml/load.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/config/yaml/spec.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/config/yaml/test_load.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/flow.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/manager.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/rule/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/rule/config.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/ingestion/service.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/py.typed +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/report/_report_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/report/service.py +0 -0
- {sift_stack_py-0.17.1/lib/sift_py/rule → sift_stack_py-0.18.0/lib/sift_py/report_templates}/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/report_templates/_config_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/report_templates/_service_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/report_templates/config.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/report_templates/service.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/rest.py +0 -0
- {sift_stack_py-0.17.1/lib/sift_py/yaml → sift_stack_py-0.18.0/lib/sift_py/rule}/__init__.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/rule/_config_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/rule/_service_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/rule/config.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/rule/service.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/rule_evaluation/_service_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/rule_evaluation/service.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/tag/_internal/shared.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/yaml/_channel_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/yaml/_rule_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/yaml/_utils_test.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/yaml/calculated_channels.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/yaml/channel.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/yaml/report_templates.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/yaml/rule.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_py/yaml/utils.py +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_stack_py.egg-info/dependency_links.txt +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_stack_py.egg-info/entry_points.txt +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_stack_py.egg-info/top_level.txt +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/setup.cfg +0 -0
- {sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sift_stack_py
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.18.0
|
|
4
4
|
Summary: Python client library for the Sift API
|
|
5
5
|
Maintainer-email: Sift Software Engineers <engineering@siftstack.com>
|
|
6
6
|
License: Copyright (c) 2024 Azimuth Industries Inc.
|
|
@@ -46,6 +46,7 @@ Requires-Dist: types-requests~=2.25
|
|
|
46
46
|
Requires-Dist: googleapis-common-protos>=1.60
|
|
47
47
|
Requires-Dist: protoc-gen-openapiv2>=0.0.1
|
|
48
48
|
Requires-Dist: filelock~=3.15
|
|
49
|
+
Requires-Dist: tomli~=2.0; python_version < "3.11"
|
|
49
50
|
Provides-Extra: all
|
|
50
51
|
Requires-Dist: cffi~=1.14; extra == "all"
|
|
51
52
|
Requires-Dist: h5py~=3.11; extra == "all"
|
|
@@ -54,7 +55,7 @@ Requires-Dist: polars~=1.8; extra == "all"
|
|
|
54
55
|
Requires-Dist: pyOpenSSL<24.0.0; extra == "all"
|
|
55
56
|
Requires-Dist: pyarrow>=17.0.0; extra == "all"
|
|
56
57
|
Requires-Dist: rosbags~=0.0; python_full_version >= "3.8.2" and extra == "all"
|
|
57
|
-
Requires-Dist: sift-stream-bindings==0.
|
|
58
|
+
Requires-Dist: sift-stream-bindings==0.4.1; extra == "all"
|
|
58
59
|
Requires-Dist: types-pyOpenSSL<24.0.0; extra == "all"
|
|
59
60
|
Provides-Extra: build
|
|
60
61
|
Requires-Dist: build==1.2.1; extra == "build"
|
|
@@ -69,6 +70,7 @@ Requires-Dist: pytest-asyncio==0.23.7; extra == "dev"
|
|
|
69
70
|
Requires-Dist: pytest-benchmark==4.0.0; extra == "dev"
|
|
70
71
|
Requires-Dist: pytest-dotenv==0.5.2; extra == "dev"
|
|
71
72
|
Requires-Dist: pytest-mock==3.14.0; extra == "dev"
|
|
73
|
+
Requires-Dist: pytest-randomly==3.15.0; extra == "dev"
|
|
72
74
|
Requires-Dist: pytest==8.2.2; extra == "dev"
|
|
73
75
|
Requires-Dist: ruff~=0.12.10; extra == "dev"
|
|
74
76
|
Requires-Dist: tomlkit~=0.13.3; extra == "dev"
|
|
@@ -88,10 +90,11 @@ Requires-Dist: pytest-asyncio==0.23.7; extra == "dev-all"
|
|
|
88
90
|
Requires-Dist: pytest-benchmark==4.0.0; extra == "dev-all"
|
|
89
91
|
Requires-Dist: pytest-dotenv==0.5.2; extra == "dev-all"
|
|
90
92
|
Requires-Dist: pytest-mock==3.14.0; extra == "dev-all"
|
|
93
|
+
Requires-Dist: pytest-randomly==3.15.0; extra == "dev-all"
|
|
91
94
|
Requires-Dist: pytest==8.2.2; extra == "dev-all"
|
|
92
95
|
Requires-Dist: rosbags~=0.0; python_full_version >= "3.8.2" and extra == "dev-all"
|
|
93
96
|
Requires-Dist: ruff~=0.12.10; extra == "dev-all"
|
|
94
|
-
Requires-Dist: sift-stream-bindings==0.
|
|
97
|
+
Requires-Dist: sift-stream-bindings==0.4.1; extra == "dev-all"
|
|
95
98
|
Requires-Dist: tomlkit~=0.13.3; extra == "dev-all"
|
|
96
99
|
Requires-Dist: types-pyOpenSSL<24.0.0; extra == "dev-all"
|
|
97
100
|
Provides-Extra: development
|
|
@@ -102,6 +105,7 @@ Requires-Dist: pytest-asyncio==0.23.7; extra == "development"
|
|
|
102
105
|
Requires-Dist: pytest-benchmark==4.0.0; extra == "development"
|
|
103
106
|
Requires-Dist: pytest-dotenv==0.5.2; extra == "development"
|
|
104
107
|
Requires-Dist: pytest-mock==3.14.0; extra == "development"
|
|
108
|
+
Requires-Dist: pytest-randomly==3.15.0; extra == "development"
|
|
105
109
|
Requires-Dist: pytest==8.2.2; extra == "development"
|
|
106
110
|
Requires-Dist: ruff~=0.12.10; extra == "development"
|
|
107
111
|
Requires-Dist: tomlkit~=0.13.3; extra == "development"
|
|
@@ -138,10 +142,11 @@ Requires-Dist: pytest-asyncio==0.23.7; extra == "docs-build"
|
|
|
138
142
|
Requires-Dist: pytest-benchmark==4.0.0; extra == "docs-build"
|
|
139
143
|
Requires-Dist: pytest-dotenv==0.5.2; extra == "docs-build"
|
|
140
144
|
Requires-Dist: pytest-mock==3.14.0; extra == "docs-build"
|
|
145
|
+
Requires-Dist: pytest-randomly==3.15.0; extra == "docs-build"
|
|
141
146
|
Requires-Dist: pytest==8.2.2; extra == "docs-build"
|
|
142
147
|
Requires-Dist: rosbags~=0.0; python_full_version >= "3.8.2" and extra == "docs-build"
|
|
143
148
|
Requires-Dist: ruff~=0.12.10; extra == "docs-build"
|
|
144
|
-
Requires-Dist: sift-stream-bindings==0.
|
|
149
|
+
Requires-Dist: sift-stream-bindings==0.4.1; extra == "docs-build"
|
|
145
150
|
Requires-Dist: tomlkit~=0.13.3; extra == "docs-build"
|
|
146
151
|
Requires-Dist: types-pyOpenSSL<24.0.0; extra == "docs-build"
|
|
147
152
|
Provides-Extra: file-imports
|
|
@@ -159,9 +164,9 @@ Requires-Dist: types-pyOpenSSL<24.0.0; extra == "openssl"
|
|
|
159
164
|
Provides-Extra: rosbags
|
|
160
165
|
Requires-Dist: rosbags~=0.0; python_full_version >= "3.8.2" and extra == "rosbags"
|
|
161
166
|
Provides-Extra: sift-stream
|
|
162
|
-
Requires-Dist: sift-stream-bindings==0.
|
|
167
|
+
Requires-Dist: sift-stream-bindings==0.4.1; extra == "sift-stream"
|
|
163
168
|
Provides-Extra: sift-stream-bindings
|
|
164
|
-
Requires-Dist: sift-stream-bindings==0.
|
|
169
|
+
Requires-Dist: sift-stream-bindings==0.4.1; extra == "sift-stream-bindings"
|
|
165
170
|
Provides-Extra: tdms
|
|
166
171
|
Requires-Dist: npTDMS~=1.9; extra == "tdms"
|
|
167
172
|
|
{sift_stack_py-0.17.1 → sift_stack_py-0.18.0}/lib/sift_client/_internal/grpc_transport/transport.py
RENAMED
|
@@ -8,7 +8,6 @@ from __future__ import annotations
|
|
|
8
8
|
|
|
9
9
|
from importlib.metadata import PackageNotFoundError, version
|
|
10
10
|
from typing import TYPE_CHECKING, Any, TypedDict, cast
|
|
11
|
-
from urllib.parse import ParseResult, urlparse
|
|
12
11
|
|
|
13
12
|
import grpc
|
|
14
13
|
import grpc.aio as grpc_aio
|
|
@@ -21,6 +20,7 @@ from sift_client._internal.grpc_transport._interceptors.metadata import (
|
|
|
21
20
|
Metadata,
|
|
22
21
|
MetadataInterceptor,
|
|
23
22
|
)
|
|
23
|
+
from sift_client._internal.urls import parse_host
|
|
24
24
|
|
|
25
25
|
if TYPE_CHECKING:
|
|
26
26
|
from sift_client._internal.grpc_transport._async_interceptors.base import ClientAsyncInterceptor
|
|
@@ -81,7 +81,7 @@ def use_sift_channel(
|
|
|
81
81
|
|
|
82
82
|
credentials = get_ssl_credentials(cert_via_openssl)
|
|
83
83
|
options = _compute_channel_options(config)
|
|
84
|
-
api_uri =
|
|
84
|
+
api_uri = parse_host(config["uri"])
|
|
85
85
|
channel = grpc.secure_channel(api_uri, credentials, options)
|
|
86
86
|
interceptors = _compute_sift_interceptors(config, metadata)
|
|
87
87
|
return grpc.intercept_channel(channel, *interceptors)
|
|
@@ -101,7 +101,7 @@ def use_sift_async_channel(
|
|
|
101
101
|
return _use_insecure_sift_async_channel(config, metadata)
|
|
102
102
|
|
|
103
103
|
return grpc_aio.secure_channel(
|
|
104
|
-
target=
|
|
104
|
+
target=parse_host(config["uri"]),
|
|
105
105
|
credentials=get_ssl_credentials(cert_via_openssl),
|
|
106
106
|
options=_compute_channel_options(config),
|
|
107
107
|
interceptors=_compute_sift_async_interceptors(config, metadata),
|
|
@@ -115,7 +115,7 @@ def _use_insecure_sift_channel(
|
|
|
115
115
|
FOR DEVELOPMENT PURPOSES ONLY
|
|
116
116
|
"""
|
|
117
117
|
options = _compute_channel_options(config)
|
|
118
|
-
api_uri =
|
|
118
|
+
api_uri = parse_host(config["uri"])
|
|
119
119
|
channel = grpc.insecure_channel(api_uri, options)
|
|
120
120
|
interceptors = _compute_sift_interceptors(config, metadata)
|
|
121
121
|
return grpc.intercept_channel(channel, *interceptors)
|
|
@@ -128,7 +128,7 @@ def _use_insecure_sift_async_channel(
|
|
|
128
128
|
FOR DEVELOPMENT PURPOSES ONLY
|
|
129
129
|
"""
|
|
130
130
|
return grpc_aio.insecure_channel(
|
|
131
|
-
target=
|
|
131
|
+
target=parse_host(config["uri"]),
|
|
132
132
|
options=_compute_channel_options(config),
|
|
133
133
|
interceptors=_compute_sift_async_interceptors(config, metadata),
|
|
134
134
|
)
|
|
@@ -209,21 +209,6 @@ def _metadata_async_interceptor(
|
|
|
209
209
|
return MetadataAsyncInterceptor(md)
|
|
210
210
|
|
|
211
211
|
|
|
212
|
-
def _clean_uri(uri: str, use_ssl: bool) -> str:
|
|
213
|
-
"""
|
|
214
|
-
This will automatically transform the URI to an acceptable form regardless of whether or not
|
|
215
|
-
users included the scheme in the URL or included trailing slashes.
|
|
216
|
-
"""
|
|
217
|
-
|
|
218
|
-
if "http://" in uri or "https://" in uri:
|
|
219
|
-
parsed: ParseResult = urlparse(uri)
|
|
220
|
-
return parsed.netloc
|
|
221
|
-
|
|
222
|
-
full_uri = f"https://{uri}" if use_ssl else f"http://{uri}"
|
|
223
|
-
parsed_res: ParseResult = urlparse(full_uri)
|
|
224
|
-
return parsed_res.netloc
|
|
225
|
-
|
|
226
|
-
|
|
227
212
|
def _compute_user_agent() -> str:
|
|
228
213
|
try:
|
|
229
214
|
return f"sift_stack_py/{version('sift_stack_py')}"
|
|
@@ -32,8 +32,8 @@ versa), which is acceptable because writes are tiny and we only have one reader.
|
|
|
32
32
|
|
|
33
33
|
Waiting for the lock is cooperative: ``AsyncFileLock`` retries a non-blocking
|
|
34
34
|
acquire and sleeps on the event loop between attempts, so a contended or stale
|
|
35
|
-
lock never blocks the loop thread
|
|
36
|
-
bounded by ``LOG_LOCK_TIMEOUT_SECONDS``,
|
|
35
|
+
lock never blocks the loop thread. The acquire is also
|
|
36
|
+
bounded by ``LOG_LOCK_TIMEOUT_SECONDS``, so a stuck lock surfaces as
|
|
37
37
|
``TimeoutError`` instead of waiting forever. The file read/write under the lock
|
|
38
38
|
runs inline on the loop; it is a tiny local-file operation, the same class of
|
|
39
39
|
brief synchronous work async methods do throughout this client.
|
|
@@ -49,6 +49,7 @@ Ad-hoc writers to the same path are not protected.
|
|
|
49
49
|
from __future__ import annotations
|
|
50
50
|
|
|
51
51
|
import json
|
|
52
|
+
import logging
|
|
52
53
|
import os
|
|
53
54
|
import re
|
|
54
55
|
from dataclasses import dataclass, field
|
|
@@ -58,9 +59,13 @@ from typing import TYPE_CHECKING, Any, Generator
|
|
|
58
59
|
from filelock import AsyncFileLock, Timeout
|
|
59
60
|
from google.protobuf import json_format
|
|
60
61
|
|
|
62
|
+
from sift_client._internal.pytest_plugin.audit_log import log_event
|
|
63
|
+
|
|
61
64
|
if TYPE_CHECKING:
|
|
62
65
|
from sift_client.sift_types.test_report import TestMeasurement, TestReport, TestStep
|
|
63
66
|
|
|
67
|
+
logger = logging.getLogger(__name__)
|
|
68
|
+
|
|
64
69
|
|
|
65
70
|
# Seconds to wait for the sidecar lock before raising TimeoutError. Long enough
|
|
66
71
|
# to absorb brief contention, short enough that a stale holder can't block forever.
|
|
@@ -158,9 +163,13 @@ class _ReplayState:
|
|
|
158
163
|
|
|
159
164
|
@dataclass
|
|
160
165
|
class ReplayResult:
|
|
161
|
-
"""Result of replaying a log file.
|
|
166
|
+
"""Result of replaying a log file.
|
|
162
167
|
|
|
163
|
-
report
|
|
168
|
+
``report`` is None on an incremental resume tick that uploaded only steps or
|
|
169
|
+
measurements; the report itself was created on an earlier tick.
|
|
170
|
+
"""
|
|
171
|
+
|
|
172
|
+
report: TestReport | None = None
|
|
164
173
|
steps: list[TestStep] = field(default_factory=list)
|
|
165
174
|
measurements: list[TestMeasurement] = field(default_factory=list)
|
|
166
175
|
|
|
@@ -270,6 +279,9 @@ def parse_log_data_lines(
|
|
|
270
279
|
continue
|
|
271
280
|
match = line_pattern.match(line)
|
|
272
281
|
if not match:
|
|
282
|
+
log_event(
|
|
283
|
+
logger, logging.WARNING, "log.parse_error", line=data_line_count + 1, text=line
|
|
284
|
+
)
|
|
273
285
|
raise ValueError(f"Invalid log line: {line}")
|
|
274
286
|
data_line_count += 1
|
|
275
287
|
if data_line_count <= start_line:
|
|
@@ -236,6 +236,86 @@ class IngestionLowLevelClient(LowLevelClientBase, WithGrpcClient):
|
|
|
236
236
|
return _hash_flows(asset_name=asset_name, flows=flows)
|
|
237
237
|
|
|
238
238
|
|
|
239
|
+
async def _build_sift_stream_instance(
|
|
240
|
+
api_key: str,
|
|
241
|
+
grpc_uri: str,
|
|
242
|
+
ingestion_config_form: IngestionConfigFormPy,
|
|
243
|
+
run_form: RunFormPy | None = None,
|
|
244
|
+
run_id: str | None = None,
|
|
245
|
+
asset_tags: list[str] | None = None,
|
|
246
|
+
asset_metadata: list[MetadataPy] | None = None,
|
|
247
|
+
streaming_mode: StreamingMode = ..., # type: ignore[assignment]
|
|
248
|
+
retry_policy: RetryPolicyPy | None = None,
|
|
249
|
+
disk_backup_policy: DiskBackupPolicyPy | None = None,
|
|
250
|
+
checkpoint_interval_seconds: int | None = None,
|
|
251
|
+
enable_tls: bool = True,
|
|
252
|
+
tracing_config: TracingConfig | None = None,
|
|
253
|
+
) -> SiftStreamPy:
|
|
254
|
+
"""Build a raw `SiftStreamPy` without wrapping it in a client.
|
|
255
|
+
|
|
256
|
+
Shared by both `IngestionConfigStreamingLowLevelClient` and the auto-register path.
|
|
257
|
+
"""
|
|
258
|
+
# Importing here to allow sift_stream_bindings to be an optional dependency for non-ingestion users
|
|
259
|
+
# TODO(nathan): Fix bindings to fix mypy issues with tracing functions
|
|
260
|
+
from sift_stream_bindings import ( # type: ignore[attr-defined]
|
|
261
|
+
DurationPy,
|
|
262
|
+
SiftStreamBuilderPy,
|
|
263
|
+
init_tracing, # type: ignore[attr-defined]
|
|
264
|
+
init_tracing_with_file, # type: ignore[attr-defined]
|
|
265
|
+
is_tracing_initialized, # type: ignore[attr-defined]
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
from sift_client.resources.ingestion import StreamingMode, TracingConfig
|
|
269
|
+
|
|
270
|
+
_default_max_log_files = 7
|
|
271
|
+
_default_logfile_prefix = "sift_stream_bindings.log"
|
|
272
|
+
|
|
273
|
+
if streaming_mode is ...: # type: ignore[comparison-overlap]
|
|
274
|
+
streaming_mode = StreamingMode.LIVE_WITH_BACKUPS
|
|
275
|
+
|
|
276
|
+
if not is_tracing_initialized():
|
|
277
|
+
if tracing_config is None:
|
|
278
|
+
tracing_config = TracingConfig.with_file()
|
|
279
|
+
|
|
280
|
+
if tracing_config.log_dir is not None:
|
|
281
|
+
init_tracing_with_file(
|
|
282
|
+
tracing_config.level,
|
|
283
|
+
tracing_config.log_dir,
|
|
284
|
+
tracing_config.filename_prefix or _default_logfile_prefix,
|
|
285
|
+
tracing_config.max_log_files or _default_max_log_files,
|
|
286
|
+
)
|
|
287
|
+
else:
|
|
288
|
+
init_tracing(tracing_config.level)
|
|
289
|
+
|
|
290
|
+
sift_builder = SiftStreamBuilderPy(uri=grpc_uri, apikey=api_key)
|
|
291
|
+
sift_builder.enable_tls = enable_tls
|
|
292
|
+
|
|
293
|
+
config_builder = sift_builder.ingestion_config(ingestion_config_form)
|
|
294
|
+
config_builder.run = run_form
|
|
295
|
+
config_builder.run_id = run_id
|
|
296
|
+
config_builder.asset_tags = asset_tags
|
|
297
|
+
config_builder.metadata = asset_metadata
|
|
298
|
+
|
|
299
|
+
if streaming_mode == StreamingMode.LIVE_ONLY:
|
|
300
|
+
return await config_builder.live_only().build()
|
|
301
|
+
|
|
302
|
+
elif streaming_mode == StreamingMode.FILE_BACKUP:
|
|
303
|
+
fb_builder = config_builder.file_backup()
|
|
304
|
+
if disk_backup_policy is not None:
|
|
305
|
+
fb_builder.disk_backup_policy = disk_backup_policy
|
|
306
|
+
return await fb_builder.build()
|
|
307
|
+
|
|
308
|
+
else: # LIVE_WITH_BACKUPS (default)
|
|
309
|
+
lwb_builder = config_builder.live_with_backups()
|
|
310
|
+
if retry_policy is not None:
|
|
311
|
+
lwb_builder.retry_policy = retry_policy
|
|
312
|
+
if disk_backup_policy is not None:
|
|
313
|
+
lwb_builder.disk_backup_policy = disk_backup_policy
|
|
314
|
+
if checkpoint_interval_seconds is not None:
|
|
315
|
+
lwb_builder.checkpoint_interval = DurationPy(secs=checkpoint_interval_seconds, nanos=0)
|
|
316
|
+
return await lwb_builder.build()
|
|
317
|
+
|
|
318
|
+
|
|
239
319
|
class IngestionConfigStreamingLowLevelClient(LowLevelClientBase):
|
|
240
320
|
DEFAULT_MAX_LOG_FILES = 7 # Equal to 1 week of logs
|
|
241
321
|
DEFAULT_LOGFILE_PREFIX = "sift_stream_bindings.log"
|
|
@@ -262,67 +342,21 @@ class IngestionConfigStreamingLowLevelClient(LowLevelClientBase):
|
|
|
262
342
|
enable_tls: bool = True,
|
|
263
343
|
tracing_config: TracingConfig | None = None,
|
|
264
344
|
) -> IngestionConfigStreamingLowLevelClient:
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
345
|
+
sift_stream_instance = await _build_sift_stream_instance(
|
|
346
|
+
api_key=api_key,
|
|
347
|
+
grpc_uri=grpc_uri,
|
|
348
|
+
ingestion_config_form=ingestion_config_form,
|
|
349
|
+
run_form=run_form,
|
|
350
|
+
run_id=run_id,
|
|
351
|
+
asset_tags=asset_tags,
|
|
352
|
+
asset_metadata=asset_metadata,
|
|
353
|
+
streaming_mode=streaming_mode,
|
|
354
|
+
retry_policy=retry_policy,
|
|
355
|
+
disk_backup_policy=disk_backup_policy,
|
|
356
|
+
checkpoint_interval_seconds=checkpoint_interval_seconds,
|
|
357
|
+
enable_tls=enable_tls,
|
|
358
|
+
tracing_config=tracing_config,
|
|
273
359
|
)
|
|
274
|
-
|
|
275
|
-
from sift_client.resources.ingestion import StreamingMode, TracingConfig
|
|
276
|
-
|
|
277
|
-
if streaming_mode is ...: # type: ignore[comparison-overlap]
|
|
278
|
-
streaming_mode = StreamingMode.LIVE_WITH_BACKUPS
|
|
279
|
-
|
|
280
|
-
if not is_tracing_initialized():
|
|
281
|
-
if tracing_config is None:
|
|
282
|
-
tracing_config = TracingConfig.with_file()
|
|
283
|
-
|
|
284
|
-
if tracing_config.log_dir is not None:
|
|
285
|
-
# Use file logging
|
|
286
|
-
init_tracing_with_file(
|
|
287
|
-
tracing_config.level,
|
|
288
|
-
tracing_config.log_dir,
|
|
289
|
-
tracing_config.filename_prefix or cls.DEFAULT_LOGFILE_PREFIX,
|
|
290
|
-
tracing_config.max_log_files or cls.DEFAULT_MAX_LOG_FILES,
|
|
291
|
-
)
|
|
292
|
-
else:
|
|
293
|
-
# Use stdout/stderr only
|
|
294
|
-
init_tracing(tracing_config.level)
|
|
295
|
-
|
|
296
|
-
sift_builder = SiftStreamBuilderPy(uri=grpc_uri, apikey=api_key)
|
|
297
|
-
sift_builder.enable_tls = enable_tls
|
|
298
|
-
|
|
299
|
-
config_builder = sift_builder.ingestion_config(ingestion_config_form)
|
|
300
|
-
config_builder.run = run_form
|
|
301
|
-
config_builder.run_id = run_id
|
|
302
|
-
config_builder.asset_tags = asset_tags
|
|
303
|
-
config_builder.metadata = asset_metadata
|
|
304
|
-
|
|
305
|
-
if streaming_mode == StreamingMode.LIVE_ONLY:
|
|
306
|
-
sift_stream_instance = await config_builder.live_only().build()
|
|
307
|
-
|
|
308
|
-
elif streaming_mode == StreamingMode.FILE_BACKUP:
|
|
309
|
-
fb_builder = config_builder.file_backup()
|
|
310
|
-
if disk_backup_policy is not None:
|
|
311
|
-
fb_builder.disk_backup_policy = disk_backup_policy
|
|
312
|
-
sift_stream_instance = await fb_builder.build()
|
|
313
|
-
|
|
314
|
-
else: # LIVE_WITH_BACKUPS (default)
|
|
315
|
-
lwb_builder = config_builder.live_with_backups()
|
|
316
|
-
if retry_policy is not None:
|
|
317
|
-
lwb_builder.retry_policy = retry_policy
|
|
318
|
-
if disk_backup_policy is not None:
|
|
319
|
-
lwb_builder.disk_backup_policy = disk_backup_policy
|
|
320
|
-
if checkpoint_interval_seconds is not None:
|
|
321
|
-
lwb_builder.checkpoint_interval = DurationPy(
|
|
322
|
-
secs=checkpoint_interval_seconds, nanos=0
|
|
323
|
-
)
|
|
324
|
-
sift_stream_instance = await lwb_builder.build()
|
|
325
|
-
|
|
326
360
|
return cls(sift_stream_instance)
|
|
327
361
|
|
|
328
362
|
async def send(self, flow: FlowPy):
|