skillbox/server/core/management/commands/dummy_data.py

444 lines
27 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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': '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': 'Einleitung',
'meta_title': 'Video',
'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>
""",
},
{
'order': 2,
'title': 'Mein neues Umfeld',
'meta_title': 'Modul 1',
'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 und deren Angebote, Konzepte erklären und Weisungen nennen.'
},
{
'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 in Standardsprache aufzeichnen.'
},
{
'text': 'Ich kann mein Arbeitsplatz genau beschreiben.'
},
]
}
],
'chapters': [
{
'title': '1.1 Lehrbeginn',
'content_blocks': [
{
'type': 'plain',
'title': 'Auftrag 1',
'contents': [
{
'type': 'text_block',
'value': {
'text': '<p>Sie haben diesen Sommer ihre Lehre begonnen. Was bedeutet dieser neue Abschnitt für Sie?<br/>Halten Sie Ihre Erfahrungen im Raum «Mein Lehrbeginn» fest.</p>'
}
},
]
},
{
'type': 'plain',
'title': 'Auftrag 2',
'contents': [
{
'type': 'text_block',
'value': {
'text': """<p>Das folgende Interview bezieht sich auf Jugendliche, die Ihre Lehre im Sommer begonnen haben. Lesen Sie das Interview durch und bearbeiten Sie anschliessend die Aufgaben.</p>
<p>Aufgaben zum Interview «Das ist ein ganz markanter Wechsel»</p>"""
}
},
{
'type': 'task',
'value': {
'text': '<p>Erklären Sie, welche Informationen den Leserinnen und Lesern in der Einleitung vermittelt werden.</p>'
}
},
{
'type': 'task',
'value': {
'text': '<p>Nehmen Sie zu folgenden Fragen Stellung:</p>'
}
},
{
'type': 'task',
'value': {
'text': '<p>Diskutieren Sie darüber, ob die Aussagen von Markus Spiegel nachvollziehbar sind. Welchen können Sie zustimmen, welchen widersprechen?</p>'
}
},
{
'type': 'task',
'value': {
'text': '<p>In der Schweiz absolvieren fast alle Schulabgängerinnen und -abgänger nach der obligatorischen Schulzeit eine Ausbildung. 2016 traten 77 705 Jugendliche in eine berufliche Grundbildung ein. Im Unterschied zu früher lernen heute auch die meisten Frauen einen Beruf. Studieren Sie die folgende Grafik und beschreiben Sie in drei Sätzen, wie sich die Berufswahl in der Schweiz seit 1976 verändert hat.</p>'
}
},
]
},
{
'type': 'yellow',
'title': 'Das Interview',
'contents': [
{
'type': 'basic_knowledge',
'value': {
'description': '<p>Ein Interview dient dazu, durch Befragung Informationen zu ermitteln. Bei journalistischen Interviews werden oft Expertinnen und Experten befragt, aber auch Personen.</p>'
}
},
]
},
{
'type': 'plain',
'title': 'Auftrag 3',
'contents': [
{
'type': 'text_block',
'value': {
'text': '<p>Lösen Sie die folgenden Aufgaben:</p>'
}
},
{
'type': 'task',
'value': {
'text': '<p>Ordnen Sie die Fragen im Interview mit Markus Spiegel den verschiedenen Fragetypen zu.</p>'
}
},
{
'type': 'task',
'value': {
'text': '<p>Überprüfen Sie, welche Merkmale das Interview mit Markus Spiegel enthält:</p>'
}
},
]
},
{
'type': 'plain',
'title': 'Auftrag 4',
'contents': [
{
'type': 'text_block',
'value': {
'text': '<p>Planen Sie ein Interview zum Thema «Neues Umfeld»: Dokumentieren Sie Ihre Arbeitsschritte im Portfolio. Reflektieren Sie die jeweiligen Schritte und halten Sie die nächsten Planungsschritte fest (siehe auch Beispiel).</p>'
}
},
{
'type': 'task',
'value': {
'text': '<p>Formulieren Sie fünf bis sieben Fragen.</p>'
}
},
{
'type': 'task',
'value': {
'text': '<p>Führen Sie das Interview mit jemanden aus Ihrer Klasse durch. Zeichnen Sie das Interview auf vocaroo.com auf. Veröffentlichen Sie Ihre Aufnahme im Raum für Zusammenarbeit.</p>'
}
},
]
},
{
'type': 'plain',
'title': 'Tipp',
'contents': [
{
'type': 'text_block',
'value': {
'text': '<p>Ob ein Interview gelingt, hängt davon ab, wie es geführt wird. Achten Sie auf die Fragetechnik. Diese ist wichtig, wenn man herausfinden möchte, was der oder die Befragte denkt. Der oben stehende Basiswissen hilft Ihnen dabei.</p>'
}
},
]
},
]
},
{
'title': '1.2 Die drei Lernorte',
'content_blocks': [
{
'type': 'blue',
'title': 'Das Berufsbildungssystem',
'contents': [
{
'type': 'text_block',
'value': {
'text': '<p>Unser Berufsbildungssystem wird von der Schule, den Lehrbetrieben und den Berufsverbänden gemeinsam getragen. Die Lernenden wechseln in sinnvollen Abständen den Lernort. Es findet ein Wechselspiel zwischen dem Lernen von theoretischem Wissen und seiner anwendungsorientierten Umsetzung und Vertiefung statt.</p>'
}
},
{
'type': 'text_block',
'value': {
'text': '<p>Die Berufsfachschule vermittelt die schulische Bildung. Diese besteht aus beruflichem und allgemeinbildendem Unterricht (BBG 21 f.).</p>'
}
},
{
'type': 'text_block',
'value': {
'text': '<p>Die überbetrieblichen Kurse dienen der Vermittlung und dem Erwerb grundlegender Fertigkeiten. Sie ergänzen die Bildung der beruflichen Praxis und die schulische Bildung, wo dies erforderlich ist (BBG 23).</p>'
}
},
{
'type': 'text_block',
'value': {
'text': '<p>Der Lehrbetrieb ist der Ausbildungsort für die praktische Bildung. Grundlage für die praktische Ausbildung im Betrieb und in den überbetrieblichen Kursen bilden die berufsspezifischen Bildungsverordnungen (BiVo) (BBG 19).</p>'
}
},
]
},
{
'type': 'plain',
'title': 'Auftrag 5',
'contents': [
{
'type': 'text_block',
'value': {
'text': '<p>Ergänzen Sie anhand der Webseite Ihrer Berufsfachschule und allenfalls mithilfe weiterer Materialien alle fehlenden Angaben in der Mindmap.</p>'
}
},
{
'type': 'basic_knowledge',
'value': {
'description': '<p>Lesen Sie folgendes Basiswissen</p>',
'url': 'https://google.ch'
}
},
{
'type': 'text_block',
'value': {
'text': '<p>Durch Ihre Lehrperson erfahren Sie, welche Themen im ABU bearbeitet werden und wie das Qualifikationsverfahren abläuft.</p>'
}
},
]
},
{
'type': 'plain',
'title': 'Auftrag 6',
'contents': [
{
'type': 'text_block',
'value': {
'text': '<p>Informieren Sie sich im Betrieb oder auf der entsprechenden Webseite, wo Ihre überbetrieblichen Kurse stattfinden werden.</p>'
}
},
]
},
{
'type': 'plain',
'title': 'Auftrag 7',
'contents': [
{
'type': 'text_block',
'value': {
'text': '<p>Lesen Sie den Text durch und bearbeiten Sie anschliessend die Aufgaben.</p>'
}
},
{
'type': 'text_block',
'value': {
'text': '<p>Aufgaben zum Text «Mein Arbeitsplatz»</p>'
}
},
{
'type': 'task',
'value': {
'text': '<p>Notieren Sie die verschiedenen Nomen, die Jessica für die Beschreibung ihres Arbeitsortes verwendet.</p>'
}
},
{
'type': 'task',
'value': {
'text': '<p>Zählen Sie Gegenstände auf, die sich in den Räumen befinden.</p>'
}
},
{
'type': 'task',
'value': {
'text': '<p>Nennen Sie alle Farbadjektive, die im Text vorkommen, sowie Adjektive, die auf Farben hinweisen.</p>'
}
},
{
'type': 'task',
'value': {
'text': '<p>Mit welchen sprachlichen Mitteln kann ein Ort oder Gegenstand erwähnt werden, ohne dass man das Nomen wiederholt? Nennen Sie drei Beispiele aus dem Text.</p>'
}
},
]
},
{
'type': 'plain',
'title': 'Auftrag 8',
'contents': [
{
'type': 'text_block',
'value': {
'text': '<p>Beschreiben Sie schriftlich Ihren Arbeitsplatz und stellen Sie Ihn anschliessend der Klasse vor.</p>'
}
},
]
},
]
}
]
},
{
'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?'
}
]
}
]
}
]
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)
# now create all usergroups and rooms
management.call_command('dummy_rooms', verbosity=0)