使用类似猫鼬的模式为石墨烯编写类似阿波罗的解析器。

graphene-resolver的Python项目详细描述


石墨烯分解器

build statusversionpython versionwheelmaintenanceConventional Commits

用类猫鼬模式编写类阿波罗的解析器。在

安装

pip install graphene-resolver

使用

简单示例:

importgrapheneimportgraphene_resolverasresolverclassFoo(resolver.Resolver):schema={"args":{"key":'String!',"value":'String!',},"type":'String!',}defresolve(self,**kwargs):self.parent# parent fieldself.info# resolve infoself.context# resolve contextreturnkwargs['value']classQuery(graphene.ObjectType):foo=Foo.as_field()
^{pr2}$
{"foo":"v"}

中继节点:

pets=[dict(id=1,name='pet1',age=1,)]classPet(resolver.Resolver):schema={'type':{'name':'String','age':'Int',},'interfaces':(graphene.Node,)}defget_node(self,id_):returnnext(iforiinpetsifi['id']==int(id_))defvalidate(self,value):return(isinstance(value,typing.Mapping)andisinstance(value.get('name'),str)andisinstance(value.get('age'),int))classQuery(graphene.ObjectType):node=graphene.Node.Field()schema=graphene.Schema(query=Query,types=[Pet.as_type()])
{
  node(id: "UGV0OjE=") {
    id
    __typename
    ... on Pet {
      name
      age
    }
  }
}
{"node":{"id":"UGV0OjE=","__typename":"Pet","name":"pet1","age":1}}

继电器连接:

classItem(resolver.Resolver):schema={'name':'String!'}classItems(resolver.Resolver):schema=resolver.connection.get_type(Item)defresolve(self,**kwargs):returnresolver.connection.resolve([{'name':'a'},{'name':'b'}],**kwargs)
{
  items {
    edges {
      node {
        name
      }
      cursor
    }
    pageInfo {
      total
      hasNextPage
      hasPreviousPage
      startCursor
      endCursor
    }
  }
}
{"items":{"edges":[{"node":{"name":"a"},"cursor":"YXJyYXljb25uZWN0aW9uOjA="},{"node":{"name":"b"},"cursor":"YXJyYXljb25uZWN0aW9uOjE="}],"pageInfo":{"total":2,"hasNextPage":false,"hasPreviousPage":false,"startCursor":"YXJyYXljb25uZWN0aW9uOjA=","endCursor":"YXJyYXljb25uZWN0aW9uOjE="}}}

枚举:

classFoo(resolver.Resolver):schema=('a','b')defresolve(self,**kwargs):return'a'classQuery(graphene.ObjectType):foo=Foo.as_field()schema=graphene.Schema(query=Query)assertstr(schema)=='''\schema {  query: Query}enum Foo {  a  b}type Query {  foo: Foo}'''

带说明的枚举:

classFoo(resolver.Resolver):schema={'type':[('a','this is a'),('b','this is b'),'c'],'description':'A enum',}defresolve(self,**kwargs):return'a'classQuery(graphene.ObjectType):foo=Foo.as_field()schema=graphene.Schema(query=Query)enum_type=schema.get_type('Foo')assertenum_type.description=='A enum'assertenum_type.get_value('a').value=='a'assertenum_type.get_value('a').description=='this is a'assertenum_type.get_value('b').value=='b'assertenum_type.get_value('b').description=='this is b'assertenum_type.get_value('c').value=='c'assertenum_type.get_value('c').descriptionisNone

工会:

classFoo(resolver.Resolver):schema=({'a':'String'},{'b':'Int'})defresolve(self,**kwargs):return{'__typename':'Foo0','a':'a'}classQuery(graphene.ObjectType):foo=Foo.as_field()schema=graphene.Schema(query=Query)assertstr(schema)=='''\schema {  query: Query}union Foo = Foo0 | Foo1type Foo0 {  a: String}type Foo1 {  b: Int}type Query {  foo: Foo}'''
{
  foo {
    __typename
    ... on Foo0 {
      a
    }
  }
}
{"foo":{"__typename":"Foo0","a":"a"}}

复杂的例子:

classFoo(resolver.Resolver):_input_schema={"type":{"type":'String'},"data":[{"type":{"key":{"type":'String',"required":True,"description":"<description>",},"value":'Int',"extra":{"type":['String!'],"deprecation_reason":"<deprecated>"},},"required":True},],}schema={"args":{"input":_input_schema},"type":_input_schema,"description":"description","deprecation_reason":None}defresolve(self,**kwargs):returnkwargs['input']
{
  foo(
    input: { type: "type", data: [{ key: "key", value: 42, extra: ["extra"] }] }
  ) {
    type
    data {
      key
      value
      extra
    }
  }
}
{"foo":{"type":"type","data":[{"key":"key","value":42,"extra":["extra"]}]}}

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Maven中的java,为什么要运行“mvn clean”?   java会降低图像质量。OutOfMemory异常Android   在Java8中将函数传递到流的过滤方法   jboss6。x java。lang.NoClassDefFoundError,当我将<listenerclass>包含到web时。xml java   java读取图像像素时,像素Alpha始终为255   java在迭代后跳过一行   java如何创建我自己的单链表   意图上的java空指针异常。getStringExtra.:安卓   具有连接实体的java Hibernate onetoone映射   java需要帮助在自制的仓鼠模拟器上实现启动/恢复/暂停/停止线程操作   如何测试非主方法?[Java,IntelliJ]   java jdbc自动提交(false)不起作用   java在JADE中的同一容器中创建多个代理   java OkHttp获取失败的响应正文   java Webdriver flash按钮