From a0c7dec3166d6734f1914bde402279586495bf7b Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Wed, 29 Mar 2023 17:39:09 +0200 Subject: [PATCH] Improve course creation scripts to only create some courses --- README.md | 5 + prepare_server.sh | 59 +++- .../creators/versicherungsvermittlerin.py | 6 +- .../commands/create_default_courses.py | 313 +++++++++--------- 4 files changed, 212 insertions(+), 171 deletions(-) diff --git a/README.md b/README.md index 980b4617..e4c4b18d 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/prepare_server.sh b/prepare_server.sh index fa4f8916..ad375e5b 100755 --- a/prepare_server.sh +++ b/prepare_server.sh @@ -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 diff --git a/server/vbv_lernwelt/course/creators/versicherungsvermittlerin.py b/server/vbv_lernwelt/course/creators/versicherungsvermittlerin.py index 4ec84464..a87b645f 100644 --- a/server/vbv_lernwelt/course/creators/versicherungsvermittlerin.py +++ b/server/vbv_lernwelt/course/creators/versicherungsvermittlerin.py @@ -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") diff --git a/server/vbv_lernwelt/course/management/commands/create_default_courses.py b/server/vbv_lernwelt/course/management/commands/create_default_courses.py index 3deddd80..34593772 100644 --- a/server/vbv_lernwelt/course/management/commands/create_default_courses.py +++ b/server/vbv_lernwelt/course/management/commands/create_default_courses.py @@ -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 [ (