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

Passing JSONString with value "null" as mutation input leads to an error.

Offen
#224 5 Kommentare 7 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Python
Sterne
372
Forks
175
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

Hello, `graphql-core` 2.1 is unable to parse such values as argument.

Result: `Argument "value" has invalid value "null". Expected type "JSONString", found "null".`

Seems that `None` value is invalid regardless of the argument type. Of course we can handle it by passing `null` via query argument but I still think this is a bug.

Exception stack trace:
```
File "/venv/lib/python3.7/site-packages/graphql/graphql.py", line 44, in graphql
return execute_graphql(*args, **kwargs)
File "/venv/lib/python3.7/site-packages/graphql/graphql.py", line 70, in execute_graphql
**execute_options
File "/venv/lib/python3.7/site-packages/graphql/backend/core.py", line 30, in execute_and_validate
validation_errors = validate(schema, document_ast)
File "/venv/lib/python3.7/site-packages/graphql/validation/validation.py", line 33, in validate
return visit_using_rules(schema, type_info, ast, rules)
File "/venv/lib/python3.7/site-packages/graphql/validation/validation.py", line 40, in visit_using_rules
visit(ast, TypeInfoVisitor(type_info, ParallelVisitor(visitors)))
File "/venv/lib/python3.7/site-packages/graphql/language/visitor.py", line 128, in visit
result = enter(node, key, parent, path, ancestors)
File "/venv/lib/python3.7/site-packages/graphql/language/visitor.py", line 279, in enter
result = self.visitor.enter(node, key, parent, path, ancestors)
File "/venv/lib/python3.7/site-packages/graphql/language/visitor.py", line 231, in enter
result = visitor.enter(node, key, parent, path, ancestors)
File "/venv/lib/python3.7/site-packages/graphql/language/visitor.py", line 191, in enter
return method(self, node, key, parent, path, ancestors)
File "/venv/lib/python3.7/site-packages/graphql/validation/rules/arguments_of_correct_type.py", line 24, in enter_Argument
errors = is_valid_literal_value(arg_def.type, node.value)
File "/venv/lib/python3.7/site-packages/graphql/utils/is_valid_literal_value.py", line 86, in is_valid_literal_value
if parse_result is None:
```

Simple way to reproduce:

Query example:
```
mutation {
testNull(value: "null") { value }
}
```

GraphQL schema:
```
TestNull:
value: JSONString

testNull(value: JSONString): TestNull
```

Graphene code:
```
class TestNull(graphene.Mutation):
class Input:
value = graphene.JSONString()

value = graphene.JSONString()

@classmethod
def mutate(cls, instance, input, info):
value = input.get('value')
print(f"VALUE={value}")
return TestNull(value=value)
```

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Rechercherichtung

Beginne mit graphql/utils/is_valid_literal_value.py, insbesondere mit der im Traceback gezeigten Verarbeitung von parse_result, und verfolge, wie arguments_of_correct_type.py das JSONString-Literal validiert. Reproduziere die Mutation mit value: "null" und überprüfe die beabsichtigte Behandlung dieses Literals, bevor du den relevanten Validierungstest hinzufügst oder aktualisierst.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
api
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.