Move common functions into Wagtail superclass

This commit is contained in:
Pawel Kowalski 2018-08-16 17:26:16 +02:00
parent 2157d4e630
commit 2f52f67b64
14 changed files with 91 additions and 134 deletions

View File

@ -1,8 +1,10 @@
# Generated by Django 2.0.6 on 2018-08-14 14:08
# Generated by Django 2.0.6 on 2018-08-16 15:24
from django.db import migrations, models
import django.db.models.deletion
import wagtail.core.blocks
import wagtail.core.fields
import wagtail.images.blocks
class Migration(migrations.Migration):
@ -10,7 +12,7 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
('wagtailimages', '0020_add-verbose-name'),
('wagtailimages', '0021_image_file_hash'),
('wagtailcore', '0040_page_draft_title'),
]
@ -37,6 +39,19 @@ class Migration(migrations.Migration):
},
bases=('wagtailcore.page',),
),
migrations.CreateModel(
name='ContentBlock',
fields=[
('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
('contents', wagtail.core.fields.StreamField([('text_block', wagtail.core.blocks.StructBlock([('text', wagtail.core.blocks.RichTextBlock())], icon='doc-full')), ('modal_text', wagtail.core.blocks.StructBlock([('description', wagtail.core.blocks.RichTextBlock()), ('url', wagtail.core.blocks.URLBlock())], icon='placeholder')), ('student_entry', wagtail.core.blocks.StructBlock([('task_text', wagtail.core.blocks.RichTextBlock())], icon='download')), ('image_block', wagtail.images.blocks.ImageChooserBlock(icon='image')), ('task', wagtail.core.blocks.StructBlock([('text', wagtail.core.blocks.RichTextBlock())], icon='tick'))], blank=True, null=True)),
('type', models.CharField(choices=[('plain', 'Normal'), ('yellow', 'Gelb'), ('green', 'Grün'), ('blue', 'Blau')], max_length=100)),
],
options={
'verbose_name': 'Inhaltsblock',
'verbose_name_plural': 'Inhaltsblöcke',
},
bases=('wagtailcore.page',),
),
migrations.CreateModel(
name='Module',
fields=[

View File

@ -1,31 +0,0 @@
# Generated by Django 2.0.6 on 2018-08-15 08:45
from django.db import migrations, models
import django.db.models.deletion
import wagtail.core.blocks
import wagtail.core.fields
import wagtail.images.blocks
class Migration(migrations.Migration):
dependencies = [
('wagtailcore', '0040_page_draft_title'),
('book', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='ContentBlock',
fields=[
('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='wagtailcore.Page')),
('contents', wagtail.core.fields.StreamField([('text', wagtail.core.blocks.StructBlock([('text', wagtail.core.blocks.RichTextBlock())], icon='doc-full')), ('modal_text', wagtail.core.blocks.StructBlock([('description', wagtail.core.blocks.RichTextBlock()), ('modal_content', wagtail.core.blocks.RichTextBlock())], icon='placeholder')), ('student_entry', wagtail.core.blocks.StructBlock([('task_text', wagtail.core.blocks.CharBlock())], icon='download')), ('image', wagtail.images.blocks.ImageChooserBlock(icon='image')), ('task', wagtail.core.blocks.StructBlock([('text', wagtail.core.blocks.RichTextBlock())], icon='tick'))])),
('type', models.CharField(choices=[('plain', 'Normal'), ('yellow', 'Gelb'), ('green', 'Grün'), ('blue', 'Blau')], max_length=100)),
],
options={
'verbose_name_plural': 'Inhaltsblöcke',
'verbose_name': 'Inhaltsblock',
},
bases=('wagtailcore.page',),
),
]

View File

@ -1,21 +0,0 @@
# Generated by Django 2.0.6 on 2018-08-15 13:49
from django.db import migrations
import wagtail.core.blocks
import wagtail.core.fields
import wagtail.images.blocks
class Migration(migrations.Migration):
dependencies = [
('book', '0002_contentblock'),
]
operations = [
migrations.AlterField(
model_name='contentblock',
name='contents',
field=wagtail.core.fields.StreamField([('text_block', wagtail.core.blocks.StructBlock([('text', wagtail.core.blocks.RichTextBlock())], icon='doc-full')), ('modal_text', wagtail.core.blocks.StructBlock([('description', wagtail.core.blocks.RichTextBlock()), ('modal_content', wagtail.core.blocks.RichTextBlock())], icon='placeholder')), ('student_entry', wagtail.core.blocks.StructBlock([('task_text', wagtail.core.blocks.CharBlock())], icon='download')), ('image', wagtail.images.blocks.ImageChooserBlock(icon='image')), ('task', wagtail.core.blocks.StructBlock([('text', wagtail.core.blocks.RichTextBlock())], icon='tick'))], blank=True, null=True),
),
]

View File

@ -1,21 +0,0 @@
# Generated by Django 2.0.6 on 2018-08-15 16:29
from django.db import migrations
import wagtail.core.blocks
import wagtail.core.fields
import wagtail.images.blocks
class Migration(migrations.Migration):
dependencies = [
('book', '0003_auto_20180815_1349'),
]
operations = [
migrations.AlterField(
model_name='contentblock',
name='contents',
field=wagtail.core.fields.StreamField([('text_block', wagtail.core.blocks.StructBlock([('text', wagtail.core.blocks.RichTextBlock())], icon='doc-full')), ('modal_text', wagtail.core.blocks.StructBlock([('description', wagtail.core.blocks.RichTextBlock()), ('modal_content', wagtail.core.blocks.RichTextBlock())], icon='placeholder')), ('student_entry', wagtail.core.blocks.StructBlock([('task_text', wagtail.core.blocks.CharBlock())], icon='download')), ('image_block', wagtail.images.blocks.ImageChooserBlock(icon='image')), ('task', wagtail.core.blocks.StructBlock([('text', wagtail.core.blocks.RichTextBlock())], icon='tick'))], blank=True, null=True),
),
]

View File

@ -1,12 +1,13 @@
import logging
from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, ObjectList
from wagtail.core.models import Page
from core.wagtail_utils import StrictHierarchyPage
logger = logging.getLogger(__name__)
class Book(Page):
class Book(StrictHierarchyPage):
class Meta:
verbose_name = 'Buch'
verbose_name_plural = 'Bücher'
@ -27,6 +28,3 @@ class Book(Page):
template = 'generic_page.html'
subpage_types = ['book.Topic']
def get_child_ids(self):
return self.get_children().values_list('id', flat=True)

View File

@ -1,13 +1,13 @@
import logging
from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, \
ObjectList
from wagtail.core.models import Page
from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, ObjectList
from core.wagtail_utils import StrictHierarchyPage
logger = logging.getLogger(__name__)
class Chapter(Page):
class Chapter(StrictHierarchyPage):
class Meta:
verbose_name = 'Kapitel'
verbose_name_plural = 'Kapitel'
@ -30,9 +30,3 @@ class Chapter(Page):
parent_page_types = ['book.Module']
subpage_types = ['book.ContentBlock']
def get_child_ids(self):
return self.get_children().values_list('id', flat=True)
@classmethod
def get_module_chapters(cls, module):
return cls.objects.filter(id__in=module.get_child_ids()).live()

View File

@ -1,19 +1,17 @@
import logging
from django.db import models
from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, \
ObjectList, StreamFieldPanel
from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, ObjectList, StreamFieldPanel
from wagtail.core.fields import StreamField
from wagtail.core.models import Page
from wagtail.images.blocks import ImageChooserBlock
from book.blocks import TextBlock, ModalTextBlock, StudentEntryBlock
from core.wagtail_utils import StrictHierarchyPage
logger = logging.getLogger(__name__)
class ContentBlock(Page):
class ContentBlock(StrictHierarchyPage):
class Meta:
verbose_name = 'Inhaltsblock'
verbose_name_plural = 'Inhaltsblöcke'
@ -55,6 +53,3 @@ class ContentBlock(Page):
parent_page_types = ['book.Chapter']
@classmethod
def get_chapter_content_blocks(cls, chapter):
return cls.objects.filter(id__in=chapter.get_child_ids()).live()

View File

@ -1,18 +1,17 @@
import logging
from django.db import models
from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, \
ObjectList
from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, ObjectList
from wagtail.core.fields import RichTextField
from wagtail.core.models import Page
from wagtail.images.edit_handlers import ImageChooserPanel
from book.blocks import DEFAULT_RICH_TEXT_FEATURES
from core.wagtail_utils import StrictHierarchyPage
logger = logging.getLogger(__name__)
class Module(Page):
class Module(StrictHierarchyPage):
class Meta:
verbose_name = 'Modul'
verbose_name_plural = 'Module'
@ -57,7 +56,3 @@ class Module(Page):
def get_child_ids(self):
return self.get_children().values_list('id', flat=True)
@classmethod
def get_topic_modules(cls, topic):
return cls.objects.filter(id__in=topic.get_child_ids()).live()

View File

@ -1,17 +1,16 @@
import logging
from django.db import models
from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, \
ObjectList
from wagtail.admin.edit_handlers import FieldPanel, TabbedInterface, ObjectList
from wagtail.core.fields import RichTextField
from wagtail.core.models import Page
from book.blocks import DEFAULT_RICH_TEXT_FEATURES
from core.wagtail_utils import StrictHierarchyPage
logger = logging.getLogger(__name__)
class Topic(Page):
class Topic(StrictHierarchyPage):
class Meta:
verbose_name = 'Thema'
verbose_name_plural = 'Themen'
@ -40,10 +39,3 @@ class Topic(Page):
parent_page_types = ['book.Book']
subpage_types = ['book.Module']
def get_child_ids(self):
return self.get_children().values_list('id', flat=True)
@classmethod
def get_book_topics(cls, book):
return cls.objects.filter(id__in=book.get_child_ids()).live()

View File

@ -32,7 +32,7 @@ class ChapterNode(DjangoObjectType):
interfaces = (relay.Node,)
def resolve_content_blocks(self, *args, **kwargs):
return ContentBlock.get_chapter_content_blocks(self)
return ContentBlock.get_by_parent(self)
class ModuleNode(DjangoObjectType):
@ -59,7 +59,7 @@ class ModuleNode(DjangoObjectType):
return self.hero_image.file.url
def resolve_chapters(self, *args, **kwargs):
return Chapter.get_module_chapters(self)
return Chapter.get_by_parent(self)
class TopicNode(DjangoObjectType):
@ -81,7 +81,7 @@ class TopicNode(DjangoObjectType):
return self.id
def resolve_modules(self, *args, **kwargs):
return Module.get_topic_modules(self)
return Module.get_by_parent(self)
class BookNode(DjangoObjectType):
@ -103,7 +103,7 @@ class BookNode(DjangoObjectType):
return self.id
def resolve_topics(self, *args, **kwargs):
return Topic.get_book_topics(self)
return Topic.get_by_parent(self)
class BookQuery(object):

View File

@ -1,4 +1,17 @@
from django.contrib import admin
from wagtail.core.models import Page
class StrictHierarchyPage(Page):
class Meta:
abstract = True
def get_child_ids(self):
return self.get_children().values_list('id', flat=True)
@classmethod
def get_by_parent(cls, parent):
return cls.objects.filter(id__in=parent.get_child_ids()).live()
def wagtail_parent_filter(parent_cls, child_cls):

View File

@ -1,6 +1,5 @@
# Generated by Django 2.0.6 on 2018-08-14 14:08
# Generated by Django 2.0.6 on 2018-08-16 15:24
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
@ -10,8 +9,6 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('book', '0001_initial'),
]
operations = [
@ -31,8 +28,6 @@ class Migration(migrations.Migration):
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(blank=True, max_length=255, verbose_name='title')),
('module', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='book.Module')),
('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
options={
'verbose_name': 'Lernziel Gruppe',
@ -45,16 +40,10 @@ class Migration(migrations.Migration):
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('done', models.BooleanField(default=False, verbose_name='Lernziel erledigt?')),
('objective', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='objectives.Objective')),
('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
options={
'verbose_name': 'Lernzielstatus',
'verbose_name_plural': 'Lernzielstatus',
},
),
migrations.AddField(
model_name='objective',
name='group',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='objectives.ObjectiveGroup'),
),
]

View File

@ -0,0 +1,39 @@
# Generated by Django 2.0.6 on 2018-08-16 15:24
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('book', '0001_initial'),
('objectives', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='objectiveprogressstatus',
name='user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='objectivegroup',
name='module',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='book.Module'),
),
migrations.AddField(
model_name='objectivegroup',
name='user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='objective',
name='group',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='objectives.ObjectiveGroup'),
),
]

View File

@ -1,4 +1,4 @@
# Generated by Django 2.0.6 on 2018-08-14 12:41
# Generated by Django 2.0.6 on 2018-08-16 15:24
import django.contrib.auth.models
import django.contrib.auth.validators