Releases: restatedev/sdk-python
Releases · restatedev/sdk-python
v0.13.1
v0.13.0
New features 🎉
- Use context manager together with service handlers:
@contextvar
@asynccontextmanager
async def my_resource_manager():
yield "hello"
@greeter.handler(invocation_context_managers=[my_resource_manager])
async def greet_with_cm(ctx: Context, name: str) -> str:
return my_resource_manager.value- Add
msgspecsupport, works out of the box when addingrestate_sdk[serde]dependency:
# models
class GreetingRequest(msgspec.Struct):
name: str
class Greeting(msgspec.Struct):
message: str
msgspec_greeter = Service("msgspec_greeter")
@msgspec_greeter.handler()
async def greet(ctx: Context, req: GreetingRequest) -> Greeting:
return Greeting(message=f"Hello {req.name}!")- Add extension modules for Google ADK and OpenAI, more info soon!
What's Changed
- Add current_context() extension point by @igalshilman in #148
- Add context manager support by @igalshilman in #149
- Rename to invocation_context_managers by @igalshilman in #150
- Rethrow TerminalError/SdkBaseException accidentally wrapped by @igalshilman in #151
- feat: add msgspec support by @v1gnesh in #154
- Consolidate msgspec conditional imports into a single place by @igalshilman in #155
- Use DefaultSerde instead of JsonSerde for promise() default parameter by @Gustavo-Hagenbeck in #157
- Support
union | Nonereturn types by @igalshilman in #158 - Use HttpError for the typed ingress client by @igalshilman in #159
- Replace traceback.print_exc() with logger.exception() for proper logging by @Gustavo-Hagenbeck in #160
- Add an optional extension module for Google ADK integration by @igalshilman in #161
- Add an optional ext module for openai by @igalshilman in #162
New Contributors
- @v1gnesh made their first contribution in #154
- @Gustavo-Hagenbeck made their first contribution in #157
Full Changelog: v0.12.0...v0.13.0
v0.12.0
New features 🎉
- Added ingress client to send requests from your python applications to restate services:
async with restate.create_client("http://localhost:8080") as client:
await client.object_call(increment, key="a", arg=5)
await client.object_send(increment, key="a", arg=5)
current_count = await client.object_call(count, key="a", arg=None)- Added new test harness constructor to be used in combination with
@pytest.fixture:
# Your fixture
@pytest.fixture(scope="session")
async def restate_test_harness():
app = restate.app([greeter])
async with restate.create_test_harness(app) as harness:
yield harness
# A test example, using the client
async def test_greeter(restate_test_harness: HarnessEnvironment):
greeting = await restate_test_harness.client.service_call(greet, arg="Pippo")
assert greeting == "Hello Pippo!"- Various type hints improvements, such as #112
What's Changed
- Revert usage of asyncio cancellation mechanism by @slinkydeveloper in #142
- Update
crazy-max/ghaction-setup-dockerto v4 by @muhamadazmy in #144 - Use modern lints, tools and type checkers by @igalshilman in #143
- Add typed client by @igalshilman in #145
- Add test for harness and typed client. Fix name of TestHarnessEnvironment so it doesn't get mixed up in pytest. Fix imports in init by @slinkydeveloper in #147
Full Changelog: v0.11.0...v0.12.0
v0.11.0
New features
- You can configure more retry options for
ctx.run_typed:
ctx.run_typed("payment", payment, RunOptions(
# Initial retry interval
initial_retry_interval=timedelta(milliseconds=100),
# Retry policies are exponential, the retry interval will double on each attempt
retry_interval_factor=2.0,
# Maximum retry interval
max_retry_interval=timedelta(seconds=10),
# Max duration of retries before giving up
max_duration=timedelta(minutes=5),
# Max attempts (including the initial) before giving up
max_attempts=10,
))- You can now provide a name to
sleep, you'll be able to see this name in the UI.
Notable changes
- When suspending, the SDK will now throw an
asyncio.CancelledError, instead of the previously thrown custom error. Catch this exception only if you need to cleanup some external resources between execution attempts.
What's Changed
- Use task cancellation instead of custom suspension exception by @slinkydeveloper in #132
- Remove typing_extensions dependency by @slinkydeveloper in #133
- Copy RunOptions when mutating them by @slinkydeveloper in #135
- Add name parameter to sleep by @slinkydeveloper in #136
- Fix ctx.time() by @slinkydeveloper in #138
- Expose all run retry options by @slinkydeveloper in #137
- Test suite 3.2 upgrade by @slinkydeveloper in #139
- Use service image by @slinkydeveloper in #140
- Fix lint warning by @igalshilman in #141
Full Changelog: v0.10.1...v0.11.0
v0.10.2
Removed typing_extensions dependency.
Full Changelog: v0.10.1...v0.10.2
v0.10.1
What's Changed
- Add better closed error by @slinkydeveloper in #131
Full Changelog: v0.10.0...v0.10.1
v0.10.0
Invocation retry policy
When used with Restate 1.5, you can now configure the invocation retry policy from the SDK directly. See https://github.com/restatedev/restate/releases/tag/v1.5.0 for more details on the new invocation retry policy configuration.
What's Changed
- Retry Policy by @slinkydeveloper in #126
- Clarify ctx.run max attempts by @slinkydeveloper in #127
- Bring back Python 3.10 support by @slinkydeveloper in #129
Full Changelog: v0.9.1...v0.10.0
v0.9.1
What's Changed
- Add
always_replayflag to test harness by @slinkydeveloper in #124 - Add
disable_retriesflag to test harness by @slinkydeveloper in #125
Full Changelog: v0.9.0...v0.9.1
v0.9.0
New features ✨
ctx.random()andctx.uuid()for deterministic random and uuid. by @slinkydeveloper in #120- Add
ctx.time()as wrapper aroundctx.run(time.time)by @slinkydeveloper in #121 - Integration with standard library
loggingmodule: replay aware logging filterrestate.RestateLoggingFilterand log factoryrestate.getLogger()by @slinkydeveloper in #122
Full Changelog: v0.8.1...v0.9.0
v0.8.1
What's Changed
- enhancement: Add support for function args & kwargs type hints in ctx.run. by @objecthuman in #109
- Bump PyO3 version, this required few changes by @slinkydeveloper in #110
- Update pyproject.toml to include correct license metadata by @tillrohrmann in #111
New Contributors
- @objecthuman made their first contribution in #109
Full Changelog: v0.8.0...v0.8.1