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 details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

Details for the file schemagen-1.0.5.tar.gz.

File metadata

  • Download URL: schemagen-1.0.5.tar.gz
  • Upload date:
  • Size: 39.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.7.3 pkginfo/1.7.0 requests/2.25.0 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.1

File hashes

Hashes for schemagen-1.0.5.tar.gz
Algorithm Hash digest
SHA256 438a5f9fd5e8798667b43594e9ff9004bcd748ad953dc1eabb70a9cff460d7ea
MD5 cc29c0d3526fc5e421224c1f23e0c227
BLAKE2b-256 ecc2222d5b5acba48aa503868936254101058c14d6d58359582cfd449e09bc73

See more details on using hashes here.

File details

Details for the file schemagen-1.0.5-py3-none-any.whl.

File metadata

  • Download URL: schemagen-1.0.5-py3-none-any.whl
  • Upload date:
  • Size: 40.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.7.3 pkginfo/1.7.0 requests/2.25.0 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.1

File hashes

Hashes for schemagen-1.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 df4044e86ae51f0bd3e73121e309ce1bbc91d403641a37ba8cf10cb403579180
MD5 95e57ea97c703d46e2695ba63969bee4
BLAKE2b-256 606bac349aac023498f52187607b1d8848264db2b5ed0a3122bc41254de9cfa2

See more details on using hashes here.

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