Package: gqlclient
A pythonic interface for making requests to a GraphQL server using
standard library or pydantic dataclasses to spare you from string manipulation.FeaturesUse standard library dataclasses to specify graphql parameters and responsesUsepydanticdataclasses to
specify graphql parameters and responses that have type validationCreate and execute GraphQL Queries based upon typed modelsCreate and execute GraphQL Mutations based upon typed modelsAsync supportInstallationpipinstallgqlclientwithasynciosupportpipinstallgqlclient[async]for developerspipinstallgqlclient[test]pipinstallpre-commitpre-commitinstallExamplesQueryfrompydantic.dataclassesimportdataclassfromgqlclientimportGraphQLClient@dataclassclassParameters:attr_one:strattr_two:int@dataclassclassResponse:attr_three:intattr_four:strclient=GraphQLClient(gql_uri="http://localhost:5000/graphql")parameters=Parameters(attr_one="foo",attr_two=3)query=client.get_query(query_base="baseType",query_response_cls=Response,query_parameters=parameters)print(query)# {'query': '{baseType(filterParams: {attr_one: "foo", attr_two: 3}){attr_three, attr_four} }'}response=client.execute_gql_query(query_base="baseType",query_response_cls=Response,query_parameters=parameters,response_encoder=json_encoder)print(response)# with the default dataclass_encoder# [Response(attr_three=5, attr_four="bar")]Mutationfrompydantic.dataclassesimportdataclassfromgqlclientimportGraphQLClient@dataclassclassParameters:attr_one:strattr_two:int@dataclassclassResponse:attr_three:intattr_four:strclient=GraphQLClient(gql_uri="http://localhost:5000/graphql")parameters=Parameters(attr_one="foo",attr_two=3)query=client.get_mutation(mutation_base="baseMutation",mutation_response_cls=Response,mutation_parameters=parameters)print(query)# {'query': 'mutation baseType {baseType(mutateParams: {attr_one: "foo", attr_two: 3}){attr_three, attr_four} }', 'operationName': 'baseType'}response=client.execute_gql_mutation(mutation_base="baseMutation",mutation_response_cls=Response,mutation_parameters=parameters)print(response)# with the default dataclass_encoder# [Response(attr_three=5, attr_four="bar")]EncodersfromdataclassesimportdataclassfromgqlclientimportGraphQLClientfromgqlclientimportjson_encoder# set the default encoder to the json_encoderclient=GraphQLClient(gql_uri="http://127.0.0.1:30003/graphql",response_encoder=json_encoder)@dataclassclassQueryResponse:workflowId:intworkflowName:strworkflowDescription:str|Noneresponse=client.execute_gql_query("workflows",QueryResponse)print(response)# Response is a json formatted string# {"workflows": [{"workflowId": 1, "workflowName": "gql3_full - workflow_name", "workflowDescription": "gql3_full - workflow_description"}, {"workflowId": 2, "workflowName": "VBI base calibration", "workflowDescription": "The base set of calibration tasks for VBI."}]}fromgqlclientimportdataclass_encoder# for this call override the default encoderresponse=client.execute_gql_query("workflows",QueryResponse,response_encoder=dataclass_encoder)print(response)# Response type is a list of dataclasses# [QueryResponse(workflowId=1, workflowName='gql3_full - workflow_name', workflowDescription='gql3_full - workflow_description'), QueryResponse(workflowId=2, workflowName='VBI base calibration', workflowDescription='The base set of calibration tasks for VBI.')]