Skip to content

Incorrect outbox metadata example for Python #4506

@jseguillon

Description

@jseguillon

Describe the issue

Example for outbox in python seems to be errored. It assumes we can, via python SDK, do:

  await client.state.transaction(DAPR_STORE_NAME, ops);

but:

== APP ==     c.state.save(
== APP == AttributeError: 'DaprClient' object has no attribute 'state'

Indeed python SDK does not provide this state attribute.

So I tried:

    c.save_state(
        store_name=DAPR_STORE_NAME,
        key="test",
        value='{ "say": "hello world from outbox-metadata" }',
        state_metadata={  "outbox.projection": "true" },
        metadata=(("outbox.projection", "true"),)
    )

But despite my efforts in injecting metadatas, I could not see any outbox message in my outbox topic.

Only way I found to get a message in outbox topic is to use transactions:

    transaction_operation = TransactionalStateOperation(
        operation_type=TransactionOperationType.upsert,
        key="1",
        data='{ "say": "hello world from outbox transaction" }',
    )

    c.execute_state_transaction(
        store_name=DAPR_STORE_NAME,
        operations=[transaction_operation],
        transactional_metadata={ 'datacontenttype': 'application/json'},
        metadata= (('datacontenttype', 'application/json'),)
    )

I made this project where you can find full code and logs: https://github.com/jseguillon/dapr-outbox-python

URL of the docs

https://github.com/dapr/docs/blob/v1.14/daprdocs/content/en/developing-applications/building-blocks/state-management/howto-outbox.md?plain=1#L205

Expected content

A working Python example for outbox with metadata like example for others langages

Screenshots

metadata:

Image

transaction:

Image

Additional context

Metadata

Metadata

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions