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