Skip to content

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

License

Notifications You must be signed in to change notification settings

GoZaddy/SchemaGen

Repository files navigation

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!

About

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

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published