我有一个从服务器定义的 GraphQL 架构,我想为其编写一个漂亮的 Python GraphQL 客户端。我正在寻找一种方法将我的 GraphQL 模式转换为带有类型提示的 python 类,这样我就能够看到所有可用的查询、突变、它们的字段(名称和类型)并返回值。
由于模式复杂性,我无法手动编写所有 python 类,每个字段都有很多过滤器。请参阅 ent on TodoWhereInput
上的
this example以了解如何删除错误。我真的很喜欢使用
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]
模式中的
Input
相同。
我已经看过了:
codegen 对于打字稿来说非常棒!但没有 python 支持:/
gql_schema_codegen很好,但是生成不是数据类的
TypedDict
,我必须更改每个字典并传递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/
现在可以了! 即将添加新设置以实现更灵活的生成:
https://countries.trevorblades.com/架构和 gql 客户端的简单示例: https://denisart.github.io/graphql2python/gql.html
此外,我们还可以使用该包通过 python 类生成 GraphQL 查询qenerate 中找到。它为查询创建简单的数据类,甚至支持使用片段来减少重复的类生成。该模式是通过利用 GraphQL 的 Introspection 功能获得的。
qenerate 本身不是客户端。它旨在与其他 GQL 客户端一起使用。它仅专注于为给定的查询/片段定义生成相应的类。免责声明:我在创建 qenerate 的团队中工作。
sgqlc 可以生成架构和代码并执行查询。