kajocina opened a new issue, #546:
URL: https://github.com/apache/burr/issues/546
It seems that the AsyncSQLitePersister doesn't work in the expected way when
trying to use it as a context manager.
# Current behavior
Trying to use AsyncSQLitePersister.from_values() with "async with" fails.
Full example below.
## Stack Traces
(...)
async with AsyncSQLitePersister.from_values(
TypeError: 'coroutine' object does not support the asynchronous context
manager protocol
## Library & System Information
Python 3.11, MacOS
# Expected behavior
Expected the provided snippet to work as it follows how the context manager
is shown in the tutorials during the application build step. The tutorial shows
a regular sync versions, perhaps async ones need to be initialised differently
and the tutorial updated?
## Steps to replicate behavior
import datetime
import asyncio
from burr.core import action, State, ApplicationBuilder, expr
from burr.integrations.persisters.b_aiosqlite import AsyncSQLitePersister
@action(reads=["counter"], writes=["counter"])
async def increment(state: State) -> State:
"""Increment the counter by 1"""
# get the value from the `state`
current_count = state["counter"]
current_count += 1
print("Count: ", current_count)
# use `.update()` to create a new `State`
return state.update(counter=current_count)
@action(reads=["counter"], writes=[])
async def exit_counter(state: State) -> State:
"""Print the current count and the current time"""
current_count = state["counter"]
print(f"Finished counting to {current_count} at
{datetime.datetime.now():%H:%M:%S %Y-%m-%d}")
return state
async def build_app():
"""This is where the problem shows up."""
async with AsyncSQLitePersister.from_values(
db_path=".burr.db",
table_name="burr_state"
) as state_persister:
app = await (
ApplicationBuilder()
.with_actions(increment, exit_counter)
.with_transitions(
("increment", "increment", expr("counter < 10")),
("increment", "exit_counter"),
)
.with_state(counter=0)
.with_entrypoint("increment")
.with_state_persister(state_persister)
.abuild()
)
return app
async def main():
app = await build_app()
action_obj, result, state = await app.arun(halt_after=["exit_counter"])
if __name__ == "__main__":
asyncio.run(main())
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]