Refactor schema definitions to use less direct imports
This prevents some circular import issues
This commit is contained in:
parent
afc415dc8a
commit
7cf192f132
|
|
@ -1,27 +1,28 @@
|
||||||
import graphene
|
import graphene
|
||||||
from graphene import relay
|
|
||||||
from graphene_django import DjangoObjectType
|
|
||||||
|
|
||||||
from api.graphene_wagtail import GenericStreamFieldType
|
from api.graphene_wagtail import GenericStreamFieldType
|
||||||
from api.utils import get_object
|
from api.utils import get_object
|
||||||
|
from graphene import relay
|
||||||
|
from graphene_django import DjangoObjectType
|
||||||
from notes.models import InstrumentBookmark
|
from notes.models import InstrumentBookmark
|
||||||
from notes.schema import InstrumentBookmarkNode
|
|
||||||
from .models import BasicKnowledge, InstrumentCategory, InstrumentType
|
from .models import BasicKnowledge, InstrumentCategory, InstrumentType
|
||||||
|
|
||||||
|
|
||||||
class InstrumentCategoryNode(DjangoObjectType):
|
class InstrumentCategoryNode(DjangoObjectType):
|
||||||
types = graphene.List('basicknowledge.queries.InstrumentTypeNode')
|
types = graphene.List("basicknowledge.queries.InstrumentTypeNode")
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = InstrumentCategory
|
model = InstrumentCategory
|
||||||
interfaces = (relay.Node,)
|
interfaces = (relay.Node,)
|
||||||
only_fields = [
|
only_fields = ["name", "foreground", "background", "id"]
|
||||||
'name', 'foreground', 'background', 'id'
|
|
||||||
]
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def resolve_types(root: InstrumentCategory, info, **kwargs):
|
def resolve_types(root: InstrumentCategory, info, **kwargs):
|
||||||
return root.instrument_types.filter(instruments__isnull=False).order_by('name').distinct()
|
return (
|
||||||
|
root.instrument_types.filter(instruments__isnull=False)
|
||||||
|
.order_by("name")
|
||||||
|
.distinct()
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class InstrumentTypeNode(DjangoObjectType):
|
class InstrumentTypeNode(DjangoObjectType):
|
||||||
|
|
@ -31,9 +32,7 @@ class InstrumentTypeNode(DjangoObjectType):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = InstrumentType
|
model = InstrumentType
|
||||||
interfaces = (relay.Node,)
|
interfaces = (relay.Node,)
|
||||||
only_fields = [
|
only_fields = ["name", "category", "type", "id"]
|
||||||
'name', 'category', 'type', 'id'
|
|
||||||
]
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def resolve_type(root: InstrumentType, info, **kwargs):
|
def resolve_type(root: InstrumentType, info, **kwargs):
|
||||||
|
|
@ -41,17 +40,21 @@ class InstrumentTypeNode(DjangoObjectType):
|
||||||
|
|
||||||
|
|
||||||
class InstrumentNode(DjangoObjectType):
|
class InstrumentNode(DjangoObjectType):
|
||||||
bookmarks = graphene.List(InstrumentBookmarkNode)
|
bookmarks = graphene.List("notes.schema.InstrumentBookmarkNode")
|
||||||
type = graphene.Field(InstrumentTypeNode)
|
type = graphene.Field(InstrumentTypeNode)
|
||||||
contents = GenericStreamFieldType()
|
contents = GenericStreamFieldType()
|
||||||
language = graphene.String()
|
language = graphene.String()
|
||||||
|
highlights = graphene.List("notes.schema.HighlightNode")
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = BasicKnowledge
|
model = BasicKnowledge
|
||||||
filter_fields = ['slug']
|
filter_fields = ["slug"]
|
||||||
interfaces = (relay.Node,)
|
interfaces = (relay.Node,)
|
||||||
only_fields = [
|
only_fields = [
|
||||||
'slug', 'title', 'intro', 'contents',
|
"slug",
|
||||||
|
"title",
|
||||||
|
"intro",
|
||||||
|
"contents",
|
||||||
]
|
]
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
@ -60,23 +63,28 @@ class InstrumentNode(DjangoObjectType):
|
||||||
|
|
||||||
def resolve_bookmarks(self, info, **kwargs):
|
def resolve_bookmarks(self, info, **kwargs):
|
||||||
return InstrumentBookmark.objects.filter(
|
return InstrumentBookmark.objects.filter(
|
||||||
user=info.context.user,
|
user=info.context.user, instrument=self
|
||||||
instrument=self
|
|
||||||
)
|
)
|
||||||
|
|
||||||
def resolve_language(self, info, **kwargs):
|
def resolve_language(self, info, **kwargs):
|
||||||
return self.locale.language_code
|
return self.locale.language_code
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def resolve_highlights(root: BasicKnowledge, info, **kwargs):
|
||||||
|
return root.highlights.filter(user=info.context.user)
|
||||||
|
|
||||||
|
|
||||||
class InstrumentQuery(object):
|
class InstrumentQuery(object):
|
||||||
instrument = graphene.Field(InstrumentNode, slug=graphene.String(), id=graphene.ID())
|
instrument = graphene.Field(
|
||||||
|
InstrumentNode, slug=graphene.String(), id=graphene.ID()
|
||||||
|
)
|
||||||
instruments = graphene.List(InstrumentNode)
|
instruments = graphene.List(InstrumentNode)
|
||||||
instrument_types = graphene.List(InstrumentTypeNode)
|
instrument_types = graphene.List(InstrumentTypeNode)
|
||||||
instrument_categories = graphene.List(InstrumentCategoryNode)
|
instrument_categories = graphene.List(InstrumentCategoryNode)
|
||||||
|
|
||||||
def resolve_instrument(self, info, **kwargs):
|
def resolve_instrument(self, info, **kwargs):
|
||||||
slug = kwargs.get('slug')
|
slug = kwargs.get("slug")
|
||||||
instrument_id = kwargs.get('id')
|
instrument_id = kwargs.get("id")
|
||||||
|
|
||||||
if instrument_id is not None:
|
if instrument_id is not None:
|
||||||
return get_object(BasicKnowledge, instrument_id)
|
return get_object(BasicKnowledge, instrument_id)
|
||||||
|
|
@ -85,10 +93,14 @@ class InstrumentQuery(object):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def resolve_instruments(self, info, **kwargs):
|
def resolve_instruments(self, info, **kwargs):
|
||||||
return BasicKnowledge.objects.all().order_by('title').live()
|
return BasicKnowledge.objects.all().order_by("title").live()
|
||||||
|
|
||||||
def resolve_instrument_types(self, info, **kwargs):
|
def resolve_instrument_types(self, info, **kwargs):
|
||||||
return InstrumentType.objects.filter(instruments__isnull=False).order_by('name').distinct()
|
return (
|
||||||
|
InstrumentType.objects.filter(instruments__isnull=False)
|
||||||
|
.order_by("name")
|
||||||
|
.distinct()
|
||||||
|
)
|
||||||
|
|
||||||
def resolve_instrument_categories(self, info, **kwargs):
|
def resolve_instrument_categories(self, info, **kwargs):
|
||||||
return InstrumentCategory.objects.all().order_by('name')
|
return InstrumentCategory.objects.all().order_by("name")
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,14 @@
|
||||||
import graphene
|
import graphene
|
||||||
|
from books.models import Chapter, ContentBlock
|
||||||
|
from books.schema.interfaces import ChapterInterface
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from graphene import relay
|
from graphene import relay
|
||||||
from graphene_django import DjangoObjectType
|
from graphene_django import DjangoObjectType
|
||||||
|
|
||||||
from books.models import Chapter, ContentBlock
|
|
||||||
from books.schema.interfaces import ChapterInterface
|
|
||||||
from notes.models import ChapterBookmark
|
from notes.models import ChapterBookmark
|
||||||
from notes.schema import ChapterBookmarkNode
|
|
||||||
|
|
||||||
|
|
||||||
class ChapterNode(DjangoObjectType):
|
class ChapterNode(DjangoObjectType):
|
||||||
bookmark = graphene.Field(ChapterBookmarkNode)
|
bookmark = graphene.Field("notes.schema.ChapterBookmarkNode")
|
||||||
content_blocks = graphene.List("books.schema.nodes.ContentBlockNode")
|
content_blocks = graphene.List("books.schema.nodes.ContentBlockNode")
|
||||||
title_hidden_for = graphene.List("users.schema.SchoolClassNode")
|
title_hidden_for = graphene.List("users.schema.SchoolClassNode")
|
||||||
description_hidden_for = graphene.List("users.schema.SchoolClassNode")
|
description_hidden_for = graphene.List("users.schema.SchoolClassNode")
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,13 @@
|
||||||
import graphene
|
import graphene
|
||||||
from graphene import relay
|
|
||||||
from graphene_django import DjangoObjectType
|
|
||||||
|
|
||||||
from basicknowledge.models import BasicKnowledge
|
from basicknowledge.models import BasicKnowledge
|
||||||
from basicknowledge.queries import InstrumentCategoryNode
|
|
||||||
from books.models import ContentBlock
|
from books.models import ContentBlock
|
||||||
from books.schema.interfaces.contentblock import ContentBlockInterface
|
from books.schema.interfaces.contentblock import ContentBlockInterface
|
||||||
from books.utils import are_solutions_enabled_for
|
from books.utils import are_solutions_enabled_for
|
||||||
from core.logger import get_logger
|
from core.logger import get_logger
|
||||||
from core.mixins import HiddenAndVisibleForMixin
|
from core.mixins import HiddenAndVisibleForMixin
|
||||||
|
from graphene import relay
|
||||||
|
from graphene_django import DjangoObjectType
|
||||||
from notes.models import ContentBlockBookmark
|
from notes.models import ContentBlockBookmark
|
||||||
from notes.schema import ContentBlockBookmarkNode, HighlightNode
|
|
||||||
from rooms.models import ModuleRoomSlug
|
from rooms.models import ModuleRoomSlug
|
||||||
|
|
||||||
logger = get_logger(__name__)
|
logger = get_logger(__name__)
|
||||||
|
|
@ -42,11 +39,13 @@ def is_solution_and_hidden_for_user(type, user, module):
|
||||||
|
|
||||||
class ContentBlockNode(DjangoObjectType, HiddenAndVisibleForMixin):
|
class ContentBlockNode(DjangoObjectType, HiddenAndVisibleForMixin):
|
||||||
mine = graphene.Boolean()
|
mine = graphene.Boolean()
|
||||||
bookmarks = graphene.List(ContentBlockBookmarkNode)
|
bookmarks = graphene.List("notes.schema.ContentBlockBookmarkNode")
|
||||||
original_creator = graphene.Field("users.schema.PublicUserNode")
|
original_creator = graphene.Field("users.schema.PublicUserNode")
|
||||||
instrument_category = graphene.Field(InstrumentCategoryNode)
|
instrument_category = graphene.Field(
|
||||||
|
"basicknowledge.queries.InstrumentCategoryNode"
|
||||||
|
)
|
||||||
path = graphene.String()
|
path = graphene.String()
|
||||||
highlights = graphene.List(HighlightNode)
|
highlights = graphene.List("notes.schema.HighlightNode")
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ContentBlock
|
model = ContentBlock
|
||||||
|
|
|
||||||
|
|
@ -1,27 +1,16 @@
|
||||||
import graphene
|
import graphene
|
||||||
from django.db.models import Q
|
|
||||||
from graphene import relay
|
|
||||||
from graphene_django import DjangoObjectType
|
|
||||||
from graphene_django.filter import DjangoFilterConnectionField
|
|
||||||
|
|
||||||
from assignments.models import StudentSubmission
|
from assignments.models import StudentSubmission
|
||||||
from assignments.schema.types import AssignmentNode, StudentSubmissionNode
|
from assignments.schema.types import AssignmentNode, StudentSubmissionNode
|
||||||
from books.models import (
|
from books.models import Chapter, ContentBlock, Module, RecentModule
|
||||||
Module,
|
|
||||||
Chapter,
|
|
||||||
ContentBlock,
|
|
||||||
RecentModule,
|
|
||||||
)
|
|
||||||
from books.schema.interfaces.module import ModuleInterface
|
from books.schema.interfaces.module import ModuleInterface
|
||||||
from books.schema.nodes.chapter import ChapterNode
|
from books.schema.nodes.chapter import ChapterNode
|
||||||
from books.schema.nodes.module_category import ModuleCategoryNode
|
from books.schema.nodes.module_category import ModuleCategoryNode
|
||||||
from books.schema.nodes.module_level import ModuleLevelNode
|
from books.schema.nodes.module_level import ModuleLevelNode
|
||||||
from notes.models import ModuleBookmark, ContentBlockBookmark, ChapterBookmark
|
from django.db.models import Q
|
||||||
from notes.schema import (
|
from graphene import relay
|
||||||
ModuleBookmarkNode,
|
from graphene_django import DjangoObjectType
|
||||||
ContentBlockBookmarkNode,
|
from graphene_django.filter import DjangoFilterConnectionField
|
||||||
ChapterBookmarkNode,
|
from notes.models import ChapterBookmark, ContentBlockBookmark, ModuleBookmark
|
||||||
)
|
|
||||||
from objectives.schema import ObjectiveGroupNode
|
from objectives.schema import ObjectiveGroupNode
|
||||||
from surveys.models import Answer
|
from surveys.models import Answer
|
||||||
from surveys.schema import AnswerNode
|
from surveys.schema import AnswerNode
|
||||||
|
|
@ -52,11 +41,15 @@ class ModuleNode(DjangoObjectType):
|
||||||
|
|
||||||
chapters = graphene.List(ChapterNode)
|
chapters = graphene.List(ChapterNode)
|
||||||
solutions_enabled = graphene.Boolean()
|
solutions_enabled = graphene.Boolean()
|
||||||
bookmark = graphene.Field(ModuleBookmarkNode)
|
bookmark = graphene.Field("notes.schema.ModuleBookmarkNode")
|
||||||
my_submissions = DjangoFilterConnectionField(StudentSubmissionNode)
|
my_submissions = DjangoFilterConnectionField(StudentSubmissionNode)
|
||||||
my_answers = DjangoFilterConnectionField(AnswerNode)
|
my_answers = DjangoFilterConnectionField(AnswerNode)
|
||||||
my_content_bookmarks = DjangoFilterConnectionField(ContentBlockBookmarkNode)
|
my_content_bookmarks = DjangoFilterConnectionField(
|
||||||
my_chapter_bookmarks = DjangoFilterConnectionField(ChapterBookmarkNode)
|
"notes.schema.ContentBlockBookmarkNode"
|
||||||
|
)
|
||||||
|
my_chapter_bookmarks = DjangoFilterConnectionField(
|
||||||
|
"notes.schema.ChapterBookmarkNode"
|
||||||
|
)
|
||||||
snapshots = graphene.List("books.schema.nodes.SnapshotNode")
|
snapshots = graphene.List("books.schema.nodes.SnapshotNode")
|
||||||
objective_groups = graphene.List(ObjectiveGroupNode)
|
objective_groups = graphene.List(ObjectiveGroupNode)
|
||||||
assignments = graphene.List(AssignmentNode)
|
assignments = graphene.List(AssignmentNode)
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
import graphene
|
import graphene
|
||||||
|
from books.models import Module, Topic
|
||||||
|
from books.schema.nodes import ModuleNode
|
||||||
from graphene import relay
|
from graphene import relay
|
||||||
from graphene_django import DjangoObjectType
|
from graphene_django import DjangoObjectType
|
||||||
from graphene_django.filter import DjangoFilterConnectionField
|
from graphene_django.filter import DjangoFilterConnectionField
|
||||||
|
|
||||||
from books.models import Topic, Module
|
|
||||||
from books.schema.nodes import ModuleNode
|
|
||||||
|
|
||||||
|
|
||||||
class NotFoundFailure:
|
class NotFoundFailure:
|
||||||
reason = "Not Found"
|
reason = "Not Found"
|
||||||
|
|
@ -17,7 +16,7 @@ class NotFound(graphene.ObjectType):
|
||||||
|
|
||||||
class TopicNode(DjangoObjectType):
|
class TopicNode(DjangoObjectType):
|
||||||
pk = graphene.Int()
|
pk = graphene.Int()
|
||||||
modules = DjangoFilterConnectionField(ModuleNode)
|
modules = DjangoFilterConnectionField("books.schema.nodes.ModuleNode")
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Topic
|
model = Topic
|
||||||
|
|
|
||||||
|
|
@ -1,43 +1,44 @@
|
||||||
import graphene
|
import graphene
|
||||||
|
from api.utils import get_object
|
||||||
|
from core.logger import get_logger
|
||||||
from graphene import relay
|
from graphene import relay
|
||||||
from graphene_django.filter import DjangoFilterConnectionField
|
from graphene_django.filter import DjangoFilterConnectionField
|
||||||
from wagtail.models import Locale
|
from wagtail.models import Locale
|
||||||
|
|
||||||
from api.utils import get_object
|
from ..models import Book, Chapter, Module, ModuleCategory, ModuleLevel, Snapshot, Topic
|
||||||
from core.logger import get_logger
|
from .connections import ModuleConnection, TopicConnection
|
||||||
from .connections import TopicConnection, ModuleConnection
|
|
||||||
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__)
|
logger = get_logger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class BookQuery(object):
|
class BookQuery(object):
|
||||||
node = relay.Node.Field()
|
node = relay.Node.Field()
|
||||||
topic = graphene.Field(TopicOr404Node, slug=graphene.String())
|
topic = graphene.Field(
|
||||||
module = graphene.Field(ModuleNode, slug=graphene.String(), id=graphene.ID())
|
"books.schema.nodes.topic.TopicOr404Node", slug=graphene.String()
|
||||||
chapter = relay.Node.Field(ChapterNode)
|
)
|
||||||
content_block = relay.Node.Field(ContentBlockNode)
|
module = graphene.Field(
|
||||||
snapshot = relay.Node.Field(SnapshotNode)
|
"books.schema.nodes.module.ModuleNode", slug=graphene.String(), id=graphene.ID()
|
||||||
|
)
|
||||||
|
chapter = relay.Node.Field("books.schema.nodes.chapter.ChapterNode")
|
||||||
|
content_block = relay.Node.Field("books.schema.nodes.content.ContentBlockNode")
|
||||||
|
snapshot = relay.Node.Field("books.schema.nodes.snapshot.SnapshotNode")
|
||||||
|
|
||||||
topics = relay.ConnectionField(TopicConnection)
|
topics = relay.ConnectionField(TopicConnection)
|
||||||
modules = relay.ConnectionField(ModuleConnection)
|
modules = relay.ConnectionField(ModuleConnection)
|
||||||
chapters = DjangoFilterConnectionField(ChapterNode)
|
chapters = DjangoFilterConnectionField("books.schema.nodes.chapter.ChapterNode")
|
||||||
|
|
||||||
module_level = graphene.Field(ModuleLevelNode, id=graphene.ID(required=True))
|
module_level = graphene.Field(
|
||||||
module_levels = graphene.List(ModuleLevelNode)
|
"books.schema.nodes.module_level.ModuleLevelNode", id=graphene.ID(required=True)
|
||||||
|
)
|
||||||
|
module_levels = graphene.List("books.schema.nodes.module_level.ModuleLevelNode")
|
||||||
|
|
||||||
module_category = graphene.Field(ModuleCategoryNode, id=graphene.ID(required=True))
|
module_category = graphene.Field(
|
||||||
module_categories = graphene.List(ModuleCategoryNode)
|
"books.schema.nodes.module_category.ModuleCategoryNode",
|
||||||
|
id=graphene.ID(required=True),
|
||||||
|
)
|
||||||
|
module_categories = graphene.List(
|
||||||
|
"books.schema.nodes.module_category.ModuleCategoryNode"
|
||||||
|
)
|
||||||
|
|
||||||
def resolve_books(self, *args, **kwargs):
|
def resolve_books(self, *args, **kwargs):
|
||||||
return Book.objects.filter(**kwargs).live()
|
return Book.objects.filter(**kwargs).live()
|
||||||
|
|
@ -84,6 +85,8 @@ class BookQuery(object):
|
||||||
default_locale = Locale.get_default()
|
default_locale = Locale.get_default()
|
||||||
return Topic.objects.get(slug=slug, locale=default_locale)
|
return Topic.objects.get(slug=slug, locale=default_locale)
|
||||||
except Topic.DoesNotExist:
|
except Topic.DoesNotExist:
|
||||||
|
from books.schema.nodes.topic import NotFoundFailure
|
||||||
|
|
||||||
return NotFoundFailure
|
return NotFoundFailure
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,7 @@
|
||||||
import graphene
|
import graphene
|
||||||
from graphene_django.filter import DjangoFilterConnectionField
|
|
||||||
|
|
||||||
from basicknowledge.models import BasicKnowledge
|
from basicknowledge.models import BasicKnowledge
|
||||||
from basicknowledge.queries import InstrumentNode
|
|
||||||
from books.models import Module
|
from books.models import Module
|
||||||
from books.schema.queries import ModuleNode
|
from graphene_django.filter import DjangoFilterConnectionField
|
||||||
from users.models import User
|
from users.models import User
|
||||||
|
|
||||||
from .types import PrivateUserNode
|
from .types import PrivateUserNode
|
||||||
|
|
@ -13,8 +10,10 @@ from .types import PrivateUserNode
|
||||||
class UsersQuery(object):
|
class UsersQuery(object):
|
||||||
me = graphene.Field(PrivateUserNode)
|
me = graphene.Field(PrivateUserNode)
|
||||||
all_users = DjangoFilterConnectionField(PrivateUserNode)
|
all_users = DjangoFilterConnectionField(PrivateUserNode)
|
||||||
my_activity = DjangoFilterConnectionField(ModuleNode)
|
my_activity = DjangoFilterConnectionField("books.schema.nodes.ModuleNode")
|
||||||
my_instrument_activity = DjangoFilterConnectionField(InstrumentNode)
|
my_instrument_activity = DjangoFilterConnectionField(
|
||||||
|
"basicknowledge.queries.InstrumentNode"
|
||||||
|
)
|
||||||
|
|
||||||
def resolve_me(self, info, **kwargs):
|
def resolve_me(self, info, **kwargs):
|
||||||
return info.context.user
|
return info.context.user
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
import graphene
|
import graphene
|
||||||
|
from api.types import FailureNode
|
||||||
|
from books.models import Module
|
||||||
|
from books.models.topic import Topic
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.utils.dateformat import format
|
from django.utils.dateformat import format
|
||||||
from django_filters import FilterSet, OrderingFilter
|
from django_filters import FilterSet, OrderingFilter
|
||||||
|
|
@ -8,12 +11,6 @@ from graphene import ObjectType, relay
|
||||||
from graphene_django import DjangoObjectType
|
from graphene_django import DjangoObjectType
|
||||||
from graphene_django.filter import DjangoFilterConnectionField
|
from graphene_django.filter import DjangoFilterConnectionField
|
||||||
from graphql_relay import to_global_id
|
from graphql_relay import to_global_id
|
||||||
from api.types import FailureNode
|
|
||||||
|
|
||||||
from books.models import Module
|
|
||||||
from books.models.topic import Topic
|
|
||||||
from books.schema.nodes import ModuleLevelNode
|
|
||||||
from books.schema.queries import ModuleNode
|
|
||||||
from users.models import SchoolClass, SchoolClassMember, Team, User
|
from users.models import SchoolClass, SchoolClassMember, Team, User
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -118,7 +115,7 @@ class PrivateUserNode(DjangoObjectType):
|
||||||
school_classes = graphene.List(SchoolClassNode)
|
school_classes = graphene.List(SchoolClassNode)
|
||||||
|
|
||||||
recent_modules = DjangoFilterConnectionField(
|
recent_modules = DjangoFilterConnectionField(
|
||||||
ModuleNode, filterset_class=RecentModuleFilter
|
"books.schema.nodes.ModuleNode", filterset_class=RecentModuleFilter
|
||||||
)
|
)
|
||||||
team = graphene.Field(TeamNode)
|
team = graphene.Field(TeamNode)
|
||||||
read_only = graphene.Boolean()
|
read_only = graphene.Boolean()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue