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 # reset db and run django dev server
./prepare_server.sh ./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 ## Installation

View File

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

View File

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

View File

@ -39,7 +39,36 @@ ADMIN_EMAILS = ["info@iterativ.ch", "admin"]
@click.command() @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 # Versicherungsvermittler/in mit neuen Circles
create_versicherungsvermittlerin_with_categories( create_versicherungsvermittlerin_with_categories(
course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID, course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID,
@ -49,31 +78,6 @@ def command():
create_default_media_library(course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID) create_default_media_library(course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID)
create_vv_new_learning_path() 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( cs = CourseSession.objects.create(
course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID, course_id=COURSE_VERSICHERUNGSVERMITTLERIN_ID,
title="Versicherungsvermittler/-in", title="Versicherungsvermittler/-in",
@ -108,7 +112,8 @@ def command():
experts = [expert1, expert2, expert3] 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): for i, circle in enumerate(circles):
expert = experts[i % len(experts)] expert = experts[i % len(experts)]
expert.expert.add(circle) expert.expert.add(circle)
@ -120,136 +125,98 @@ def command():
user=User.objects.get(email=admin_email), user=User.objects.get(email=admin_email),
) )
# course session Überbetriebliche Kurse Lehrjahr 1 - Region Bern
courses = [ def create_course_uk_de():
{ # Überbetriebliche Kurse DE
"course_id": COURSE_UK, create_versicherungsvermittlerin_with_categories(
"title": "Überbetriebliche Kurse Lehrjahr 1 - Region Bern", course_id=COURSE_UK, title="Überbetriebliche Kurse"
"basis_slug": "überbetriebliche-kurse-lp-circle-basis", )
"kickoff_slug": "überbetriebliche-kurse-lp-circle-kickoff", create_uk_learning_path(course_id=COURSE_UK)
"haushalt1_slug": "überbetriebliche-kurse-lp-circle-haushalt-teil-1", create_uk_competence_profile(course_id=COURSE_UK)
"fahrzeug_slug": "überbetriebliche-kurse-lp-circle-fahrzeug", create_default_media_library(course_id=COURSE_UK)
"haushalt2_slug": "überbetriebliche-kurse-lp-circle-haushalt-teil-2",
}, cs = CourseSession.objects.create(
{ course_id=COURSE_UK,
"course_id": COURSE_UK_FR, title="Überbetriebliche Kurse Lehrjahr 1 - Region Bern",
"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", # figma demo users and data
"haushalt1_slug": "course-hors-établissement-lp-circle-haushalt-teil-1", csu = CourseSessionUser.objects.create(
"fahrzeug_slug": "course-hors-établissement-lp-circle-fahrzeug", course_session=cs,
"haushalt2_slug": "course-hors-établissement-lp-circle-haushalt-teil-2", user=User.objects.get(
}, username="patrizia.huggel@eiger-versicherungen.ch"
] ),
for course in courses: role=CourseSessionUser.Role.EXPERT,
cs = CourseSession.objects.create( )
course_id=course["course_id"], csu.expert.add(
title=course["title"], 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 _csu = CourseSessionUser.objects.create(
if course["course_id"] == COURSE_UK: course_session=cs,
csu = CourseSessionUser.objects.create( user=User.objects.get(username="christoph.bosshard@vbv-afa.ch"),
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( _csu = CourseSessionUser.objects.create(
course_session=cs, course_session=cs,
user=User.objects.get(username="christoph.bosshard@vbv-afa.ch"), user=User.objects.get(username="axel.manderbach@lernetz.ch"),
) )
_csu = CourseSessionUser.objects.create( _csu = CourseSessionUser.objects.create(
course_session=cs, course_session=cs,
user=User.objects.get(username="axel.manderbach@lernetz.ch"), user=User.objects.get(
) username="patrick.muster@eiger-versicherungen.ch"
),
)
_csu = CourseSessionUser.objects.create( create_feedback(
course_session=cs, Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-kickoff"),
user=User.objects.get( cs,
username="patrick.muster@eiger-versicherungen.ch" 3,
), )
) create_feedback(
Circle.objects.get(
create_feedback( slug="überbetriebliche-kurse-lp-circle-haushalt-teil-2"
Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-kickoff"), ),
cs, cs,
3, 14,
) )
create_feedback( create_feedback(
Circle.objects.get( Circle.objects.get(slug="überbetriebliche-kurse-lp-circle-basis"), cs, 4
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)
# course session Überbetriebliche Kurse Lehrjahr 1 - Region Zürich # course session Überbetriebliche Kurse Lehrjahr 1 - Region Zürich
cs = CourseSession.objects.create( cs = CourseSession.objects.create(
@ -280,6 +247,48 @@ def command():
user=User.objects.get(username="student-uk1-zurich@eiger-versicherungen.ch"), 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 # initial completion data
for slug, status, email in [ for slug, status, email in [
( (