Skip to main content

graphql-codegen powered by pydantic

Project description

turms

codecov PyPI version Maintenance Maintainer PyPI pyversions PyPI status PyPI download month

Goal

Turms is a graphql-codegen inspired code generator for python that generates typed and serializable python code from your graphql schema and documents. Just define your query in standard graphql syntax and let turms create fully typed queries/mutation and subscriptions, that you can use in your favourite IDE.

Turms allows you to easily generate both server-side and client-side code for your GraphQL API.

Schema (Server) Generation:

Can generate the following types from your graphql SDL schema:

  • Enums
  • Inputs
  • Objects
  • Scalars
  • Directives

Sepcific generation supported for:

  • Strawberry

Documents (Client) Generation

Can generate the following pydantic models from your graphql documents:

  • Enums
  • Inputs
  • Scalars
  • Fragments
  • Operations

Features

  • Fully typed, fully documented code generation
  • Schema and Document based code generation
  • Compatible with popular graphql libraries (strawberry, gql, rath, etc.)
  • Support for custom scalars, custom directives, ...
  • Powerful plugin system (e.g. custom Linting, custom formatting, etc.)
  • Operation functions like query, mutation, subscription (e.g. data= get_capsules())
  • Compliant with graphl-config
  • Code migration support (trying to merge updates into existing code)

Installation

pip install turms

turms is a pure development library and will not introduce any dependency on itself into your code, so we recommend installing turms as a development dependency.

uvx turms init

As of now turms only supports python 3.9 and higher (as we rely on ast unparsing)

Configuration

Turms relies on and complies with graphql-config and searches your current working dir for the graphql-config file.

Document based generation

Based on pydantic models

projects:
  default:
    schema: http://api.spacex.land/graphql/
    documents: graphql/**.graphql
    extensions:
      turms: # path for configuration for turms
        out_dir: examples/api
        plugins: # path for plugin configuration
          - type: turms.plugins.enums.EnumsPlugin
          - type: turms.plugins.inputs.InputsPlugin
          - type: turms.plugins.fragments.FragmentsPlugin
          - type: turms.plugins.operation.OperationsPlugin
          - type: turms.plugins.funcs.FuncsPlugin
        processors:
          - type: turms.processor.black.BlackProcessor
          - type: turms.processor.isort.IsortProcessor
        scalar_definitions:
          uuid: str
          timestamptz: str
          Date: str

Schema based generation

Based on strawberry models

projects:
  default:
    schema: beasts.graphql
    extensions:
      turms:
        skip_forwards: true
        out_dir: api
        stylers:
          - type: turms.stylers.capitalize.CapitalizeStyler
          - type: turms.stylers.snake_case.SnakeCaseStyler
        plugins:
          - type: turms.plugins.strawberry.StrawberryPlugin # generates a strawberry schema
        processors:
          - type: turms.processors.disclaimer.DisclaimerProcessor
          - type: turms.processors.black.BlackProcessor
          - type: turms.processors.isort.IsortProcessor
          - type: turms.processors.merge.MergeProcessor # merges the formated schema with already defined functions
        scalar_definitions:
          uuid: str
          _Any: typing.Any

Usage

Once you have configured turms you can generate your code by running

turms gen

Why Turms

In Etruscan religion, Turms (usually written as 𐌕𐌖𐌓𐌌𐌑 Turmś in the Etruscan alphabet) was the equivalent of Roman Mercury and Greek Hermes, both gods of trade and the messenger god between people and gods.

Transport Layer

Turms does not come with a default transport layer but if you are searching for an Apollo-like GraphQL Client you can check out rath, that works especially well with turms.

Examples

This github repository also contains some examples on how to use turms with popular libraries in the graphql ecosystem.

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

turms-0.10.2.tar.gz (56.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

turms-0.10.2-py3-none-any.whl (71.1 kB view details)

Uploaded Python 3

File details

Details for the file turms-0.10.2.tar.gz.

File metadata

  • Download URL: turms-0.10.2.tar.gz
  • Upload date:
  • Size: 56.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for turms-0.10.2.tar.gz
Algorithm Hash digest
SHA256 8676ff6e45db95177de96e2b1503db4835f528ef27c75bd2d8a7019812ef905b
MD5 2e8b003fd8ddbb6b20d3ce547e571f3b
BLAKE2b-256 898134f54b048f965dc8ec5b51b9e59c081ee2edf060bb79824402ac1b4f7ded

See more details on using hashes here.

File details

Details for the file turms-0.10.2-py3-none-any.whl.

File metadata

  • Download URL: turms-0.10.2-py3-none-any.whl
  • Upload date:
  • Size: 71.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for turms-0.10.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2c17f28bc8d37d415b24b639f5c69d81157e6d18b898c07cedfc5ac5d03bf420
MD5 871fdba747b61cec37879f92407c9cf1
BLAKE2b-256 4bbd2347087a84b215d9652ab6e02e922218add0e0fc927b44a6653360350d84

See more details on using hashes here.

Supported by

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