我有一个从服务器定义的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也是如此。
我已经看了:
codegen,这对typescript来说太棒了!但不支持python:/
gql_schema_codegen很好,但生成不是数据类的
TypedDict
,我必须更改每个dict并传递total=False
,这样默认情况下就不需要所有字段。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的团队工作。