Skip to main content

FastGraphQL is intended to help developer create code driven GraphQL APIs

Project description

from pydantic import BaseModel# FastGraphQL FastGraphQL is intended to help developer create code driven GraphQL APIs.

codecov tests pypi Python Versions License

Disclaimer

This is still a work in progress

Motivation

So far most of the projects that uses GraphQL need to duplicate many definitions to be able to have a consistent GraphQL API schema alongside well-defined models that governs the development and the application.

FastGraphQL tries to shortcut the path between python models and GraphQL schema using Pydantic models. This ensures not only a single source of truth when comes to type, inputs, query and mutation definition reflected in classes and methods, but also the ability to use Pydantic to validate models.

Installation

pip install fastgraphql

Usage

GraphQL Types and Inputs

Using annotation driven definitions and Pydantic, defining GraphQL types and inputs can be done by simple annotating Pydantic models with FastGraphQL.graphql_type() of FastGraphQL.graphql_input()

from datetime import datetime
from typing import Optional
from pydantic import BaseModel
from fastgraphql import FastGraphQL

fast_graphql = FastGraphQL()

@fast_graphql.graphql_type()
class Model(BaseModel):
    t_int: int
    t_opt_int: Optional[int]
    t_str: str
    t_opt_str: Optional[str]
    t_float: float
    t_opt_float: Optional[float]
    t_datatime: datetime
    t_opt_datatime: Optional[datetime]
    t_boolean: bool
    t_opt_boolean: Optional[bool]

@fast_graphql.graphql_type()
class Input(BaseModel):
    t_int: int
    
print(fast_graphql.render())

The above code example generates a schema as follows:

scalar Date

type Model {
    t_int: Int!
    t_opt_int: Int
    t_str: String!
    t_opt_str: String
    t_float: Float!
    t_opt_float: Float
    t_datatime: Date!
    t_opt_datatime: Date
    t_boolean: Boolean!
    t_opt_boolean: Boolean
}

type Input {
    t_int: Int!
}

Query and Mutation

Following the same approach with annotation driven defitions, query and mutations can easily be defined using FastGraphQL.graphql_query and FastGraphQL.mutation.

Note that all function arguments annotated with FastGraphQL.graphql_query_field are considered to be input arguments for the GraphQL API and simples types and Pydantic models can be used and arguments and also as return type and they don't need to be explicitly annotated.

from fastgraphql import FastGraphQL
from pydantic import BaseModel
fast_graphql = FastGraphQL()

class Model(BaseModel):
    param: str

@fast_graphql.graphql_query()
def my_first_query(
        model: Model = fast_graphql.graphql_query_field(),
        param: str = fast_graphql.graphql_query_field()
) -> str:
    ...

print(fast_graphql.render())

The above code example generates a schema as follows:

input Model {
    param: String!
}
type Query {
    my_first_query(model: Model!, param: String!): String!
}

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

fastgraphql-0.0.2.tar.gz (8.7 kB view details)

Uploaded Source

Built Distribution

fastgraphql-0.0.2-py3-none-any.whl (8.5 kB view details)

Uploaded Python 3

File details

Details for the file fastgraphql-0.0.2.tar.gz.

File metadata

  • Download URL: fastgraphql-0.0.2.tar.gz
  • Upload date:
  • Size: 8.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.14

File hashes

Hashes for fastgraphql-0.0.2.tar.gz
Algorithm Hash digest
SHA256 8279d5bddc5862f877a0f4f7008ccf2402f3949322f89ae940a6e43d1b7ab7e9
MD5 d7bb56c93380e7b87f400994f58a24b4
BLAKE2b-256 118906b46d895831755bf17e0fcabdfb20e5fd56178edf172846b7098204791a

See more details on using hashes here.

File details

Details for the file fastgraphql-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: fastgraphql-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 8.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.9.14

File hashes

Hashes for fastgraphql-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 82a75177f4e05e47a47e71e65e50f561f98ed7da96ab89e7b10bc42bcd4f07a3
MD5 bad94a87a35be0b1e8f50913f0dfd98e
BLAKE2b-256 45a4ee5a93dc672a05ea4c73ab29caeb7d5cef7e7f1c227a91f4aac298749c8f

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