Async streaming response wrappers leak an unawaited coroutine when not entered
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 82/100
Direção de pesquisa
Comece em src/browserbase/_response.py:632-637 e 669-685, comparando AsyncResponseContextManager com o ResponseContextManager síncrono. Reproduza o caso da issue em que o manager é descartado sem ter sido acessado e, em seguida, adicione um teste de ciclo de vida mostrando que nenhum aviso sobre uma coroutine não aguardada é emitido e que entrar no manager ainda realiza a requisição esperada.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Description
The async .with_streaming_response wrappers create the endpoint coroutine immediately, before the returned context manager is entered. If the context manager is conditionally discarded or never entered, Python emits RuntimeWarning: coroutine ... was never awaited.
This differs from the synchronous wrapper, which stores a callable and does not invoke the endpoint until __enter__.
Code reference
src/browserbase/_response.py:669-685AsyncResponseContextManagerstores an already-createdAwaitableatsrc/browserbase/_response.py:632-637
Reproduction
import asyncio
import gc
import warnings
from browserbase import AsyncBrowserbase
async def main():
client = AsyncBrowserbase(api_key="test")
with warnings.catch_warnings(record=True) as caught:
warnings.simplefilter("always")
cm = client.sessions.with_streaming_response.create(project_id="p")
del cm
gc.collect()
await asyncio.sleep(0)
print([str(w.message) for w in caught])
await client.close()
asyncio.run(main())
Actual output includes:
coroutine 'AsyncSessionsResource.create' was never awaited
No HTTP request is needed to reproduce this.
Expected behavior
Creating and discarding an unentered response context manager should not allocate an unawaited coroutine or emit a resource warning. The async manager could retain a callable/partial and invoke it lazily from __aenter__, matching ResponseContextManager.
Why it matters
Warnings are promoted to errors in many test suites, and conditional streaming code can produce noisy, nondeterministic resource warnings. This path currently has no direct lifecycle test.
- Linguagem predominante
- Python
- Estrelas
- 93
- Forks
- 16
- Merge médio
- 11min
- PRs com merge (30d)
- 3
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de browserbase/sdk-python
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
browserbase/sdk-python#182 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
browserbase/sdk-python#180 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
browserbase/sdk-python#179 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
browserbase/sdk-python#178 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
browserbase/sdk-python#176 ·
Todas as issues de browserbase/sdk-python
Issues semelhantes
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
use-agent-os/agent-os#3314 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
BasedHardware/omi#15662 · 1 comentário ·
-
documentation help wanted
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 90/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
AiursoftWeb/AnduinOS-2#19 ·