DSL does not provide expected argument validation
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 42/100
Piste de recherche
Commencez par dsl.dsl_gql et comparez son comportement à celui de gql.gql en utilisant la reproduction de l’API countries dans cet Issue. Suivez la manière dont les arguments de la requête DSL sont traités et vérifiez que le filtre malformé de l’étape 5 lève un GraphQLError équivalent au lieu de renvoyer des résultats non filtrés.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Describe the bug
- When creating a query with
gql.gql(), the query string is checked for invalid arguments, and raises an exception if any are found. (expected behavior) - When creating a query with
gql.dsl.dsl_gql(), the arguments are not checked, causing unexpected return values. (unexpected behavior)
I've been able to recreate this using the countries api used in the docs.
To Reproduce
Jump to step 5 to see the actual improper behavior.
-
Set up the transport/client.
import json import gql from gql.transport.requests import RequestsHTTPTransport as Transport from gql import dsl url = "https://countries.trevorblades.com/" transport = Transport(url=url) client = gql.Client(transport=transport, fetch_schema_from_transport=True) # Fetch the schema (lemme know if there's a recommended approach for this). client.connect_sync() client.close_sync() ds = dsl.DSLSchema(client.schema) -
Run a good query using strings.
good_query_str = gql.gql( """ query { continents (filter:{code:{eq:"AN"}}) { code name } } """ ) result = client.execute(good_query_str) print(json.dumps(result, indent=2))Result:
{ "continents": [ { "code": "AN", "name": "Antarctica" } ] } -
Run a bad query using strings. The only change here is using
'AN'directly as an argument tocode, instead of providing theeqdirective.bad_query_str = gql.gql( """ query { continents (filter:{code:"AN"}) { code name } } """ ) result = client.execute(bad_query_str) print(json.dumps(result, indent=2))Result:
GraphQLError: Expected value of type 'StringQueryOperatorInput', found "AN". GraphQL request:3:34 2 | query { 3 | continents (filter:{code:"AN"}) { | ^ 4 | code -
Run a good query using DSL.
good_query_dsl = dsl.dsl_gql( dsl.DSLQuery( ds.Query.continents( filter={ 'code': {'eq': 'AN'} } ).select( ds.Continent.code, ds.Continent.name, ) ) ) result = client.execute(good_query_dsl) print(json.dumps(result, indent=2))Result:
{ "continents": [ { "code": "AN", "name": "Antarctica" } ] } -
Run a bad query using DSL. Same deal, just remove the 'eq' level of filter specification. Note that the result is an unfiltered response.
bad_query_dsl = dsl.dsl_gql( dsl.DSLQuery( ds.Query.continents( filter={ 'code': 'AN' } ).select( ds.Continent.code, ds.Continent.name, ) ) ) result = client.execute(bad_query_dsl) print(json.dumps(result, indent=2))Result:
{ "continents": [ { "code": "AF", "name": "Africa" }, { "code": "AN", "name": "Antarctica" }, { "code": "AS", "name": "Asia" }, { "code": "EU", "name": "Europe" }, { "code": "NA", "name": "North America" }, { "code": "OC", "name": "Oceania" }, { "code": "SA", "name": "South America" } ] }
Expected behavior
Step 5 should raise an equivalent exception to step 3.
System info (please complete the following information):
- OS: Wins 10
- Python version: 3.9.12
- gql version: 3.4.0
- graphql-core version: 3.2.1
- Langage dominant
- Python
- Étoiles
- 1.7k
- Forks
- 197
- Merge moyen
- 12 min
- PR mergées (30 j)
- 2
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de graphql-python/gql
-
RequestsHTTPTransport does not set headers on session like AIOHTTPTransport doesPeut-être pris @shtrom l’a pris il y a 49 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
graphql-python/gql#613 · 2 commentaires ·
-
type: feature
Difficulté 3/5 1-2 jours Accessibilité débutants 42/100
graphql-python/gql#434 ·
-
type: feature
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
graphql-python/gql#373 · 1 réaction ·
-
type: feature
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
graphql-python/gql#316 · 5 commentaires · 3 réactions ·
Toutes les issues de graphql-python/gql
Issues similaires
-
area: agents area: docs good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
openapi/gknowledge#23 ·
-
get() for StrEnumPeut-être pris @FeJo5952 l’a pris aujourd’hui. Ouvertegood first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
collective/icalendar#1921 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Improvement Python Spans
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
getsentry/sentry-python#7994 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
alphagov/notifications-api#5004 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
equinor/radix-flux#3922 ·
Les mainteneurs répondent en général sous 1 jour