mirror of
https://github.com/graphql-python/graphene.git
synced 2024-11-22 17:46:57 +03:00
Added test relay schema
This commit is contained in:
parent
9a84d595a1
commit
cd216447c2
|
@ -1,47 +1,49 @@
|
||||||
import graphene
|
import graphene
|
||||||
from graphene import resolve_only_args
|
from graphene import resolve_only_args, relay
|
||||||
|
|
||||||
from .data import getHero, getHuman, getCharacter, getDroid, Human as _Human, Droid as _Droid
|
from .data import (
|
||||||
|
getHero, getHuman, getCharacter, getDroid,
|
||||||
|
Human as _Human, Droid as _Droid)
|
||||||
|
|
||||||
Episode = graphene.Enum('Episode', dict(
|
Episode = graphene.Enum('Episode', dict(
|
||||||
NEWHOPE = 4,
|
NEWHOPE=4,
|
||||||
EMPIRE = 5,
|
EMPIRE=5,
|
||||||
JEDI = 6
|
JEDI=6
|
||||||
))
|
))
|
||||||
|
|
||||||
|
|
||||||
def wrap_character(character):
|
def wrap_character(character):
|
||||||
if isinstance(character, _Human):
|
if isinstance(character, _Human):
|
||||||
return Human(character)
|
return Human(character)
|
||||||
elif isinstance(character, _Droid):
|
elif isinstance(character, _Droid):
|
||||||
return Droid(character)
|
return Droid(character)
|
||||||
|
|
||||||
|
|
||||||
class Character(graphene.Interface):
|
class Character(graphene.Interface):
|
||||||
id = graphene.IDField()
|
|
||||||
name = graphene.StringField()
|
name = graphene.StringField()
|
||||||
friends = graphene.ListField('self')
|
friends = relay.Connection('self')
|
||||||
appearsIn = graphene.ListField(Episode)
|
appearsIn = graphene.ListField(Episode)
|
||||||
|
|
||||||
def resolve_friends(self, args, *_):
|
def resolve_friends(self, args, *_):
|
||||||
return [wrap_character(getCharacter(f)) for f in self.instance.friends]
|
return [wrap_character(getCharacter(f)) for f in self.instance.friends]
|
||||||
|
|
||||||
class Human(Character):
|
|
||||||
|
class Human(relay.Node, Character):
|
||||||
homePlanet = graphene.StringField()
|
homePlanet = graphene.StringField()
|
||||||
|
|
||||||
|
|
||||||
class Droid(Character):
|
class Droid(relay.Node, Character):
|
||||||
primaryFunction = graphene.StringField()
|
primaryFunction = graphene.StringField()
|
||||||
|
|
||||||
|
|
||||||
class Query(graphene.ObjectType):
|
class Query(graphene.ObjectType):
|
||||||
hero = graphene.Field(Character,
|
hero = graphene.Field(Character,
|
||||||
episode = graphene.Argument(Episode)
|
episode=graphene.Argument(Episode))
|
||||||
)
|
|
||||||
human = graphene.Field(Human,
|
human = graphene.Field(Human,
|
||||||
id = graphene.Argument(graphene.String)
|
id=graphene.Argument(graphene.String))
|
||||||
)
|
|
||||||
droid = graphene.Field(Droid,
|
droid = graphene.Field(Droid,
|
||||||
id = graphene.Argument(graphene.String)
|
id=graphene.Argument(graphene.String))
|
||||||
)
|
node = graphene.Field(relay.Node)
|
||||||
|
|
||||||
@resolve_only_args
|
@resolve_only_args
|
||||||
def resolve_hero(self, episode):
|
def resolve_hero(self, episode):
|
||||||
|
@ -50,8 +52,6 @@ class Query(graphene.ObjectType):
|
||||||
@resolve_only_args
|
@resolve_only_args
|
||||||
def resolve_human(self, id):
|
def resolve_human(self, id):
|
||||||
return wrap_character(getHuman(id))
|
return wrap_character(getHuman(id))
|
||||||
if human:
|
|
||||||
return Human(human)
|
|
||||||
|
|
||||||
@resolve_only_args
|
@resolve_only_args
|
||||||
def resolve_droid(self, id):
|
def resolve_droid(self, id):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user