Skip to content

Commit d5ffdba

Browse files
python(chore): v0.10.0 prep (#467)
Co-authored-by: Alex Luck <luck@siftstack.com>
1 parent 68015de commit d5ffdba

10 files changed

Lines changed: 60 additions & 64 deletions

File tree

python/CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,22 @@ All notable changes to this project will be documented in this file.
33

44
This project adheres to [Semantic Versioning](http://semver.org/).
55

6+
## [v0.10.0] - January 30, 2026
7+
8+
### DEPRECATION NOTICE
9+
10+
The `sift_py` module is deprecated as of **v0.10.0** and will be removed in **v1.0.0**.
11+
Please use `sift_client` for all new development. Several minor releases will follow
12+
before the major release to add features and give users time to migrate.
13+
14+
### What's New
15+
16+
- Stabilizes the [sift_client](https://sift-stack.github.io/sift/python/latest/#sift-client-api-new) module.
17+
- [Add FileAttachmentsMixin to TestStep](https://github.com/sift-stack/sift/pull/466)
18+
- [Add support for live rule field in sift-client](https://github.com/sift-stack/sift/pull/463)
19+
- [Adds batch rule update/create support to sift_client](https://github.com/sift-stack/sift/pull/456)
20+
- [Sift client jobs resource](https://github.com/sift-stack/sift/pull/458)
21+
622
## [v0.9.6] - December 22, 2025
723
- [Add support for tags in RuleConfigs](https://github.com/sift-stack/sift/pull/438)
824

python/docs/index.md

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,33 +13,15 @@ To install the Sift Python library:
1313
pip install sift-stack-py
1414
```
1515

16-
## API Documentation
16+
This library follows [semantic versioning](https://semver.org/) and is under active development.
1717

18-
This documentation covers two Python APIs for interacting with Sift:
19-
20-
### Sift Py API
21-
22-
The original low-level Python API that provides direct access to Sift's protocol buffer interfaces.
23-
24-
Browse the [**Sift Py API**][sift_py] section for complete reference documentation.
25-
26-
**Use this API if you need:**
27-
28-
- Direct protocol buffer access
29-
- Fine-grained control over gRPC connections
30-
- Legacy compatibility with existing code
31-
32-
### Sift Client API (New)
33-
34-
!!! warning
35-
The Sift Client is experimental and is subject to change.
36-
37-
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`).
18+
**Pin to a major version** (e.g., `sift-stack-py~=1.0`) to avoid breaking changes between major releases.
3819

20+
## Sift Client API
3921

4022
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.
4123

42-
Explore the [**Sift Client API (New)**][sift_client] section for the complete API reference.
24+
Explore the [**Sift Client API**][sift_client] section for the complete API reference.
4325

4426
**Key improvements over Sift Py:**
4527

@@ -50,6 +32,23 @@ Explore the [**Sift Client API (New)**][sift_client] section for the complete AP
5032
- **Rich Object Models** - Immutable types with convenient methods
5133
- **Modern Patterns** - Context managers, iterators, and Python best practices
5234

35+
### Sift Py API
36+
37+
!!! warning "Deprecation Warning"
38+
39+
The `sift_py` module is deprecated as of **v0.10.0**. Please use `sift_client` if you aren't already.
40+
The `sift_py` module will be removed entirely in **v1.0.0**.
41+
42+
The original low-level Python API that provides direct access to Sift's protocol buffer interfaces.
43+
44+
Browse the [**Sift Py API**][sift_py] section for complete reference documentation.
45+
46+
**Use this API if you need:**
47+
48+
- Direct protocol buffer access
49+
- Fine-grained control over gRPC connections
50+
- Legacy compatibility with existing code
51+
5352

5453
## Getting help
5554

python/lib/sift_client/__init__.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
"""Sift Client Library - Python client for interacting with Sift APIs.
22
3-
!!! warning
4-
The Sift Client is experimental and is subject to change.
5-
6-
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`).
7-
8-
93
## Overview
104
115
This library provides a high-level Python client for interacting with Sift APIs. It offers:

python/lib/sift_client/client.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from __future__ import annotations
22

3-
from sift_client.errors import _sift_client_experimental_warning
43
from sift_client.resources import (
54
AssetsAPI,
65
AssetsAPIAsync,
@@ -37,8 +36,6 @@
3736
)
3837
from sift_client.util.util import AsyncAPIs
3938

40-
_sift_client_experimental_warning()
41-
4239

4340
class SiftClient(
4441
WithGrpcClient,
@@ -48,11 +45,6 @@ class SiftClient(
4845
4946
It provides both synchronous and asynchronous interfaces, strong type checking, and a Pythonic API design.
5047
51-
!!! warning
52-
The Sift Client is experimental and is subject to change.
53-
54-
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`).
55-
5648
Examples:
5749
from sift_client import SiftClient
5850
from datetime import datetime

python/lib/sift_client/errors.py

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from __future__ import annotations
22

3-
import warnings
43
from typing import NoReturn
54

65

@@ -12,21 +11,6 @@ class SiftExperimentalWarning(SiftWarning):
1211
"""Warning for experimental features."""
1312

1413

15-
_sift_client_experimental_warned = False
16-
17-
18-
def _sift_client_experimental_warning():
19-
# Ensure this warning has only been emitted once, even if used in different places.
20-
global _sift_client_experimental_warned
21-
if not _sift_client_experimental_warned:
22-
warnings.warn(
23-
"`sift_client` is experimental and is subject to change. Use with caution.",
24-
SiftExperimentalWarning,
25-
stacklevel=2,
26-
)
27-
_sift_client_experimental_warned = True
28-
29-
3014
def _sift_stream_bindings_import_error(original_error: ImportError) -> NoReturn:
3115
# Returns NoReturn to satisfy pyright
3216
raise ImportError(

python/lib/sift_client/py.typed

Whitespace-only changes.

python/lib/sift_client/resources/_base.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,9 @@
33
from abc import ABC
44
from typing import TYPE_CHECKING, Any, TypeVar
55

6-
from sift_client.errors import _sift_client_experimental_warning
76
from sift_client.sift_types.tag import Tag
87
from sift_client.util import cel_utils as cel
98

10-
_sift_client_experimental_warning()
11-
129
if TYPE_CHECKING:
1310
import re
1411
from datetime import datetime

python/lib/sift_py/__init__.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
"""
2+
!!! warning "Deprecation Warning"
3+
The `sift_py` module is deprecated as of **v0.10.0**. Please use `sift_client` if you aren't already.
4+
The `sift_py` module will be removed entirely in **v1.0.0**.
5+
26
`sift_py` is a Python module built on top of Sift's protocol buffers to ergonomically interface with
37
Sift's gRPC API, especially with regard to data ingestion and and rule evaluation. If there are any
48
words or concepts that you find yourself needing to familiarize yourself with, be sure to visit the
@@ -918,3 +922,12 @@ async def channel_demo():
918922
For more comphrensive examples demonstrating a little bit of everything, you may
919923
visit the [examples directory](https://github.com/sift-stack/sift/tree/main/python/examples) in the project repo.
920924
"""
925+
926+
import warnings
927+
928+
warnings.warn(
929+
"The `sift_py` module is deprecated as of **v0.10.0**. Please use `sift_client` if you aren't already. "
930+
"The `sift_py` module will be removed entirely in **v1.0.0**.",
931+
category=FutureWarning,
932+
stacklevel=2,
933+
)

python/mkdocs.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ extra:
5353

5454
nav:
5555
- Home: index.md
56+
- Sift Client API
5657
- Sift Py API
57-
- Sift Client API (New)
5858
- Examples:
5959
- examples/index.md
6060
- Basic Usage: examples/basic.ipynb
@@ -115,7 +115,7 @@ plugins:
115115
nav_item_prefix: ""
116116

117117
- api-autonav:
118-
nav_section_title: Sift Client API (New)
118+
nav_section_title: Sift Client API
119119
modules: [ lib/sift_client ]
120120
exclude_private: true
121121
nav_item_prefix: ""

python/pyproject.toml

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "sift_stack_py"
7-
version = "0.9.6"
7+
version = "0.10.0"
88
description = "Python client library for the Sift API"
99
requires-python = ">=3.8"
1010
readme = { file = "README.md", content-type = "text/markdown" }
@@ -59,7 +59,7 @@ all = [
5959
'pyOpenSSL<24.0.0',
6060
'pyarrow>=17.0.0',
6161
'rosbags~=0.0',
62-
'sift-stream-bindings>=0.2.0-rc4',
62+
'sift-stream-bindings>=0.2.0-rc8',
6363
'types-pyOpenSSL<24.0.0',
6464
]
6565
build = [
@@ -100,7 +100,7 @@ dev-all = [
100100
'pytest==8.2.2',
101101
'rosbags~=0.0',
102102
'ruff~=0.12.10',
103-
'sift-stream-bindings>=0.2.0-rc4',
103+
'sift-stream-bindings>=0.2.0-rc8',
104104
'tomlkit~=0.13.3',
105105
'types-pyOpenSSL<24.0.0',
106106
]
@@ -153,7 +153,7 @@ docs-build = [
153153
'pytest==8.2.2',
154154
'rosbags~=0.0',
155155
'ruff~=0.12.10',
156-
'sift-stream-bindings>=0.2.0-rc4',
156+
'sift-stream-bindings>=0.2.0-rc8',
157157
'tomlkit~=0.13.3',
158158
'types-pyOpenSSL<24.0.0',
159159
]
@@ -176,10 +176,10 @@ rosbags = [
176176
'rosbags~=0.0',
177177
]
178178
sift-stream = [
179-
'sift-stream-bindings>=0.2.0-rc4',
179+
'sift-stream-bindings>=0.2.0-rc8',
180180
]
181181
sift-stream-bindings = [
182-
'sift-stream-bindings>=0.2.0-rc4',
182+
'sift-stream-bindings>=0.2.0-rc8',
183183
]
184184
tdms = [
185185
'npTDMS~=1.9',
@@ -215,7 +215,7 @@ docs = ["mkdocs",
215215
openssl = ["pyOpenSSL<24.0.0", "types-pyOpenSSL<24.0.0", "cffi~=1.14"]
216216
tdms = ["npTDMS~=1.9"]
217217
rosbags = ["rosbags~=0.0"]
218-
sift-stream = ["sift-stream-bindings>=0.2.0-rc4"]
218+
sift-stream = ["sift-stream-bindings>=0.2.0-rc8"]
219219
hdf5 = ["h5py~=3.11", "polars~=1.8"]
220220
data-review = ["pyarrow>=17.0.0"]
221221

@@ -241,6 +241,7 @@ python_version = "3.8"
241241
reportOptionalMemberAccess = "none"
242242
reportArgumentType = "none"
243243
reportAttributeAccessIssue = "none"
244+
reportPrivateImportUsage = "none"
244245
stubPath = "lib/sift_client/resources/sync_stubs"
245246
useLibraryCodeForTypes = true
246247
exclude = [

0 commit comments

Comments
 (0)