`RuntimeWarning: coroutine 'ExecutionContext.execute_fields.<locals>.resolve' was never awaited` on 3.3.0a11
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 55/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- python
- Ambito
- backend-api-design
Direzione di ricerca
Inizia da ExecutionContext.execute_fields e dal punto di ingresso experimental_execute_incrementally, usando la riproduzione minima con la query { slow fast_fail }. Traccia come vengono gestiti il resolver asincrono messo da parte e complete_awaitable_value quando il resolver NonNull fratello solleva un’eccezione. Il lavoro è completato quando la query continua a restituire l’errore di esecuzione segnalato senza messaggi RuntimeWarning per coroutine non sottoposte ad await.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description
When executing a query with multiple fields, if an async field's resolver is processed first (its inner resolve() coroutine gets stashed for later), and a later sibling NonNull field raises synchronously, the exception escapes execute_fields immediately, before the stashed coroutine is ever awaited or closed. This results in:
RuntimeWarning: coroutine 'ExecutionContext.execute_fields.<locals>.resolve' was never awaited
Environment
- graphql-core: 3.3.0a11
- strawberry-graphql: 0.291.3 (via experimental_execute_incrementally)
- Python: 3.12.13
Minimal reproduction
from __future__ import annotations
import asyncio
import sys
from graphql import (
GraphQLField,
GraphQLNonNull,
GraphQLObjectType,
GraphQLSchema,
GraphQLString,
parse,
)
from graphql.execution import experimental_execute_incrementally
async def resolve_slow_async(_obj, _info):
await asyncio.sleep(0.01)
return "ok"
def resolve_sync_raises_nonnull(_obj, _info):
raise Exception("boom from sibling")
schema = GraphQLSchema(
query=GraphQLObjectType(
name="Query",
fields={
"slow": GraphQLField(GraphQLString, resolve=resolve_slow_async),
"fast_fail": GraphQLField(
GraphQLNonNull(GraphQLString),
resolve=resolve_sync_raises_nonnull,
),
},
)
)
async def run():
try:
result = experimental_execute_incrementally(
schema=schema,
document=parse("{ slow fast_fail }"),
)
if asyncio.iscoroutine(result):
result = await result
print(f"result: {result!r}")
except Exception as exc:
print(f"raised: {type(exc).__name__}: {exc}")
if __name__ == "__main__":
sys.exit(asyncio.run(run()))
Observed output
result: ExecutionResult(data=None, errors=[GraphQLError('boom from sibling', ...)])
sys:1: RuntimeWarning: coroutine 'resolve_slow_async' was never awaited
sys:1: RuntimeWarning: coroutine 'ExecutionContext.complete_awaitable_value' was never awaited
sys:1: RuntimeWarning: coroutine 'ExecutionContext.execute_fields.<locals>.resolve' was never awaited
- Lingua principale
- Python
- Stelle
- 531
- Fork
- 147
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di graphql-python/graphql-core
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 50/100
graphql-python/graphql-core#272 · 1 commento ·
-
Publish a major version Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
graphql-python/graphql-core#267 · 1 commento ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 45/100
graphql-python/graphql-core#257 ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
graphql-python/graphql-core#247 · 8 commenti ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
graphql-python/graphql-core#223 · 1 commento ·
Tutte le issue di graphql-python/graphql-core
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
anthropics/skills#1811 · 1 commento ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
speaches-ai/speaches#678 ·
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
datalayer/mcp-compose#42 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
conda-forge/spacy-feedstock#177 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
UKGovernmentBEIS/inspect_evals#2523 ·