import graphene from graphene import resolve_only_args, relay from graphene.contrib.django import ( DjangoObjectType, DjangoNode ) from .models import ( Ship as ShipModel, Faction as FactionModel, Character as CharacterModel) from .data import ( getFaction, getShip, getShips, getRebels, getEmpire, ) schema = graphene.Schema(name='Starwars Django Relay Schema') class Ship(DjangoNode): class Meta: model = ShipModel @classmethod def get_node(cls, id): return Ship(getShip(id)) @schema.register class CharacterModel(DjangoObjectType): class Meta: model = CharacterModel class Faction(DjangoNode): class Meta: model = FactionModel @classmethod def get_node(cls, id): return Faction(getFaction(id)) class Query(graphene.ObjectType): rebels = graphene.Field(Faction) empire = graphene.Field(Faction) node = relay.NodeField() ships = relay.ConnectionField(Ship, description='All the ships.') @resolve_only_args def resolve_ships(self): return [Ship(s) for s in getShips()] @resolve_only_args def resolve_rebels(self): return Faction(getRebels()) @resolve_only_args def resolve_empire(self): return Faction(getEmpire()) schema.query = Query