GraphQL模式到python数据类代码生成



我有一个从服务器定义的GraphQL模式,我想为它编写一个漂亮的Python GraphQL客户端。我正在寻找一种方法,将我的GraphSQL模式转换为带有类型提示的Python类,这样我就可以看到所有可用的查询、突变、它们的字段(名称和类型(和返回值。

由于模式的复杂性,我无法手动编写所有python类,我在每个字段上都有很多过滤器。请看ent在TodoWhereInput上的这个例子,了解错误修剪是如何实现的。我真的很喜欢使用带有自动完成功能的GraphQL playground,我希望在我的python客户端中获得这种体验。

例如,给定这个模式作为输入:

type Book {
title: String
year: Int
}
type Author {
name: String
books: [Book]
}

我想生成这个python代码作为输出:

from dataclasses import dataclass
@dataclass
class Book:
title: str
year: int
@dataclass
class Author:
name: str
books: list[Book]

模式中的CCD_ 3 s也是如此。

我已经看了:

  1. codegen,这对typescript来说太棒了!但不支持python:/

  2. gql_schema_codegen很好,但生成不是数据类的TypedDict,我必须更改每个dict并传递total=False,这样默认情况下就不需要所有字段。

  3. sgqlc代码生成器,它不允许类型提示。编写查询仍然是动态的,并对错误进行修剪。

我实际上正在开发一个代码生成器,作为一个库的一部分,该库的目标是在从python查询GraphQL API服务器时允许代码优先的方法。

给你一个预览结果:

class Book(GQLObject):
title: str
year: int
class Author(GQLObject):
name: str
books: list[Book]

我刚刚在github上发布了映射器的核心:

https://github.com/dapalex/py-graphql-mapper/

看一下文档,我希望很快发布代码生成器。

您可以使用我的项目从一些GraphQL模式文件生成数据模型https://denisart.github.io/graphql2python/

现在它工作了!新设置将很快添加,以实现更灵活的生成:

  • 自定义导入
  • 自定义模板
  • InputObject的渲染
  • 渲染挂钩

https://countries.trevorblades.com/schema和gql客户端:https://denisart.github.io/graphql2python/gql.html

此外,我们还可以使用该包与python类一起生成GraphQL查询https://denisart.github.io/graphql-query/

关于如何从GQL模式生成类的另一个示例可以在qenerate中找到。它为查询创建简单的数据类,甚至支持使用片段来减少重复的类生成。该模式是通过利用GraphQL的Introspection特性获得的。

qenerate本身不是客户端。它旨在与其他GQL客户端一起使用。它只关注为给定的查询/片段定义生成相应的类。

免责声明:我在创建qenerate的团队工作。

最新更新