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]

Reply via email to