Skip to main content

A Command line tool for generating Python GraphQL implementations(with Graphene) from GraphQL schema files

Project description

SchemaGen

Schema Gen is a simple CLI tool that generates Python GraphQL implementations(using Graphene) from a Graphql Schema file.

Installation

pip install schemagen

Usage

Here's the content of a sample input file(we will call it test.graphql)

type User {
    id: ID!
    username: String
    first_name: String
    last_name: String
    full_name: String
    name: String
    name: String
}

Now let's use SchemaGen to generate python code from it.

As a CLI tool:

schemagen parse test.graphql -o test.py

As a Python Package:

from schemagen import SchemaGen

gen = SchemaGen(
  input_file='test.graphql',
  output_file='test.py'
)

# parse input file
gen()

Output(test.py):

# This file was generated by CodegenTool
from graphene import *

class User(ObjectType):
	id = Field(ID, required=True)
	username = Field(String)
	first_name = Field(String)
	last_name = Field(String)
	full_name = Field(String)
	name = Field(String)

Notes

Here are some things you should know about using SchemaGen:

  • SchemaGen is not guaranteed to catch errors in your GraphQL schema file.

    SchemaGen will only catch a very small percentage of errors that might occur in defining a GraphQL schema. It is the developer's responsibility to ensure the GraphQL schema file is error-free.

  • SchemaGen will not install the graphene package on your local machine however it will import it in the generated python file.

    You can easily install the package by running:

    pip install graphene
    
  • GraphQL type declarations in your schema file must be ordered.

    Because of the way Python and SchemaGen works, you cannot use a GraphQL type before declaring it. For example, the following graphql schema definition would be invalid because we are using the Url scalar in our User type before declaring it:

      type User {
          id: ID!
          username: String
          avatar_url: Url
      }
    
      scalar Url    
    

    The correct version of the above code is:

    scalar Url 
    
    type User {
        id: ID!
        username: String
        avatar_url: Url
    }
    
  • Using a GraphQL SDL keyword as an object field name in your schema will throw an error.

    For example, doing this:

    enum UserType {
      Example
    }
    
    type User{
      name: String
      type: UserType
    }
    

    will throw an error.

    Do this instead:

    enum UserType {
      Example
    }
    
    type User{
      name: String
      user_type: UserType
    }
    

I plan to fix the last two issues stated above in the future. Pull requests are welcome!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

schemagen-1.0.5.tar.gz (39.0 kB view hashes)

Uploaded Source

Built Distribution

schemagen-1.0.5-py3-none-any.whl (40.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page