Add 404 type response to topic query
This commit is contained in:
parent
3278774876
commit
6e1501f33b
|
|
@ -6,6 +6,11 @@ from graphene_django.filter import DjangoFilterConnectionField
|
||||||
from books.models import Topic, Module
|
from books.models import Topic, Module
|
||||||
from books.schema.nodes import ModuleNode
|
from books.schema.nodes import ModuleNode
|
||||||
|
|
||||||
|
NOT_FOUND = { 'reason': 'Not Found'}
|
||||||
|
|
||||||
|
class NotFound(graphene.ObjectType):
|
||||||
|
reason = graphene.String()
|
||||||
|
|
||||||
|
|
||||||
class TopicNode(DjangoObjectType):
|
class TopicNode(DjangoObjectType):
|
||||||
pk = graphene.Int()
|
pk = graphene.Int()
|
||||||
|
|
@ -27,3 +32,14 @@ class TopicNode(DjangoObjectType):
|
||||||
|
|
||||||
def resolve_modules(self, *args, **kwargs):
|
def resolve_modules(self, *args, **kwargs):
|
||||||
return Module.get_by_parent(self)
|
return Module.get_by_parent(self)
|
||||||
|
|
||||||
|
|
||||||
|
class TopicOr404Node(graphene.Union):
|
||||||
|
class Meta:
|
||||||
|
types = (TopicNode, NotFound)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def resolve_type(cls, instance, info):
|
||||||
|
if type(instance).__name__ == "Topic":
|
||||||
|
return TopicNode
|
||||||
|
return NotFound
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ from graphene_django.filter import DjangoFilterConnectionField
|
||||||
from api.utils import get_object
|
from api.utils import get_object
|
||||||
from core.logger import get_logger
|
from core.logger import get_logger
|
||||||
from .connections import TopicConnection, ModuleConnection
|
from .connections import TopicConnection, ModuleConnection
|
||||||
from .nodes import ContentBlockNode, ChapterNode, ModuleNode, TopicNode, SnapshotNode
|
from .nodes import ContentBlockNode, ChapterNode, ModuleNode, NOT_FOUND, TopicNode, SnapshotNode, TopicOr404Node
|
||||||
from ..models import Book, Topic, Module, Chapter, Snapshot
|
from ..models import Book, Topic, Module, Chapter, Snapshot
|
||||||
|
|
||||||
logger = get_logger(__name__)
|
logger = get_logger(__name__)
|
||||||
|
|
@ -13,7 +13,7 @@ logger = get_logger(__name__)
|
||||||
|
|
||||||
class BookQuery(object):
|
class BookQuery(object):
|
||||||
node = relay.Node.Field()
|
node = relay.Node.Field()
|
||||||
topic = graphene.Field(TopicNode, slug=graphene.String())
|
topic = graphene.Field(TopicOr404Node, slug=graphene.String())
|
||||||
module = graphene.Field(ModuleNode, slug=graphene.String(), id=graphene.ID())
|
module = graphene.Field(ModuleNode, slug=graphene.String(), id=graphene.ID())
|
||||||
chapter = relay.Node.Field(ChapterNode)
|
chapter = relay.Node.Field(ChapterNode)
|
||||||
content_block = relay.Node.Field(ContentBlockNode)
|
content_block = relay.Node.Field(ContentBlockNode)
|
||||||
|
|
@ -63,5 +63,8 @@ class BookQuery(object):
|
||||||
if id is not None:
|
if id is not None:
|
||||||
return get_object(Topic, id)
|
return get_object(Topic, id)
|
||||||
if slug is not None:
|
if slug is not None:
|
||||||
return Topic.objects.get(slug=slug)
|
try:
|
||||||
|
return Topic.objects.get(slug=slug)
|
||||||
|
except Topic.DoesNotExist:
|
||||||
|
return NOT_FOUND
|
||||||
return None
|
return None
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue