石墨烯肾素集成
graphene-pydantic的Python项目详细描述
石墨烯肾素
安装
pip install "graphene-pydantic"
示例
下面是一个简单的pydantic模型:
importpydanticclassPersonModel(pydantic.BaseModel):id:uuid.UUIDfirst_name:strlast_name:str
要为它创建graphql模式,您只需编写以下代码:
importgraphenefromgraphene_pydanticimportPydanticObjectTypeclassPerson(PydanticObjectType):classMeta:model=PersonModel# only return specified fieldsonly_fields=("name",)# exclude specified fieldsexclude_fields=("id",)classQuery(graphene.ObjectType):people=graphene.List(Person)defresolve_people(self,info):returnget_people()# function returning `PersonModel`sschema=graphene.Schema(query=Query)
然后您可以简单地查询模式:
query=''' query { people { firstName, lastName } }'''result=schema.execute(query)
转发声明和循环引用
graphene_pydantic
支持正向声明和循环引用,但在执行graphql查询之前,需要调用resolve_placeholders()
方法以确保类型完全更新。例如:
classNodeModel(BaseModel):id:intname:strlabels:'LabelsModel'classLabelsModel(BaseModel):node:NodeModellabels:typing.List[str]classNode(PydanticObjectType):classMeta:model=NodeModelclassLabels(PydanticObjectType):classMeta:model=LabelsModelNode.resolve_placeholders()# make the `labels` field workLabels.resolve_placeholders()# make the `node` field work
完整示例
请参阅the examples directory了解更多信息。
许可证
这个项目在Apache License之下。
第三方代码
此项目依赖于受Third Party Licenses中所述许可证约束的第三方代码。
贡献
请看Contributing Guide。请注意,您必须在CLA上签名。
注意事项
请注意,尽管pydantic对保存映射的字段(例如字典)非常满意,因为GraphQL's type system doesn't have them这些字段不能导出为石墨烯类型。例如,这将失败,并出现错误Don't know how to handle mappings in Graphene
:
importtypingfromgraphene_pydanticimportPydanticObjectTypeclassPet:passclassPerson:name:strpets_by_name:typing.Dict[str,Pet]classGraphQLPerson(PydanticObjectType):classMeta:model=Person
但是,请注意,如果使用exclude_fields
或only_fields
排除这些值,则不会有问题:
classGraphQLPerson(PydanticObjectType):classMeta:model=Personexclude_fields=("pets_by_name",)