Skip to content

Commit ca3ce68

Browse files
committed
merge main
2 parents 046ab9c + 85dde16 commit ca3ce68

17 files changed

Lines changed: 4843 additions & 596 deletions

File tree

pyproject.toml

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "temporalio"
3-
version = "1.26.0"
3+
version = "1.27.0"
44
description = "Temporal.io Python SDK"
55
authors = [{ name = "Temporal Technologies Inc", email = "sdk@temporal.io" }]
66
requires-python = ">=3.10"
@@ -39,10 +39,7 @@ lambda-worker-otel = [
3939
"opentelemetry-semantic-conventions>=0.40b0,<1",
4040
"opentelemetry-sdk-extension-aws>=2.0.0,<3",
4141
]
42-
aioboto3 = [
43-
"aioboto3>=10.4.0",
44-
"types-aioboto3[s3]>=10.4.0",
45-
]
42+
aioboto3 = ["aioboto3>=10.4.0", "types-aioboto3[s3]>=10.4.0"]
4643

4744
[project.urls]
4845
Homepage = "https://github.com/temporalio/sdk-python"
@@ -61,7 +58,7 @@ dev = [
6158
"pydocstyle>=6.3.0,<7",
6259
"pydoctor>=25.10.1,<26",
6360
"pyright==1.1.403",
64-
"pytest~=7.4",
61+
"pytest~=9.0",
6562
"pytest-asyncio>=0.21,<0.22",
6663
"pytest-timeout~=2.2",
6764
"ruff>=0.5.0,<0.6",
@@ -81,12 +78,13 @@ dev = [
8178
"pytest-xdist>=3.6,<4",
8279
"moto[s3,server]>=5",
8380
"langgraph>=1.1.0",
84-
"langsmith>=0.7.0,<0.8",
81+
"langsmith>=0.7.0,<0.7.34",
8582
"setuptools<82",
8683
"opentelemetry-exporter-otlp-proto-grpc>=1.11.1,<2",
8784
"opentelemetry-semantic-conventions>=0.40b0,<1",
8885
"opentelemetry-sdk-extension-aws>=2.0.0,<3",
8986
"pytest-flakefinder>=1.1.0",
87+
"async-timeout>=4.0,<6; python_version < '3.11'",
9088
]
9189

9290
[tool.poe.tasks]

temporalio/bridge/Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Temporal Workflow Streams
2+
3+
> ⚠️ **This package is currently at an experimental release stage.** ⚠️
4+
5+
**Workflow Streams** is a Temporal Python SDK contrib library that gives a
6+
Workflow a durable, offset-addressed event channel for keeping outside
7+
observers updated on the progress of the Workflow and its Activities.
8+
Typical uses include driving a UI for a long-running AI agent, surfacing
9+
status during in-flight payment or order processing, and reporting progress
10+
from data pipelines. It is not designed for ultra-low-latency applications
11+
such as real-time voice; per-roundtrip latency is around 100ms, and cost
12+
scales with durable batches rather than tokens.
13+
14+
Under the hood the stream is built directly on Temporal's existing
15+
message-passing primitives: Signals carry publishes, Updates serve
16+
long-poll subscriptions, and a Query exposes the current global offset.
17+
The library packages the boilerplate that turns those primitives into
18+
a usable stream: batching to amortize per-event overhead, deduplication
19+
for exactly-once delivery, topic filtering, and continue-as-new helpers
20+
that hand stream state across Workflow runs.
21+
22+
## Documentation
23+
24+
📖 **The full guide lives in the Temporal documentation site:**
25+
**[Workflow Streams — Python SDK](https://docs.temporal.io/develop/python/libraries/workflow-streams)**
26+
27+
It covers installation, enabling streaming on a Workflow, publishing from
28+
Workflows and Activities, subscribing, continue-as-new, delivery semantics,
29+
codec and payload encoding, architecture, and caveats — with runnable code
30+
snippets throughout.
31+
32+
For runnable end-to-end examples, see the
33+
[Workflow Streams samples](https://github.com/temporalio/samples-python/tree/main/workflow-streams).
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
"""Workflow Streams for Temporal workflows.
2+
3+
.. warning::
4+
This package is experimental and may change in future versions.
5+
6+
The Workflow Streams contrib library gives a workflow a durable,
7+
offset-addressed event channel built from Signals and polling Updates
8+
with an SSE bridge. Cost scales with durable batches, not tokens.
9+
Latency is around 100ms per roundtrip; not for ultra-low-latency voice.
10+
11+
See :py:class:`WorkflowStream` for the workflow-side stream object and
12+
:py:class:`WorkflowStreamClient` for the external client interface.
13+
"""
14+
15+
from temporalio.contrib.workflow_streams._client import WorkflowStreamClient
16+
from temporalio.contrib.workflow_streams._stream import WorkflowStream
17+
from temporalio.contrib.workflow_streams._topic_handle import (
18+
TopicHandle,
19+
WorkflowTopicHandle,
20+
)
21+
from temporalio.contrib.workflow_streams._types import (
22+
PollInput,
23+
PollResult,
24+
PublishEntry,
25+
PublisherState,
26+
PublishInput,
27+
WorkflowStreamItem,
28+
WorkflowStreamState,
29+
)
30+
31+
__all__ = [
32+
"PollInput",
33+
"PollResult",
34+
"PublishEntry",
35+
"PublishInput",
36+
"PublisherState",
37+
"TopicHandle",
38+
"WorkflowStream",
39+
"WorkflowStreamClient",
40+
"WorkflowStreamItem",
41+
"WorkflowStreamState",
42+
"WorkflowTopicHandle",
43+
]

0 commit comments

Comments
 (0)