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.schema.nodes import ModuleNode
|
||||
|
||||
NOT_FOUND = { 'reason': 'Not Found'}
|
||||
|
||||
class NotFound(graphene.ObjectType):
|
||||
reason = graphene.String()
|
||||
|
||||
|
||||
class TopicNode(DjangoObjectType):
|
||||
pk = graphene.Int()
|
||||
|
|
@ -27,3 +32,14 @@ class TopicNode(DjangoObjectType):
|
|||
|
||||
def resolve_modules(self, *args, **kwargs):
|
||||
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 core.logger import get_logger
|
||||
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
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
|
@ -13,7 +13,7 @@ logger = get_logger(__name__)
|
|||
|
||||
class BookQuery(object):
|
||||
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())
|
||||
chapter = relay.Node.Field(ChapterNode)
|
||||
content_block = relay.Node.Field(ContentBlockNode)
|
||||
|
|
@ -63,5 +63,8 @@ class BookQuery(object):
|
|||
if id is not None:
|
||||
return get_object(Topic, id)
|
||||
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
|
||||
|
|
|
|||
Loading…
Reference in New Issue