Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions python/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

### 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.

### 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)
- [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)

Expand Down
43 changes: 21 additions & 22 deletions python/docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:**

Expand All @@ -50,6 +32,23 @@ 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 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**.

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

Expand Down
6 changes: 0 additions & 6 deletions python/lib/sift_client/__init__.py
Original file line number Diff line number Diff line change
@@ -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:
Expand Down
8 changes: 0 additions & 8 deletions python/lib/sift_client/client.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from __future__ import annotations

from sift_client.errors import _sift_client_experimental_warning
from sift_client.resources import (
AssetsAPI,
AssetsAPIAsync,
Expand Down Expand Up @@ -37,8 +36,6 @@
)
from sift_client.util.util import AsyncAPIs

_sift_client_experimental_warning()


class SiftClient(
WithGrpcClient,
Expand All @@ -48,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
Expand Down
16 changes: 0 additions & 16 deletions python/lib/sift_client/errors.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from __future__ import annotations

import warnings
from typing import NoReturn


Expand All @@ -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(
Expand Down
Empty file added python/lib/sift_client/py.typed
Empty file.
3 changes: 0 additions & 3 deletions python/lib/sift_client/resources/_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +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
from datetime import datetime
Expand Down
13 changes: 13 additions & 0 deletions python/lib/sift_py/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
"""
!!! 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**.

`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
Expand Down Expand Up @@ -918,3 +922,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**. 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,
)
4 changes: 2 additions & 2 deletions python/mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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: ""
Expand Down
15 changes: 8 additions & 7 deletions python/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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" }
Expand Down Expand Up @@ -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 = [
Expand Down Expand Up @@ -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',
]
Expand Down Expand Up @@ -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',
]
Expand All @@ -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',
Expand Down Expand Up @@ -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"]

Expand All @@ -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 = [
Expand Down
Loading