graphql-python / graphql-python/graphql-core-legacy

Cannot subscribe to more than one field

Aperta
#194 1 commento 0 reazioni 0 assegnatari Vedi su GitHub
help wanted
Lingua principale
Python
Stelle
372
Fork
175
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

Attempting to subscribe to more than one field will only return the first one in the list. There is some obvious offending code in executor.py:
`def subscribe_fields(exe_context, parent_type, source_value, fields):
exe_context = SubscriberExecutionContext(exe_context)

def on_error(error):
exe_context.report_error(error)

def map_result(data):
if exe_context.errors:
result = ExecutionResult(data=data, errors=exe_context.errors)
else:
result = ExecutionResult(data=data)
exe_context.reset()
return result

observables = []

# assert len(fields) == 1, "Can only subscribe one element at a time."

for response_name, field_asts in fields.items():
result = subscribe_field(exe_context, parent_type, source_value, field_asts, [response_name])
if result is Undefined:
continue

def catch_error(error):
exe_context.errors.append(error)
return Observable.just(None)

# Map observable results
observable = result.catch_exception(catch_error).map(
lambda data: map_result({response_name: data}))
return observable
observables.append(observable)

return Observable.merge(observables)
`

The line `return observable` causes a bunch of unreachable code and exits the loop early. However, commenting out that line does not appear to fix the problem - if it is removed, only the last item in the subscription list will return.

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Direzione di ricerca

Start in executor.py at subscribe_fields and reproduce a subscription requesting multiple fields. Trace how each field result is converted into an Observable and how the merged result is returned. Done means every requested field appears in the subscription result, with errors still reported correctly.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
api
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.