Restate is a system for easily building resilient applications using distributed durable async/await. This repository contains the Restate SDK for writing services in Python.
- 🤗️ Join our online community for help, sharing feedback and talking to the community.
- 📖 Check out our documentation to get quickly started!
- 📣 Follow us on Twitter for staying up to date.
- 🙋 Create a GitHub issue for requesting a new feature or reporting a problem.
- 🏠 Visit our GitHub org for exploring other repositories.
Prerequisites:
- Python >= v3.10
To use this SDK, add the dependency to your project:
pip install restate_sdkThe compatibility with Restate is described in the following table. sdk-python versions < 0.10 are deprecated and no longer supported.
| Restate Server\sdk-python | 0.10 - 0.18 | 1.0 |
|---|---|---|
| < 1.3 | ❌ | ❌ |
| 1.3 - 1.4 | ✅ (1) | ✅ (1)(2) |
| 1.5 - 1.6 | ✅ | ✅ (2) |
| 1.7 | ✅ | ✅ |
(1) Note The new Service/Object/Workflow constructor field and the decorator field invocation_retry_policy works only from Restate 1.4 onward. Check the in-code documentation for more details.
(2) Note Scopes and limit keys work only from Restate 1.7 onward. Check the in-code documentation for more details.
We’re excited if you join the Restate community and start contributing! Whether it is feature requests, bug reports, ideas & feedback or PRs, we appreciate any and all contributions. We know that your time is precious and, therefore, deeply value any effort to contribute!
- Python 3
- PyEnv or VirtualEnv
- just
- Rust toolchain
Set up your virtual environment using the tool of your choice, e.g. VirtualEnv:
python3 -m venv .venv
source .venv/bin/activateInstall the build tools:
pip install -r requirements.txtNow build the Rust module and include opt-in additional dev dependencies:
maturin dev -E test,lintYou usually need to build the Rust module only once, but you might need to rebuild it on pulls.
For linting and testing:
just verifyPull latest main:
git checkout main && git pullUpdate module version in Cargo.toml and run a local build to update the Cargo.lock too, commit it. Then push tag, e.g.:
git tag -m "Release v0.1.0" v0.1.0
git push origin v0.1.0