From 26f7adb84e3d6d8c54236b904c7fb79303333558 Mon Sep 17 00:00:00 2001 From: solidiquis Date: Fri, 30 Jan 2026 13:08:50 -0800 Subject: [PATCH 1/7] python(chore): v0.10.0 prep --- python/CHANGELOG.md | 16 ++++++++++++++++ python/lib/sift_client/__init__.py | 6 ------ python/lib/sift_client/client.py | 3 --- python/lib/sift_client/errors.py | 16 ---------------- python/lib/sift_client/resources/_base.py | 2 -- python/lib/sift_py/__init__.py | 15 +++++++++++++++ python/pyproject.toml | 14 +++++++------- 7 files changed, 38 insertions(+), 34 deletions(-) diff --git a/python/CHANGELOG.md b/python/CHANGELOG.md index c8e3e90b2..906ce0baa 100644 --- a/python/CHANGELOG.md +++ b/python/CHANGELOG.md @@ -3,6 +3,22 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). +## [v0.10.0] - January 30, 2026 + +!!! warning + **DEPRECATION NOTICE** + + The `sift_py` module is deprecated as of **v0.10.0** and will be removed in **v1.0.0**. + Please use `sift_client` for all new development. Several minor releases will follow + before the major release to add features and give users time to migrate. + + +- Stabilizes the [sift_client](https://sift-stack.github.io/sift/python/latest/#sift-client-api-new) module. +- [Add FileAttachmentsMixin to TestStep](https://github.com/sift-stack/sift/pull/466) +- [Add support for live rule field in sift-client](https://github.com/sift-stack/sift/pull/463) +- [Adds batch rule update/create support to sift_client](https://github.com/sift-stack/sift/pull/456) +- [Sift client jobs resource](https://github.com/sift-stack/sift/pull/458) + ## [v0.9.6] - December 22, 2025 - [Add support for tags in RuleConfigs](https://github.com/sift-stack/sift/pull/438) diff --git a/python/lib/sift_client/__init__.py b/python/lib/sift_client/__init__.py index ede3d847b..d40ca2317 100644 --- a/python/lib/sift_client/__init__.py +++ b/python/lib/sift_client/__init__.py @@ -1,11 +1,5 @@ """Sift Client Library - Python client for interacting with Sift APIs. -!!! warning - The Sift Client is experimental and is subject to change. - - To avoid unexpected breaking changes, pin the exact version of the `sift-stack-py` library in your dependencies (for example, in `requirements.txt` or `pyproject.toml`). - - ## Overview This library provides a high-level Python client for interacting with Sift APIs. It offers: diff --git a/python/lib/sift_client/client.py b/python/lib/sift_client/client.py index 1642df1a9..5c57d5eb1 100644 --- a/python/lib/sift_client/client.py +++ b/python/lib/sift_client/client.py @@ -1,6 +1,5 @@ from __future__ import annotations -from sift_client.errors import _sift_client_experimental_warning from sift_client.resources import ( AssetsAPI, AssetsAPIAsync, @@ -37,8 +36,6 @@ ) from sift_client.util.util import AsyncAPIs -_sift_client_experimental_warning() - class SiftClient( WithGrpcClient, diff --git a/python/lib/sift_client/errors.py b/python/lib/sift_client/errors.py index 4a4176f48..34ffb6677 100644 --- a/python/lib/sift_client/errors.py +++ b/python/lib/sift_client/errors.py @@ -1,6 +1,5 @@ from __future__ import annotations -import warnings from typing import NoReturn @@ -12,21 +11,6 @@ class SiftExperimentalWarning(SiftWarning): """Warning for experimental features.""" -_sift_client_experimental_warned = False - - -def _sift_client_experimental_warning(): - # Ensure this warning has only been emitted once, even if used in different places. - global _sift_client_experimental_warned - if not _sift_client_experimental_warned: - warnings.warn( - "`sift_client` is experimental and is subject to change. Use with caution.", - SiftExperimentalWarning, - stacklevel=2, - ) - _sift_client_experimental_warned = True - - def _sift_stream_bindings_import_error(original_error: ImportError) -> NoReturn: # Returns NoReturn to satisfy pyright raise ImportError( diff --git a/python/lib/sift_client/resources/_base.py b/python/lib/sift_client/resources/_base.py index 217e57a72..73993e5a6 100644 --- a/python/lib/sift_client/resources/_base.py +++ b/python/lib/sift_client/resources/_base.py @@ -3,11 +3,9 @@ from abc import ABC from typing import TYPE_CHECKING, Any, TypeVar -from sift_client.errors import _sift_client_experimental_warning from sift_client.sift_types.tag import Tag from sift_client.util import cel_utils as cel -_sift_client_experimental_warning() if TYPE_CHECKING: import re diff --git a/python/lib/sift_py/__init__.py b/python/lib/sift_py/__init__.py index 1bb51c8b2..3f063ac83 100644 --- a/python/lib/sift_py/__init__.py +++ b/python/lib/sift_py/__init__.py @@ -1,4 +1,10 @@ """ +!!! warning + **DEPRECATION** + + This module is deprecated as of **v0.10.0**. Please use `sift_client` instead. + The `sift_py` module will be removed entirely in **v1.0.0**. + `sift_py` is a Python module built on top of Sift's protocol buffers to ergonomically interface with Sift's gRPC API, especially with regard to data ingestion and and rule evaluation. If there are any words or concepts that you find yourself needing to familiarize yourself with, be sure to visit the @@ -918,3 +924,12 @@ async def channel_demo(): For more comphrensive examples demonstrating a little bit of everything, you may visit the [examples directory](https://github.com/sift-stack/sift/tree/main/python/examples) in the project repo. """ + +import warnings + +warnings.warn( + "The `sift_py` module is deprecated as of v0.10.0 and will be removed entirely in v1.0.0. " + "Please prefer to use `sift_client` instead.", + DeprecationWarning, + stacklevel=2, +) diff --git a/python/pyproject.toml b/python/pyproject.toml index ae04a5f0b..7b59df938 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "sift_stack_py" -version = "0.9.6" +version = "0.10.0" description = "Python client library for the Sift API" requires-python = ">=3.8" readme = { file = "README.md", content-type = "text/markdown" } @@ -59,7 +59,7 @@ all = [ 'pyOpenSSL<24.0.0', 'pyarrow>=17.0.0', 'rosbags~=0.0', - 'sift-stream-bindings>=0.2.0-rc4', + 'sift-stream-bindings>=0.2.0-rc8', 'types-pyOpenSSL<24.0.0', ] build = [ @@ -100,7 +100,7 @@ dev-all = [ 'pytest==8.2.2', 'rosbags~=0.0', 'ruff~=0.12.10', - 'sift-stream-bindings>=0.2.0-rc4', + 'sift-stream-bindings>=0.2.0-rc8', 'tomlkit~=0.13.3', 'types-pyOpenSSL<24.0.0', ] @@ -153,7 +153,7 @@ docs-build = [ 'pytest==8.2.2', 'rosbags~=0.0', 'ruff~=0.12.10', - 'sift-stream-bindings>=0.2.0-rc4', + 'sift-stream-bindings>=0.2.0-rc8', 'tomlkit~=0.13.3', 'types-pyOpenSSL<24.0.0', ] @@ -176,10 +176,10 @@ rosbags = [ 'rosbags~=0.0', ] sift-stream = [ - 'sift-stream-bindings>=0.2.0-rc4', + 'sift-stream-bindings>=0.2.0-rc8', ] sift-stream-bindings = [ - 'sift-stream-bindings>=0.2.0-rc4', + 'sift-stream-bindings>=0.2.0-rc8', ] tdms = [ 'npTDMS~=1.9', @@ -215,7 +215,7 @@ docs = ["mkdocs", openssl = ["pyOpenSSL<24.0.0", "types-pyOpenSSL<24.0.0", "cffi~=1.14"] tdms = ["npTDMS~=1.9"] rosbags = ["rosbags~=0.0"] -sift-stream = ["sift-stream-bindings>=0.2.0-rc4"] +sift-stream = ["sift-stream-bindings>=0.2.0-rc8"] hdf5 = ["h5py~=3.11", "polars~=1.8"] data-review = ["pyarrow>=17.0.0"] From 74400d74a5861a05df4375cf7989fbef4470b17a Mon Sep 17 00:00:00 2001 From: solidiquis Date: Fri, 30 Jan 2026 13:13:02 -0800 Subject: [PATCH 2/7] changelog fix + fmt --- python/CHANGELOG.md | 10 +++++----- python/lib/sift_client/resources/_base.py | 1 - 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/python/CHANGELOG.md b/python/CHANGELOG.md index 906ce0baa..c9ade4afd 100644 --- a/python/CHANGELOG.md +++ b/python/CHANGELOG.md @@ -5,13 +5,13 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## [v0.10.0] - January 30, 2026 -!!! warning - **DEPRECATION NOTICE** +### DEPRECATION NOTICE - The `sift_py` module is deprecated as of **v0.10.0** and will be removed in **v1.0.0**. - Please use `sift_client` for all new development. Several minor releases will follow - before the major release to add features and give users time to migrate. +The `sift_py` module is deprecated as of **v0.10.0** and will be removed in **v1.0.0**. +Please use `sift_client` for all new development. Several minor releases will follow +before the major release to add features and give users time to migrate. +### What's New - Stabilizes the [sift_client](https://sift-stack.github.io/sift/python/latest/#sift-client-api-new) module. - [Add FileAttachmentsMixin to TestStep](https://github.com/sift-stack/sift/pull/466) diff --git a/python/lib/sift_client/resources/_base.py b/python/lib/sift_client/resources/_base.py index 73993e5a6..890cf2f44 100644 --- a/python/lib/sift_client/resources/_base.py +++ b/python/lib/sift_client/resources/_base.py @@ -6,7 +6,6 @@ from sift_client.sift_types.tag import Tag from sift_client.util import cel_utils as cel - if TYPE_CHECKING: import re from datetime import datetime From ef7b30dd8010f8c789f55828cbb399116697c59c Mon Sep 17 00:00:00 2001 From: solidiquis Date: Fri, 30 Jan 2026 13:42:26 -0800 Subject: [PATCH 3/7] future warning --- python/lib/sift_py/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/lib/sift_py/__init__.py b/python/lib/sift_py/__init__.py index 3f063ac83..b951b31d1 100644 --- a/python/lib/sift_py/__init__.py +++ b/python/lib/sift_py/__init__.py @@ -930,6 +930,6 @@ async def channel_demo(): warnings.warn( "The `sift_py` module is deprecated as of v0.10.0 and will be removed entirely in v1.0.0. " "Please prefer to use `sift_client` instead.", - DeprecationWarning, + category=FutureWarning, stacklevel=2, ) From e240753771c865f5b966bd9096c109d246a00abb Mon Sep 17 00:00:00 2001 From: solidiquis Date: Fri, 30 Jan 2026 13:54:53 -0800 Subject: [PATCH 4/7] py.typed + deprecation warning reword --- python/lib/sift_client/py.typed | 0 python/lib/sift_py/__init__.py | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 python/lib/sift_client/py.typed diff --git a/python/lib/sift_client/py.typed b/python/lib/sift_client/py.typed new file mode 100644 index 000000000..e69de29bb diff --git a/python/lib/sift_py/__init__.py b/python/lib/sift_py/__init__.py index b951b31d1..87de91e36 100644 --- a/python/lib/sift_py/__init__.py +++ b/python/lib/sift_py/__init__.py @@ -2,7 +2,7 @@ !!! warning **DEPRECATION** - This module is deprecated as of **v0.10.0**. Please use `sift_client` instead. + The `sift_py` module is deprecated as of **v0.10.0**. Please use `sift_client` if you aren't already. The `sift_py` module will be removed entirely in **v1.0.0**. `sift_py` is a Python module built on top of Sift's protocol buffers to ergonomically interface with @@ -928,8 +928,8 @@ async def channel_demo(): import warnings warnings.warn( - "The `sift_py` module is deprecated as of v0.10.0 and will be removed entirely in v1.0.0. " - "Please prefer to use `sift_client` instead.", + "The `sift_py` module is deprecated as of **v0.10.0**. Please use `sift_client` if you aren't already. " + "The `sift_py` module will be removed entirely in **v1.0.0**.", category=FutureWarning, stacklevel=2, ) From 9e3836d8ba26a1ae1c58aa0cb433923864d68afc Mon Sep 17 00:00:00 2001 From: Alex Luck Date: Fri, 30 Jan 2026 14:07:04 -0800 Subject: [PATCH 5/7] update docs --- python/docs/index.md | 44 ++++++++++++++++++++++---------------------- python/mkdocs.yml | 2 +- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/python/docs/index.md b/python/docs/index.md index aad8b09b7..c9f6b6476 100644 --- a/python/docs/index.md +++ b/python/docs/index.md @@ -13,33 +13,15 @@ To install the Sift Python library: pip install sift-stack-py ``` -## API Documentation +This library follows [semantic versioning](https://semver.org/) and is under active development. -This documentation covers two Python APIs for interacting with Sift: - -### Sift Py API - -The original low-level Python API that provides direct access to Sift's protocol buffer interfaces. - -Browse the [**Sift Py API**][sift_py] section for complete reference documentation. - -**Use this API if you need:** - -- Direct protocol buffer access -- Fine-grained control over gRPC connections -- Legacy compatibility with existing code - -### Sift Client API (New) - -!!! warning - The Sift Client is experimental and is subject to change. - - To avoid unexpected breaking changes, pin the exact version of the `sift-stack-py` library in your dependencies (for example, in `requirements.txt` or `pyproject.toml`). +**Pin to a major version** (e.g., `sift-stack-py~=1.0`) to avoid breaking changes between major releases. +## Sift Client API The modern, high-level client library that provides all the ergonomic features missing from the original API. This new client offers intuitive Python interfaces, strong type safety, automatic connection management, and both synchronous and asynchronous support. -Explore the [**Sift Client API (New)**][sift_client] section for the complete API reference. +Explore the [**Sift Client API**][sift_client] section for the complete API reference. **Key improvements over Sift Py:** @@ -50,6 +32,24 @@ Explore the [**Sift Client API (New)**][sift_client] section for the complete AP - **Rich Object Models** - Immutable types with convenient methods - **Modern Patterns** - Context managers, iterators, and Python best practices +### Sift Py API + +!!! warning +**DEPRECATION** + + The `sift_py` module is deprecated as of **v0.10.0**. Please use `sift_client` if you aren't already. + The `sift_py` module will be removed entirely in **v1.0.0**. + +The original low-level Python API that provides direct access to Sift's protocol buffer interfaces. + +Browse the [**Sift Py API**][sift_py] section for complete reference documentation. + +**Use this API if you need:** + +- Direct protocol buffer access +- Fine-grained control over gRPC connections +- Legacy compatibility with existing code + ## Getting help diff --git a/python/mkdocs.yml b/python/mkdocs.yml index 3129fcad3..be6281445 100644 --- a/python/mkdocs.yml +++ b/python/mkdocs.yml @@ -53,8 +53,8 @@ extra: nav: - Home: index.md + - Sift Client API - Sift Py API - - Sift Client API (New) - Examples: - examples/basic.ipynb - examples/ingestion.ipynb From 8a2f5f5d5a7b94dc3de5f10ad04735aba91f42a7 Mon Sep 17 00:00:00 2001 From: Alex Luck Date: Fri, 30 Jan 2026 14:12:48 -0800 Subject: [PATCH 6/7] fix pyright in CI --- python/pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/python/pyproject.toml b/python/pyproject.toml index 7b59df938..30419ffa8 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -241,6 +241,7 @@ python_version = "3.8" reportOptionalMemberAccess = "none" reportArgumentType = "none" reportAttributeAccessIssue = "none" +reportPrivateImportUsage = "none" stubPath = "lib/sift_client/resources/sync_stubs" useLibraryCodeForTypes = true exclude = [ From f761444c94ad161dcf7de7e87bcb447a537221b7 Mon Sep 17 00:00:00 2001 From: Alex Luck Date: Fri, 30 Jan 2026 14:19:34 -0800 Subject: [PATCH 7/7] fix docs --- python/docs/index.md | 3 +-- python/lib/sift_client/client.py | 5 ----- python/lib/sift_py/__init__.py | 4 +--- python/mkdocs.yml | 2 +- 4 files changed, 3 insertions(+), 11 deletions(-) diff --git a/python/docs/index.md b/python/docs/index.md index c9f6b6476..c270963b9 100644 --- a/python/docs/index.md +++ b/python/docs/index.md @@ -34,8 +34,7 @@ Explore the [**Sift Client API**][sift_client] section for the complete API refe ### Sift Py API -!!! warning -**DEPRECATION** +!!! warning "Deprecation Warning" The `sift_py` module is deprecated as of **v0.10.0**. Please use `sift_client` if you aren't already. The `sift_py` module will be removed entirely in **v1.0.0**. diff --git a/python/lib/sift_client/client.py b/python/lib/sift_client/client.py index 5c57d5eb1..ae3302673 100644 --- a/python/lib/sift_client/client.py +++ b/python/lib/sift_client/client.py @@ -45,11 +45,6 @@ class SiftClient( It provides both synchronous and asynchronous interfaces, strong type checking, and a Pythonic API design. - !!! warning - The Sift Client is experimental and is subject to change. - - To avoid unexpected breaking changes, pin the exact version of the `sift-stack-py` library in your dependencies (for example, in `requirements.txt` or `pyproject.toml`). - Examples: from sift_client import SiftClient from datetime import datetime diff --git a/python/lib/sift_py/__init__.py b/python/lib/sift_py/__init__.py index 87de91e36..81e06fa13 100644 --- a/python/lib/sift_py/__init__.py +++ b/python/lib/sift_py/__init__.py @@ -1,7 +1,5 @@ """ -!!! warning - **DEPRECATION** - +!!! warning "Deprecation Warning" The `sift_py` module is deprecated as of **v0.10.0**. Please use `sift_client` if you aren't already. The `sift_py` module will be removed entirely in **v1.0.0**. diff --git a/python/mkdocs.yml b/python/mkdocs.yml index be6281445..9fff2336a 100644 --- a/python/mkdocs.yml +++ b/python/mkdocs.yml @@ -114,7 +114,7 @@ plugins: nav_item_prefix: "" - api-autonav: - nav_section_title: Sift Client API (New) + nav_section_title: Sift Client API modules: [ lib/sift_client ] exclude_private: true nav_item_prefix: ""