Improve course creation scripts to only create some courses

This commit is contained in:
Daniel Egger 2023-03-29 17:39:09 +02:00
parent 2263c82ce6
commit a0c7dec316
4 changed files with 212 additions and 171 deletions

View File

@ -12,6 +12,11 @@ cd client && npm run dev
# reset db and run django dev server
./prepare_server.sh
# if you only want to create some specific courses to speed up the script,
# you can use the '--courses' parameter
# see consts.py for available course ids
# ./prepare_server.sh --courses -3 -5
```
## Installation

View File

@ -17,26 +17,52 @@ set -e
# handle arguments
SKIP_SETUP=false
START_BACKGROUND=false
courses=()
for i in "$@"
# Parse positional arguments
while [[ $# -gt 0 ]]
do
case $i in
--start-background)
START_BACKGROUND=true
shift # past argument
;;
--skip-setup)
SKIP_SETUP=true
shift # past argument with no value
;;
*)
# unknown option
;;
esac
key="$1"
case $key in
-f|--file)
shift
;;
--start-background)
START_BACKGROUND=true
shift
;;
--skip-setup)
SKIP_SETUP=true
shift
;;
--courses)
shift # Shift past the option
while [[ $# -gt 0 ]] && ! [[ $1 == "--"* ]]
do
courses+=("$1")
shift # Shift past the value
done
;;
*)
echo "Unknown option: $key"
exit 1
;;
esac
done
echo "SKIP_SETUP = ${SKIP_SETUP}"
# Prepend "-c" to each item in courses
for i in "${!courses[@]}"
do
courses[$i]="-c ${courses[$i]}"
done
# Join the list with a space
IFS=' ' course_param="${courses[*]}"
echo "$course_param"
# migrate env vars to the built-in postgres variables
if [ -z ${PGDATABASE+x} ]; then # var is empty
PGDATABASE=${POSTGRES_DB:-vbv_lernwelt};
@ -68,7 +94,8 @@ if [ "$SKIP_SETUP" = false ]; then
python server/manage.py createcachetable
python server/manage.py migrate
python server/manage.py create_default_users
python server/manage.py create_default_courses
echo "python server/manage.py create_default_courses $course_param"
python server/manage.py create_default_courses $course_param
python server/manage.py create_default_notifications
# make django translations
@ -76,7 +103,7 @@ if [ "$SKIP_SETUP" = false ]; then
else
# TODO: can we reset important data without resetting the database?
echo "Skip database setup"
# python3 src/manage.py cypress_reset --settings="$DJANGO_SETTINGS_MODULE"
python server/manage.py cypress_reset
fi
if [ "$START_BACKGROUND" = true ]; then

View File

@ -2,15 +2,15 @@ import wagtail_factories
from django.conf import settings
from wagtail.models import Site
from vbv_lernwelt.course.consts import COURSE_VERSICHERUNGSVERMITTLERIN_OLD_ID
from vbv_lernwelt.course.consts import COURSE_VERSICHERUNGSVERMITTLERIN_ID
from vbv_lernwelt.course.factories import CoursePageFactory
def create_versicherungsvermittlerin_with_categories(
apps=None,
schema_editor=None,
course_id=COURSE_VERSICHERUNGSVERMITTLERIN_OLD_ID,
title="Versicherungsvermittler/-in (alt)",
course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID,
title="Versicherungsvermittler/-in",
):
if apps is not None:
Course = apps.get_model("course", "Course")

View File

@ -39,7 +39,36 @@ ADMIN_EMAILS = ["info@iterativ.ch", "admin"]
@click.command()
def command():
@click.option('--course', '-c', multiple=True, default=[
COURSE_TEST_ID,
COURSE_UK,
COURSE_VERSICHERUNGSVERMITTLERIN_ID,
COURSE_UK_FR,
])
def command(course):
print("Creating default courses", course)
if COURSE_VERSICHERUNGSVERMITTLERIN_ID in course:
create_versicherungsvermittlerin_course()
if COURSE_UK in course:
create_course_uk_de()
create_course_uk_de_completion_data()
if COURSE_UK_FR in course:
create_course_uk_fr()
if COURSE_TEST_ID in course:
create_test_course()
# course sessions
CourseSession.objects.create(
course_id=COURSE_TEST_ID,
title="Test Lehrgang Session",
)
def create_versicherungsvermittlerin_course():
# Versicherungsvermittler/in mit neuen Circles
create_versicherungsvermittlerin_with_categories(
course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID,
@ -49,31 +78,6 @@ def command():
create_default_media_library(course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID)
create_vv_new_learning_path()
# Überbetriebliche Kurse DE
create_versicherungsvermittlerin_with_categories(
course_id=COURSE_UK, title="Überbetriebliche Kurse"
)
create_uk_learning_path(course_id=COURSE_UK)
create_uk_competence_profile(course_id=COURSE_UK)
create_default_media_library(course_id=COURSE_UK)
# Überbetriebliche Kurse FR
create_versicherungsvermittlerin_with_categories(
course_id=COURSE_UK_FR, title="Course hors établissement"
)
create_uk_fr_learning_path(course_id=COURSE_UK_FR)
create_uk_fr_competence_profile(course_id=COURSE_UK_FR)
create_default_media_library(course_id=COURSE_UK_FR)
# test course
create_test_course()
# course sessions
CourseSession.objects.create(
course_id=COURSE_TEST_ID,
title="Test Lehrgang Session",
)
cs = CourseSession.objects.create(
course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID,
title="Versicherungsvermittler/-in",
@ -108,7 +112,8 @@ def command():
experts = [expert1, expert2, expert3]
circles = Circle.objects.filter(slug__startswith="versicherungsvermittler-in-lp")
circles = Circle.objects.filter(
slug__startswith="versicherungsvermittler-in-lp")
for i, circle in enumerate(circles):
expert = experts[i % len(experts)]
expert.expert.add(circle)
@ -120,136 +125,98 @@ def command():
user=User.objects.get(email=admin_email),
)
# course session Überbetriebliche Kurse Lehrjahr 1 - Region Bern
courses = [
{
"course_id": COURSE_UK,
"title": "Überbetriebliche Kurse Lehrjahr 1 - Region Bern",
"basis_slug": "überbetriebliche-kurse-lp-circle-basis",
"kickoff_slug": "überbetriebliche-kurse-lp-circle-kickoff",
"haushalt1_slug": "überbetriebliche-kurse-lp-circle-haushalt-teil-1",
"fahrzeug_slug": "überbetriebliche-kurse-lp-circle-fahrzeug",
"haushalt2_slug": "überbetriebliche-kurse-lp-circle-haushalt-teil-2",
},
{
"course_id": COURSE_UK_FR,
"title": "Cours hors établissement année 1 - Région Fribourg",
"basis_slug": "course-hors-établissement-lp-circle-basis",
"kickoff_slug": "course-hors-établissement-lp-circle-kickoff",
"haushalt1_slug": "course-hors-établissement-lp-circle-haushalt-teil-1",
"fahrzeug_slug": "course-hors-établissement-lp-circle-fahrzeug",
"haushalt2_slug": "course-hors-établissement-lp-circle-haushalt-teil-2",
},
]
for course in courses:
cs = CourseSession.objects.create(
course_id=course["course_id"],
title=course["title"],
def create_course_uk_de():
# Überbetriebliche Kurse DE
create_versicherungsvermittlerin_with_categories(
course_id=COURSE_UK, title="Überbetriebliche Kurse"
)
create_uk_learning_path(course_id=COURSE_UK)
create_uk_competence_profile(course_id=COURSE_UK)
create_default_media_library(course_id=COURSE_UK)
cs = CourseSession.objects.create(
course_id=COURSE_UK,
title="Überbetriebliche Kurse Lehrjahr 1 - Region Bern",
)
# figma demo users and data
csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(
username="patrizia.huggel@eiger-versicherungen.ch"
),
role=CourseSessionUser.Role.EXPERT,
)
csu.expert.add(
Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-kickoff")
)
csu.expert.add(
Circle.objects.get(
slug="überbetriebliche-kurse-lp-circle-haushalt-teil-1"
)
)
csu.expert.add(
Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-fahrzeug")
)
csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(username="andreas.feuz@eiger-versicherungen.ch"),
role=CourseSessionUser.Role.EXPERT,
)
csu.expert.add(
Circle.objects.get(
slug="überbetriebliche-kurse-lp-circle-haushalt-teil-2"
)
)
csu.expert.add(
Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-basis")
)
_csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(username="michael.meier@example.com"),
)
_csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(username="lina.egger@example.com"),
)
_csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(username="evelyn.schmid@example.com"),
)
# figma demo users and data
if course["course_id"] == COURSE_UK:
csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(
username="patrizia.huggel@eiger-versicherungen.ch"
),
role=CourseSessionUser.Role.EXPERT,
)
csu.expert.add(
Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-kickoff")
)
csu.expert.add(
Circle.objects.get(
slug="überbetriebliche-kurse-lp-circle-haushalt-teil-1"
)
)
csu.expert.add(
Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-fahrzeug")
)
csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(username="andreas.feuz@eiger-versicherungen.ch"),
role=CourseSessionUser.Role.EXPERT,
)
csu.expert.add(
Circle.objects.get(
slug="überbetriebliche-kurse-lp-circle-haushalt-teil-2"
)
)
csu.expert.add(
Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-basis")
)
_csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(username="michael.meier@example.com"),
)
_csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(username="lina.egger@example.com"),
)
_csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(username="evelyn.schmid@example.com"),
)
_csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(username="christoph.bosshard@vbv-afa.ch"),
)
_csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(username="christoph.bosshard@vbv-afa.ch"),
)
_csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(username="axel.manderbach@lernetz.ch"),
)
_csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(username="axel.manderbach@lernetz.ch"),
)
_csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(
username="patrick.muster@eiger-versicherungen.ch"
),
)
_csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(
username="patrick.muster@eiger-versicherungen.ch"
),
)
create_feedback(
Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-kickoff"),
cs,
3,
)
create_feedback(
Circle.objects.get(
slug="überbetriebliche-kurse-lp-circle-haushalt-teil-2"
),
cs,
14,
)
create_feedback(
Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-basis"), cs, 4
)
elif course["course_id"] == COURSE_UK_FR:
csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(username="geraldine.kolly@assurance.ch"),
role=CourseSessionUser.Role.EXPERT,
)
csu.expert.add(
Circle.objects.get(
slug="course-hors-établissement-lp-circle-coup-denvoi"
)
)
_csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(username="luca.dupont@assurance.ch"),
)
csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(username="andreas.feuz@eiger-versicherungen.ch"),
role=CourseSessionUser.Role.EXPERT,
)
for fr_circle in Circle.objects.filter(
slug__startswith="course-hors-établissement-lp"
):
csu.expert.add(fr_circle)
create_feedback(
Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-kickoff"),
cs,
3,
)
create_feedback(
Circle.objects.get(
slug="überbetriebliche-kurse-lp-circle-haushalt-teil-2"
),
cs,
14,
)
create_feedback(
Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-basis"), cs, 4
)
# course session Überbetriebliche Kurse Lehrjahr 1 - Region Zürich
cs = CourseSession.objects.create(
@ -280,6 +247,48 @@ def command():
user=User.objects.get(username="student-uk1-zurich@eiger-versicherungen.ch"),
)
def create_course_uk_fr():
# Überbetriebliche Kurse FR
create_versicherungsvermittlerin_with_categories(
course_id=COURSE_UK_FR, title="Course hors établissement"
)
create_uk_fr_learning_path(course_id=COURSE_UK_FR)
create_uk_fr_competence_profile(course_id=COURSE_UK_FR)
create_default_media_library(course_id=COURSE_UK_FR)
cs = CourseSession.objects.create(
course_id=COURSE_UK_FR,
title="Cours hors établissement année 1 - Région Fribourg"
)
csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(username="geraldine.kolly@assurance.ch"),
role=CourseSessionUser.Role.EXPERT,
)
csu.expert.add(
Circle.objects.get(
slug="course-hors-établissement-lp-circle-coup-denvoi"
)
)
_csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(username="luca.dupont@assurance.ch"),
)
csu = CourseSessionUser.objects.create(
course_session=cs,
user=User.objects.get(username="andreas.feuz@eiger-versicherungen.ch"),
role=CourseSessionUser.Role.EXPERT,
)
for fr_circle in Circle.objects.filter(
slug__startswith="course-hors-établissement-lp"
):
csu.expert.add(fr_circle)
def create_course_uk_de_completion_data():
# initial completion data
for slug, status, email in [
(