286 lines
14 KiB
Python
286 lines
14 KiB
Python
import os
|
|
import random
|
|
import shutil
|
|
|
|
import wagtail_factories
|
|
from django.conf import settings
|
|
from django.core import management
|
|
from django.core.management import BaseCommand
|
|
from django.db import connection
|
|
from wagtail.core.models import Page
|
|
|
|
from book.factories import BookFactory, TopicFactory, ModuleFactory, ChapterFactory, ContentBlockFactory
|
|
from core.factories import UserFactory
|
|
from objectives.factories import ObjectiveGroupFactory, ObjectiveFactory
|
|
|
|
data = [
|
|
{
|
|
'title': 'Gesellschaft',
|
|
'topics': [
|
|
{
|
|
'order': 1,
|
|
'title': '1. Berufliche Grundbildung',
|
|
'teaser': 'Die berufliche Grundbildung lehrt Sie, den Arbeitsalltag erfolgreich zu bewältigen, Ihre Fähigkeiten zu entwickeln und beruflich flexibel zu sein. Ebenso wichtig ist der Umgang mit verschiedensten Mitmenschen. Eine angemessene mündliche Kommunikation erleichtert das Zusammenleben und Zusammenarbeiten.',
|
|
'modules': [
|
|
{
|
|
'order': 1,
|
|
'title': 'Video',
|
|
'meta_title': 'Intro',
|
|
'teaser': 'Die Berufsbildung ist ein neuer Lebensabschnit',
|
|
'intro': """
|
|
<p>Sie stehen am Anfang eines neuen Lebensabschnitts. In Ihrer Rolle als Berufslernende oder Berufslernender haben Sie Verantwortung übernommen.</p>
|
|
<p>Wie erging es Ihnen am ersten Arbeits- und Schultag?</p>
|
|
""",
|
|
'objective_groups': [
|
|
{
|
|
'title': 'Gesellschaft',
|
|
'objectives': [
|
|
{'text': 'Ich kann wichtige personelle und organisatorische Strukturen der Berufsfachschule beschreiben.'},
|
|
{'text': 'Ich kenne die Angebote und Regeln meiner Schule.'},
|
|
{'text': 'Ich kenne den Aufbau des Schullehrplans ABU und können das Qualifikationsverfahren des allgemeinbildenden Unterrichts ABU beschreiben.'},
|
|
{'text': 'Ich kann die drei Lernorte unterscheiden.'}
|
|
]
|
|
},
|
|
{
|
|
'title': 'Sprache und Kommunikation',
|
|
'objectives': [
|
|
{'text': 'Ich kenne verschiedene Arten von Fragen.'},
|
|
{'text': 'Ich kann ein Interview mit geeigneten Fragen vorbereiten.'},
|
|
{'text': 'Ich kann ein Interview führen und auf interessante oder ausweichende Antworten näher eingehen.'},
|
|
{'text': 'Ich kann ein mündlich geführtes Interview schriftlich in Standardsprache festhalten.'},
|
|
{'text': 'Ich kann mein Arbeitsplatz genau beschreiben.'}
|
|
]
|
|
}
|
|
],
|
|
'chapters': [
|
|
{
|
|
'title': '1.1 Lehrbeginn',
|
|
'content_blocks': [
|
|
{
|
|
'type': 'plain',
|
|
'title': 'Auftrag 1',
|
|
'contents': [
|
|
# {
|
|
# 'text_block': 'text_block',
|
|
# 'value': 'value',
|
|
# 'id-123': 'id-123'
|
|
# },
|
|
{
|
|
'type': 'text_block',
|
|
'value': {
|
|
'type': 'text_block',
|
|
'text': '<p>Sie haben diesen Sommer ihre Lehre begonnen. Was bedeutet dieser neue Abschnitt für Sie?<br/>Halten Sie Ihre Erfahrungen im Bereich fest und stellen Sie diese anschliessend der Klasse vor.</p>'
|
|
}
|
|
},
|
|
{
|
|
'type': 'text_block',
|
|
'value': {
|
|
'type': 'text_block',
|
|
'text': '<p>Das folgende Interview bezieht sich auf Jugendliche, die Ihre Lehre im Sommer begonnen haben. </p> <p>Lesen Sie das Interview durch und bearbeiten Sie anschliessend die Aufgaben.</p>'
|
|
}
|
|
},
|
|
# {
|
|
# 'type': 'text_block',
|
|
# 'value': {
|
|
# 'text': 'Trello: Task-Management',
|
|
# }
|
|
# },
|
|
# {
|
|
# 'type': 'text_block',
|
|
# 'value': {
|
|
# 'text': 'Trello: Task-Management',
|
|
# }
|
|
# },
|
|
# {
|
|
# 'type': 'text_block',
|
|
# 'value': {
|
|
# 'text': 'Trello: Task-Management',
|
|
# }
|
|
# }
|
|
]
|
|
},
|
|
{
|
|
'type': 'yellow',
|
|
'title': 'Auftrag 2',
|
|
# 'content': 'Sie haben diesen Sommer ihre Lehre begonnen. Was bedeutet dieser neue Abschnitt für Sie?'
|
|
},
|
|
{
|
|
'type': 'plain',
|
|
'title': 'Auftrag 3',
|
|
# 'content': 'Sie haben diesen Sommer ihre Lehre begonnen. Was bedeutet dieser neue Abschnitt für Sie?'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
'title': '1.2 Die drei Lernorte',
|
|
'content_blocks': [
|
|
{
|
|
'type': 'plain',
|
|
'title': 'Auftrag 1',
|
|
# 'content': 'Sie haben diesen Sommer ihre Lehre begonnen. Was bedeutet dieser neue Abschnitt für Sie?'
|
|
},
|
|
{
|
|
'type': 'yellow',
|
|
'title': 'Auftrag 2',
|
|
# 'content': 'Sie haben diesen Sommer ihre Lehre begonnen. Was bedeutet dieser neue Abschnitt für Sie?'
|
|
},
|
|
{
|
|
'type': 'blue',
|
|
'title': 'Auftrag 3',
|
|
# 'content': 'Sie haben diesen Sommer ihre Lehre begonnen. Was bedeutet dieser neue Abschnitt für Sie?'
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
'order': 2,
|
|
'title': 'Mein neues Umfeld',
|
|
'meta_title': 'Modul 1',
|
|
'teaser': 'Wie erging es Ihnen am ersten Arbeits- und Schultag?'
|
|
},
|
|
{
|
|
'order': 3,
|
|
'title': 'Lehrvertrag',
|
|
'meta_title': 'Modul 2',
|
|
'teaser': 'Haben Sie etwas in Ihrem Lehrvertrag noch nicht verstanden?'
|
|
},
|
|
{
|
|
'order': 4,
|
|
'title': 'Miteinander reden',
|
|
'meta_title': 'Modul 3',
|
|
'teaser': 'Welches war Ihre letzte schwierige Gesprächs- situation?'
|
|
},
|
|
{
|
|
'order': 5,
|
|
'title': 'Lerntipps',
|
|
'meta_title': 'Modul 4',
|
|
'teaser': 'Wie gehen Sie vor, wenn Sie sich auf eine Prüfung vor-bereiten?'
|
|
}
|
|
]
|
|
},
|
|
# {
|
|
# 'order': 2,
|
|
# 'title': '2. Geld und Kauf'
|
|
# },
|
|
# {
|
|
# 'order': 3,
|
|
# 'title': '3. Risiko und Sicherheit'
|
|
# },
|
|
# {
|
|
# 'order': 4,
|
|
# 'title': '4. Demokratie und Mitgestaltung'
|
|
# },
|
|
# {
|
|
# 'order': 5,
|
|
# 'title': '5. Kultur und Kunst'
|
|
# },
|
|
# {
|
|
# 'order': 6,
|
|
# 'title': '6. Die Schweiz in Europa und der Welt'
|
|
# },
|
|
# {
|
|
# 'order': 7,
|
|
# 'title': '7. Markt und Konsum'
|
|
# },
|
|
# {
|
|
# 'order': 8,
|
|
# 'title': '8. Globale Herausforderungen'
|
|
# },
|
|
# {
|
|
# 'order': 9,
|
|
# 'title': '9. Wohnen und Zusammenleben'
|
|
# },
|
|
# {
|
|
# 'order': 10,
|
|
# 'title': '10. Arbeit und Zukunft'
|
|
# },
|
|
# {
|
|
# 'order': 11,
|
|
# 'title': '11. Grundsätzliches zum Recht'
|
|
# },
|
|
]
|
|
}
|
|
]
|
|
|
|
|
|
class Command(BaseCommand):
|
|
|
|
def ensure_clean_dir(self, folder):
|
|
path = os.path.join(settings.MEDIA_ROOT, folder)
|
|
if os.path.exists(path):
|
|
shutil.rmtree(path)
|
|
if not os.path.exists(path):
|
|
os.makedirs(path)
|
|
|
|
def filter_data(self, input_data, filter_keyword):
|
|
filters = [filter_keyword] if not isinstance(filter_keyword, list) else filter_keyword
|
|
return {k: v for (k, v) in input_data.items() if not (k in filters)}
|
|
|
|
def handle(self, *args, **options):
|
|
with connection.cursor() as cursor:
|
|
cursor.execute("DROP SCHEMA IF EXISTS public CASCADE;")
|
|
cursor.execute(
|
|
"CREATE SCHEMA IF NOT EXISTS public AUTHORIZATION {};".format(settings.DATABASES['default']['USER']))
|
|
cursor.execute("GRANT ALL ON SCHEMA public TO postgres;")
|
|
management.call_command('migrate', verbosity=0, interactive=False)
|
|
|
|
self.ensure_clean_dir('images')
|
|
self.ensure_clean_dir('original_images')
|
|
self.ensure_clean_dir('documents')
|
|
|
|
site = wagtail_factories.SiteFactory.create(is_default_site=True)
|
|
Page.objects.filter(title='Root').delete()
|
|
|
|
u = UserFactory(
|
|
username='test',
|
|
is_staff=True,
|
|
is_superuser=True
|
|
)
|
|
|
|
for i in range(0, 4):
|
|
UserFactory(username='user{}'.format(i))
|
|
|
|
for book_idx, book_data in enumerate(data):
|
|
book = BookFactory.create(parent=site.root_page, **self.filter_data(book_data, 'topics'))
|
|
|
|
default_topics = [{} for i in range(0, random.randint(5, 8))]
|
|
topics_data = book_data.get('topics', default_topics)
|
|
|
|
for topic_idx, topic_data in enumerate(topics_data):
|
|
topic = TopicFactory.create(parent=book, **self.filter_data(topic_data, 'modules'))
|
|
|
|
default_modules = [{} for i in range(0, random.randint(3, 6))]
|
|
modules_data = topic_data.get('modules', default_modules)
|
|
|
|
for module_idx, module_data in enumerate(modules_data):
|
|
module = ModuleFactory.create(parent=topic, **self.filter_data(module_data, ['objective_groups', 'chapters']))
|
|
|
|
default_objective_groups = [{} for i in range(0, 2)]
|
|
objective_group_data = module_data.get('objective_groups', default_objective_groups)
|
|
|
|
for objective_group_idx, objective_group_entry in enumerate(objective_group_data):
|
|
factory_params = self.filter_data(objective_group_entry, 'objectives')
|
|
objective_group = ObjectiveGroupFactory.create(module=module,
|
|
user=None,
|
|
**factory_params)
|
|
|
|
default_objectives = [{} for i in range(0, 4)]
|
|
objectives_data = objective_group_entry.get('objectives', default_objectives)
|
|
|
|
for objective_idx, objective_data in enumerate(objectives_data):
|
|
objective = ObjectiveFactory.create(group=objective_group, **objective_data)
|
|
|
|
default_chapters = [{} for i in range(0, 2)]
|
|
chapters_data = module_data.get('chapters', default_chapters)
|
|
|
|
for chapter_idx, chapter_data in enumerate(chapters_data):
|
|
chapter = ChapterFactory.create(parent=module, **self.filter_data(chapter_data, 'content_blocks'))
|
|
|
|
default_content_blocks = [{} for i in range(0, 4)]
|
|
content_blocks_data = chapter_data.get('content_blocks', default_content_blocks)
|
|
|
|
for content_block_idx, content_block_data in enumerate(content_blocks_data):
|
|
# ContentBlockFactory.create(parent=chapter, **self.filter_data(content_block_data, 'contents'))
|
|
ContentBlockFactory.create(parent=chapter, **content_block_data)
|