Skip to content

denisart/graphql2python

Repository files navigation

GRAPHQL2PYTHON

Build tag last-commit license


NOTE. Please use the package datamodel-code-generator to generate data model from a GraphQL schema.

graphql2python is a tool that generates python code out of your GraphQL schema. If you are using python as GraphQL client you can to generate pydantic data-model with graphql2python. The documentation for graphql2python can be found at https://denisart.github.io/graphql2python.

GraphQL query generation moved to https://github.com/denisart/graphql-query

The special example for gql users here.

Quickstart

Install with pip

pip install graphql2python

Create the following file

# graphql2python.yaml
schema: ./schema.graphql
output: ./model.py

and run the following command

graphql2python generate --config ./graphql2python.yaml

Config reference

Global keywords

keyword description
schema A path to the target GraphQL schema file.
output A file name for output py file.
license_file An optional path to a file with license for output py file.
options Optional options for generate of output py file.

Options keywords

keywords description
max_line_len The maximum of line length of output py file. Default is 120.
name_suffix A suffix for invalid field name (as python object name). Default is "_".
each_field_optional Each fields of interfaces and objects are optional. Default is false.
add_from_dict Add from_dict (dict -> model) method to the general class. Default is false.
add_to_dict Add to_dict (model -> dict) method to the general class. Default is false.
scalar_pytypes A dict with python types for custom GraphQL scalars. Maps from scalar name to python type name. Default is empty dict.
fields_setting Settings for interfaces or objects fields. Maps from object name to a dict with setting. Default is empty dict.

fields_setting keywords for some object name

keywords desciption
alias An alias for a field (see Field.alias for pydantic). Default is null.
new_name A new name for a field. Default is null.

An example for graphql2python.yaml config:

# graphql2python.yaml
schema: ./schema/schema.graphql
output: ./model/model.py
license_file: ./LICENSE
options:
  scalar_pytypes:
    String: str
    Float: float
    Int: int
    ID: str
    Boolean: bool
    DateTime: datetime
    Date: date
  max_line_len: 79
  each_field_optional: true
  fields_setting:
    MyObjectName:
      from:
        alias: from
        new_name: correct_from