-
Notifications
You must be signed in to change notification settings - Fork 152
AsyncPoeApi TypeError: object dict can't be used in 'await' expression" #216
Description
I have a problem when I try to use asynchronous calls to the api.
import asyncio
from poe_api_wrapper import AsyncPoeApi
async def xx(client, row):
answer =
async for chunk in client.send_message("", message, chatId=):
return answer
async def process_batch(client, rows, batch_size=5):
tasks = []
for row in rows:
task = asyncio.create_task(xx(client, row))
tasks.append(task)
results = await asyncio.gather(*tasks)
return results
async def process_dataframe(df, batch_size=5):
client = await AsyncPoeApi(tokens=tokens).create()
results = await process_batch(client, batch_rows, batch_size)
async def main1():
batch_size = 1
await process_dataframe(df, batch_size)
asyncio.run(main1())
TypeError Traceback (most recent call last)
Cell In[26], line 5
2 batch_size = 1
3 await process_dataframe(df, batch_size)
----> 5 asyncio.run(main1())
File d:\conda\lib\site-packages
est_asyncio.py:35, in _patch_asyncio..run(main, debug)
33 task = asyncio.ensure_future(main)
34 try:
---> 35 return loop.run_until_complete(task)
36 finally:
37 if not task.done():
File d:\conda\lib\site-packages
est_asyncio.py:90, in _patch_loop..run_until_complete(self, future)
87 if not f.done():
88 raise RuntimeError(
89 'Event loop stopped before Future completed.')
---> 90 return f.result()
File d:\conda\lib\asyncio\futures.py:201, in Future.result(self)
199 self.__log_traceback = False
200 if self._exception is not None:
--> 201 raise self._exception.with_traceback(self._exception_tb)
202 return self._result
File d:\conda\lib\asyncio\tasks.py:234, in Task.__step(failed resolving arguments)
232 result = coro.send(None)
233 else:
--> 234 result = coro.throw(exc)
235 except StopIteration as exc:
236 if self._must_cancel:
237 # Task is cancelled right before coro stops.
Cell In[26], line 3, in main1()
1 async def main1():
2 batch_size = 1
----> 3 await process_dataframe(df, batch_size)
Cell In[17], line 41, in process_dataframe(df, batch_size)
38 batch_rows = df.iloc[batch_start:batch_end].to_dict('records')
40 # try:
---> 41 results = await process_batch(client, batch_rows, batch_size)
43 for idx, result in enumerate(results):
44 df_idx = batch_start + idx
Cell In[17], line 20, in process_batch(client, rows, batch_size)
18 task = asyncio.create_task(translate(client, row))
19 tasks.append(task)
---> 20 results = await asyncio.gather(*tasks)
21 return results
File d:\conda\lib\asyncio\tasks.py:304, in Task.__wakeup(self, future)
302 def __wakeup(self, future):
303 try:
--> 304 future.result()
305 except BaseException as exc:
306 # This may also be a cancellation.
307 self.__step(exc)
File d:\conda\lib\asyncio\tasks.py:232, in Task.__step(failed resolving arguments)
228 try:
229 if exc is None:
230 # We use the send
method directly, because coroutines
231 # don't have __iter__
and __next__
methods.
--> 232 result = coro.send(None)
233 else:
234 result = coro.throw(exc)
Cell In[17], line 9, in translate(client, row)
8 answer = ''
----> 9 async for chunk in client.send_message("", message, chatId=):
File d:\conda\lib\site-packages\poe_api_wrapper\async_api.py:930, in AsyncPoeApi.send_message(self, bot, message, chatId, chatCode, msgPrice, file_path, suggest_replies, timeout)
926 yield response
928 last_text = response["text"]
--> 930 await self.delete_queues(chatId)
931 self.retry_attempts = 3
File d:\conda\lib\site-packages\poe_api_wrapper\async_api.py:384, in AsyncPoeApi.delete_queues(self, chatId)
382 while not self.message_queues[chatId].empty():
383 try:
--> 384 await self.message_queues[chatId].get_nowait()
385 except asyncio.QueueEmpty:
386 pass
TypeError: object dict can't be used in 'await' expression"