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

Cannot subscribe to more than one field

Open
#194 1 comment 0 reactions 0 assignees View on GitHub
help wanted
Dominant language
Python
Stars
372
Forks
175
PR merge metrics
No merged PRs in 30d

Description

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.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.