Skip to content
Snippets Groups Projects
Commit 1c70f040 authored by Vincent Texier's avatar Vincent Texier
Browse files

[enh] #59 use graphql-core library to validate GraphQL queries against server schema

Add graphql-core >= 3 and python >= 3.6 dependencies
parent 3520e92a
No related branches found
No related tags found
No related merge requests found
import asyncio
import sys
from duniterpy.api.client import Client
from graphql import get_introspection_query, build_client_schema, language, validate
from graphql.error import GraphQLSyntaxError
# CONFIG #######################################
# You can either use a complete defined endpoint : [NAME_OF_THE_API] [DOMAIN] [IPv4] [IPv6] [PORT]
# or the simple definition : [NAME_OF_THE_API] [DOMAIN] [PORT]
# Here we use the secure BASIC_MERKLED_API (BMAS)
# Here we use the secure BASIC_MERKLED_API (BMAS) for standard http over ssl requests
SWAPI_ENDPOINT = "BMAS swapi.graph.cool 443"
......@@ -16,6 +19,15 @@ SWAPI_ENDPOINT = "BMAS swapi.graph.cool 443"
async def main():
client = Client(SWAPI_ENDPOINT)
# get query to get schema from api
query = get_introspection_query(False)
# get schema from api
response = await client.query(query)
print(response)
# convert response dict to schema
schema = build_client_schema(response["data"])
# create all films query
query = """query {
allFilms {
title,
......@@ -25,7 +37,21 @@ async def main():
}
}
"""
# check query syntax
try:
ast_document = language.parse(query)
except GraphQLSyntaxError as exception:
print("Query syntax error: {0}".format(exception.message))
sys.exit(1)
# validate query against schema
errors = validate(schema, ast_document)
if errors:
print("Schema errors:")
print(errors)
sys.exit(1)
# send valid query to api
response = await client.query(query)
print(response)
......
......@@ -6,3 +6,4 @@ jsonschema >= 2.6.0
pypeg2>=2.15.2
attr>=0.3.1
pyaes>=1.6.1
graphql-core>=3
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment