120 lines
3.7 KiB
Python
120 lines
3.7 KiB
Python
import graphene
|
|
from graphene import relay
|
|
from graphene_django.filter import DjangoFilterConnectionField
|
|
from wagtail.models import Locale
|
|
|
|
from api.utils import get_object
|
|
from core.logger import get_logger
|
|
from .connections import TopicConnection, ModuleConnection
|
|
<<<<<<< HEAD
|
|
from .nodes import (
|
|
ContentBlockNode,
|
|
ChapterNode,
|
|
ModuleNode,
|
|
NotFoundFailure,
|
|
SnapshotNode,
|
|
TopicOr404Node,
|
|
)
|
|
from .nodes.module_category import ModuleCategoryNode
|
|
from .nodes.module_level import ModuleLevelNode
|
|
from ..models import Book, Topic, Module, Chapter, Snapshot, ModuleLevel, ModuleCategory
|
|
|
|
logger = get_logger(__name__)
|
|
|
|
|
|
class BookQuery(object):
|
|
node = relay.Node.Field()
|
|
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)
|
|
snapshot = relay.Node.Field(SnapshotNode)
|
|
|
|
topics = relay.ConnectionField(TopicConnection)
|
|
modules = relay.ConnectionField(ModuleConnection)
|
|
chapters = DjangoFilterConnectionField(ChapterNode)
|
|
|
|
module_level = graphene.Field(ModuleLevelNode, id=graphene.ID(required=True))
|
|
module_levels = graphene.List(ModuleLevelNode)
|
|
|
|
module_category = graphene.Field(ModuleCategoryNode, id=graphene.ID(required=True))
|
|
module_categories = graphene.List(ModuleCategoryNode)
|
|
|
|
def resolve_books(self, *args, **kwargs):
|
|
return Book.objects.filter(**kwargs).live()
|
|
|
|
def resolve_topics(self, *args, **kwargs):
|
|
default_locale = Locale.get_default()
|
|
return Topic.objects.live().filter(locale=default_locale)
|
|
|
|
def resolve_modules(self, *args, **kwargs):
|
|
return Module.objects.filter(**kwargs).live()
|
|
|
|
def resolve_chapters(self, *args, **kwargs):
|
|
return Chapter.objects.filter(**kwargs).live()
|
|
|
|
def resolve_snapshot(self, info, **kwargs):
|
|
id = kwargs.get("id")
|
|
snapshot = get_object(Snapshot, id)
|
|
return snapshot
|
|
|
|
def resolve_module(self, info, **kwargs):
|
|
slug = kwargs.get("slug")
|
|
id = kwargs.get("id")
|
|
module = None
|
|
try:
|
|
if id is not None:
|
|
module = get_object(Module, id)
|
|
|
|
elif slug is not None:
|
|
module = Module.objects.get(slug=slug)
|
|
|
|
return module
|
|
|
|
except Module.DoesNotExist:
|
|
return None
|
|
|
|
def resolve_topic(self, info, **kwargs):
|
|
slug = kwargs.get("slug")
|
|
id = kwargs.get("id")
|
|
|
|
if id is not None:
|
|
return get_object(Topic, id)
|
|
if slug is not None:
|
|
try:
|
|
default_locale = Locale.get_default()
|
|
return Topic.objects.get(slug=slug, locale=default_locale)
|
|
except Topic.DoesNotExist:
|
|
return NotFoundFailure
|
|
return None
|
|
|
|
def resolve_module_level(self, info, **kwargs):
|
|
module_level_id = kwargs.get("id")
|
|
try:
|
|
if module_level_id is not None:
|
|
return get_object(Module, module_level_id)
|
|
|
|
except Module.DoesNotExist:
|
|
return None
|
|
|
|
def resolve_module_levels(self, *args, **kwargs):
|
|
return ModuleLevel.objects.all()
|
|
|
|
def resolve_module_category(self, info, **kwargs):
|
|
id = kwargs.get("id")
|
|
try:
|
|
if id is not None:
|
|
return get_object(Module, id)
|
|
|
|
except Module.DoesNotExist:
|
|
return None
|
|
|
|
def resolve_module_categories(self, *args, **kwargs):
|
|
return ModuleCategory.objects.all()
|
|
|
|
|
|
class ModuleTypeQuery(graphene.ObjectType):
|
|
node = relay.Node.Field()
|
|
name = graphene.String()
|
|
id = graphene.ID()
|