22
33## Project Overview
44
5- This is the Durable Task Python SDK, providing a client and worker for
6- building durable orchestrations. The repo contains two packages:
5+ This repository provides the Durable Task Python SDK and Azure Functions
6+ provider implementations for building durable orchestrations. It contains
7+ three packages:
78
89- ` durabletask ` — core SDK (in ` durabletask/ ` )
910- ` durabletask.azuremanaged ` — Azure Durable Task Scheduler provider (in ` durabletask-azuremanaged/ ` )
11+ - ` azure-functions-durable ` — Azure Durable Functions provider (in
12+ ` azure-functions-durable/ ` )
1013
1114## Changelog Requirements
1215
13- - ALWAYS document user-facing changes in the appropriate changelog under
14- ` ## Unreleased ` .
15- - Update ` CHANGELOG.md ` for core SDK changes and
16- ` durabletask-azuremanaged/CHANGELOG.md ` for provider changes.
17- - If a change affects both packages, update both changelogs.
16+ - ALWAYS document user-facing changes in the applicable changelog under
17+ ` ## Unreleased ` . Create that section if the changelog does not yet have one.
18+ - Update ` CHANGELOG.md ` for core SDK changes,
19+ ` durabletask-azuremanaged/CHANGELOG.md ` for Durable Task Scheduler provider
20+ changes, and ` azure-functions-durable/CHANGELOG.md ` for Azure Functions
21+ provider changes.
22+ - If a change affects multiple packages, update each affected package's
23+ changelog.
1824- Include changelog entries for externally observable outcomes only, such as
1925 new public APIs, behavior changes, bug fixes users can notice, breaking
2026 changes, and new configuration capabilities.
@@ -24,8 +30,14 @@ building durable orchestrations. The repo contains two packages:
2430- When in doubt, write the changelog entry in terms of user impact (what users
2531 can now do or what behavior changed), not implementation mechanism (how it
2632 was implemented internally).
33+ - Changelogs are not covered by the CI Markdown lint step. Review changes to
34+ them manually.
35+ - Use the current unindented changelog style: category labels such as ` ADDED ` ,
36+ ` CHANGED ` , and ` FIXED ` are plain, unindented lines, and wrapped entry text
37+ remains unindented rather than being aligned beneath the bullet.
2738
2839Examples:
40+
2941- Include: "Added ` get_orchestration_history() ` to retrieve orchestration history from the client."
3042- Exclude: "Added internal helper functions to aggregate streamed history chunks."
3143
@@ -61,10 +73,16 @@ priority over style.
6173## Python Linting
6274
6375This repository uses [ flake8] ( https://flake8.pycqa.org/ ) for Python
64- linting. Run it after making changes to verify there are no issues:
76+ linting. Run it after making changes to verify there are no issues. Lint
77+ package source and its tests separately, matching CI:
6578
6679``` bash
67- python -m flake8 path/to/changed/file.py
80+ python -m flake8 durabletask
81+ python -m flake8 tests/durabletask
82+ python -m flake8 durabletask-azuremanaged
83+ python -m flake8 tests/durabletask-azuremanaged
84+ python -m flake8 azure-functions-durable
85+ python -m flake8 tests/azure-functions-durable
6886```
6987
7088## Markdown Style
@@ -117,18 +135,42 @@ python -m pip install -r dev-requirements.txt
117135
118136## Building and Testing
119137
120- Install the packages locally in editable mode:
138+ Use the repository-root ` .venv ` for core and Azure Managed development, and
139+ for Azure Functions Durable linting, type checking, and unit tests. The Azure
140+ Functions Durable package requires Python 3.13+, so use a 3.13+ root virtual
141+ environment for that work. Install packages locally in editable mode:
121142
122143``` bash
123- python -m pip install -e . -e ./durabletask-azuremanaged
144+ python -m pip install -e . -e ./durabletask-azuremanaged \
145+ -e ./azure-functions-durable
124146```
125147
126- Run tests with pytest:
148+ Run the applicable unit tests with pytest. Azure Functions Durable unit tests
149+ exclude tests that require an Azure Functions host or external services:
127150
128151``` bash
129152python -m pytest
153+ python -m pytest tests/azure-functions-durable \
154+ -m " not dts and not azurite and not functions_e2e"
155+ ```
156+
157+ Run Azure Functions Durable E2E tests through Nox, not directly from the root
158+ virtual environment. Nox creates an isolated Python 3.13 session environment,
159+ installs the local packages editable, and links it into each sample Function
160+ app so the Functions worker loads the app's grpc/protobuf dependencies. The
161+ suite requires Azure Functions Core Tools (` func ` ) on ` PATH ` and a running
162+ Azurite instance with blob storage on port 10000:
163+
164+ ``` bash
165+ nox -s functions_e2e
130166```
131167
168+ After the first successful run, use ` nox -R -s functions_e2e ` for E2E reruns.
169+ ` -R ` reuses the Nox environment and skips reinstalls; because the packages are
170+ editable, source changes are still picked up. Pass pytest selectors after ` -- ` ,
171+ for example ` nox -R -s functions_e2e -- -k "dtask_client" ` . Do not manually
172+ activate or modify the per-app ` .venv ` directories created by Nox.
173+
132174## Project Structure
133175
134176- ` durabletask/ ` — core SDK source
@@ -140,10 +182,23 @@ python -m pytest
140182 - ` testing/ ` — in-memory backend for testing without a sidecar
141183 - ` internal/ ` — protobuf definitions, gRPC helpers, tracing (not public API)
142184- ` durabletask-azuremanaged/ ` — Azure managed provider source
185+ - ` azure-functions-durable/ ` — Azure Durable Functions provider source
143186- ` examples/ ` — example orchestrations (see ` examples/README.md ` )
144187- ` tests/ ` — test suite
145188- ` dev-requirements.txt ` — development dependencies
146189
190+ ## External Dependencies
191+
192+ The Azure Functions Durable provider integrates with APIs and runtime behavior
193+ owned by these repositories. Consult their current source when changing
194+ decorators, bindings, converters, or worker integration behavior:
195+
196+ - [ Azure Functions Python library] ( https://github.com/Azure/azure-functions-python-library )
197+ — application, decorator, and binding APIs.
198+ - [ Azure Functions Python worker] ( https://github.com/Azure/azure-functions-python-worker )
199+ — function loading, binding conversion, dependency isolation, and invocation
200+ behavior.
201+
147202## Cross-Package Compatibility
148203
149204The ` durabletask-azuremanaged ` package extends the core ` durabletask `
0 commit comments