Skip to content

Releases: restatedev/sdk-python

v0.13.1

11 Dec 13:51

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.13.0...v0.13.1

v0.13.0

09 Dec 18:28

Choose a tag to compare

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 msgspec support, works out of the box when adding restate_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

New Contributors

Full Changelog: v0.12.0...v0.13.0

v0.12.0

18 Nov 17:12

Choose a tag to compare

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

Full Changelog: v0.11.0...v0.12.0

v0.11.0

21 Oct 16:18

Choose a tag to compare

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

Full Changelog: v0.10.1...v0.11.0

v0.10.2

22 Sep 17:38

Choose a tag to compare

Removed typing_extensions dependency.

Full Changelog: v0.10.1...v0.10.2

v0.10.1

22 Sep 11:32

Choose a tag to compare

What's Changed

Full Changelog: v0.10.0...v0.10.1

v0.10.0

16 Sep 13:01

Choose a tag to compare

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

Full Changelog: v0.9.1...v0.10.0

v0.9.1

29 Aug 14:15

Choose a tag to compare

What's Changed

Full Changelog: v0.9.0...v0.9.1

v0.9.0

28 Aug 14:59

Choose a tag to compare

New features ✨

  • ctx.random() and ctx.uuid() for deterministic random and uuid. by @slinkydeveloper in #120
  • Add ctx.time() as wrapper around ctx.run(time.time) by @slinkydeveloper in #121
  • Integration with standard library logging module: replay aware logging filter restate.RestateLoggingFilter and log factory restate.getLogger() by @slinkydeveloper in #122

Full Changelog: v0.8.1...v0.9.0

v0.8.1

17 Jul 20:30
29d1cb6

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.8.0...v0.8.1