From 5081ddf10702d531478cb56ecb77519ec141bbf3 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Wed, 25 May 2022 17:44:07 +0200 Subject: [PATCH] Rename env variable stuff --- .editorconfig | 2 +- README.md | 40 +++----- caprover_create_app.py | 10 +- compose/django/docker_entrypoint.sh | 4 +- env/docker_local.env | 2 +- env_secrets/caprover.env | Bin 1480 -> 1470 bytes env_secrets/local_daniel.env | Bin 1536 -> 794 bytes env_secrets/local_lorenz.env | Bin 1122 -> 787 bytes env_secrets/production.env | Bin 1379 -> 139 bytes example.env | 1 + local-setup-for-tests.sh | 45 --------- prepare_server.sh | 69 +++++++++++++ prepare_server_cypress.sh | 95 +----------------- server/config/settings/base.py | 55 +++++----- server/config/settings/test.py | 2 +- server/config/settings/test_cypress.py | 2 +- server/example.env | 11 -- .../vbv_lernwelt/core/create_default_users.py | 8 +- server/vbv_lernwelt/core/utils.py | 4 +- server/vbv_lernwelt/core/views.py | 5 +- .../tests/create_default_learning_path.py | 3 - 21 files changed, 137 insertions(+), 221 deletions(-) create mode 100644 example.env delete mode 100755 local-setup-for-tests.sh create mode 100755 prepare_server.sh delete mode 100644 server/example.env diff --git a/.editorconfig b/.editorconfig index 8ac421b7..658dda71 100644 --- a/.editorconfig +++ b/.editorconfig @@ -8,7 +8,7 @@ end_of_line = lf insert_final_newline = true trim_trailing_whitespace = true -[*.{py,rst,ini}] +[*.{py,rst,ini,sh}] indent_style = space indent_size = 4 diff --git a/README.md b/README.md index 8a1be72e..ea63ae0d 100644 --- a/README.md +++ b/README.md @@ -11,38 +11,32 @@ npm run tailwind # run vue vite dev server cd client && npm run dev -# run django dev server -cd server && python manage.py runserver +# reset db and run django dev server +./prepare_server.sh ``` ## Installation See `.tool-versions` file for used django and node version +You have to set up at least the following environment variables: + +```bash +export IT_APP_ENVIRONMENT=development +``` + +See `.env_secrets/local_daniel.env` for more possible environment variables. +Especially set correct values for `POSTGRES_*` and `DATABASE_URL` + + ### Server part -Run every sub command in the `server` directory - -Create a new PostgreSQL database and role +The "prepare_server.sh" script will create the database according to `POSTGRE_*` environment variables. +It will also setup the tables for django and run the django development server. ```bash -createdb vbv_lernwelt -createuser vbv_lernwelt -``` - -Set the environment variable accordingly - -```bash -export VBV_DATABASE_URL='postgres://vbv_lernwelt@localhost:5432/vbv_lernwelt' -``` - -Set `VBV_DJANGO_READ_DOT_ENV_FILE=True` to make the config read the `example.env` file (with direnv!?). - -```bash -python manage.py migrate - -# sync server -python manage.py runserver +# will initial`migrate` and `runserver` etc... +./prepare_server.sh # or async server # uvicorn config.asgi:application --host 0.0.0.0 --reload @@ -50,8 +44,6 @@ python manage.py runserver ### Client part -Run every command in the `client` directory - ```bash npm install diff --git a/caprover_create_app.py b/caprover_create_app.py index 44cde962..652f1d88 100644 --- a/caprover_create_app.py +++ b/caprover_create_app.py @@ -44,11 +44,11 @@ cap.create_and_update_app( image_name='docker.io/iterativ/vbv-lernwelt-django', environment_variables={ # 'DJANGO_SETTINGS_MODULE': 'config.settings.base', - 'VBV_DJANGO_SECRET_KEY': env.str('VBV_DJANGO_SECRET_KEY'), - 'VBV_DJANGO_ADMIN_URL': env.str('VBV_DJANGO_ADMIN_URL'), - 'VBV_DJANGO_ALLOWED_HOSTS': env.str('VBV_DJANGO_ALLOWED_HOSTS'), - 'VBV_SENTRY_DSN': env.str('VBV_SENTRY_DSN'), - 'VBV_DJANGO_DEV_MODE': 'caprover', + 'IT_DJANGO_SECRET_KEY': env.str('IT_DJANGO_SECRET_KEY'), + 'IT_DJANGO_ADMIN_URL': env.str('IT_DJANGO_ADMIN_URL'), + 'IT_DJANGO_ALLOWED_HOSTS': env.str('IT_DJANGO_ALLOWED_HOSTS'), + 'IT_SENTRY_DSN': env.str('IT_SENTRY_DSN'), + 'IT_APP_ENVIRONMENT': 'caprover', 'POSTGRES_HOST': 'srv-captain--vbv-lernwelt-postgres-db', 'POSTGRES_PORT': 5432, 'POSTGRES_DB': db_name, diff --git a/compose/django/docker_entrypoint.sh b/compose/django/docker_entrypoint.sh index 5192d90e..524f6902 100644 --- a/compose/django/docker_entrypoint.sh +++ b/compose/django/docker_entrypoint.sh @@ -13,9 +13,9 @@ if [ -z "${POSTGRES_USER}" ]; then base_postgres_image_default_user='postgres' export POSTGRES_USER="${base_postgres_image_default_user}" fi -export VBV_DATABASE_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}" +export DATABASE_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}" -echo $VBV_DATABASE_URL +echo $DATABASE_URL postgres_ready() { python << END diff --git a/env/docker_local.env b/env/docker_local.env index 93a5c471..7919aebc 100644 --- a/env/docker_local.env +++ b/env/docker_local.env @@ -8,5 +8,5 @@ POSTGRES_PASSWORD=hNqfCdG6bwCLcnfboDtNM1L2Hiwp8GuKp1DJ6t2rcKl15Vls2QbByoIZ6IQlci # General # ------------------------------------------------------------------------------ -VBV_DJANGO_LOCAL_DOCKER=True +IT_DJANGO_LOCAL_DOCKER=True IPYTHONDIR=/app/.ipython diff --git a/env_secrets/caprover.env b/env_secrets/caprover.env index c1f40ca61ea3d16d50152b2bb8fe7db0edcf9b6f..738c5c3f72aee2fde0ca9281f717700706269337 100644 GIT binary patch literal 1470 zcmV;v1wr}%M@dveQdv+`0O__L?wUFXNyNUimMyhIg|y018LuFXR81t}Wwe{a>iAo% znkUhB?_5$YPO{WPw8nZBV`Jc|orv6x83F z3zTI8dS0HnlGPyYB6QtM6lYdqvd(@^ z8$GLiF+g`u`tEoOq`(!h=hv%&`NJLCDi9$n*^fYzkp$({aqkj)C7j2{UrIl|#*kaX5* zdnk=ajB`0k%&#&+MD$mgV8bryas2&zq9eX=dJ3O+HQh^IO6^Yx$RxVVCe=#|HD^keVPFa7|ME@KaTZsK*-( zjV+qR}wOF8i{E~kv{%iCyqX1X>nvBS~*To*=+_?hke8t=& zvSY-UBnU!>HJPw4hG57~n^ofY@uXj&SJIL&S9+-+;SRx`AG@dP%YHEQvP_{Fv8jf% z;V}p*OMRA(2!H4Qb(Ldp1%DJc!D7U#RhsP7*ZKsI5N_5EV{0h>6+wemH)+BX9%7LR-IywBGXVU_Ec{oa1jKdyQ3rcqcLd$KwXiN2h|8;TxXOoT>t;lBI zG4*+CoE&sJav{EQg`4@9_5?t69CBsHfw9yNwN7b1v6UBrpHT#2M%Z+hvnv(); zhr@j5&Y+59^H1&ma7r=Bm?WI(oX^)g&rV5w|Q)ElUwk z8fYHe1af2%E5t80ied5gd#3qf-hU*OGCi^^%f<3}Z-^ESQ;rsoS=Q1mojVnn=Yw)L z;0+z*TyNGaKBK+HN+|}hVs3ZqHiM}}H!8MnGQSXumGoM7nl_V)G2=+5EWmMPT#|)( z>rzh0`MH=YfRI4vV@4WRLf=xc`?-Q=6IH-&i8uTu4-bw(Rod<+&Wzl}rEz>)k4>aB zps5!`6OV$-KZC|o7Yd~J`SvFHCy2SIj^sMWZGQEt^7Jx)EB((MB)rE@8$U?wuHCh2 zs9^4rf)cfFFJBKaljNniF?{D9{A8YDAJNpU`S)h4$u1;-v+Y-_U|Lpu`ZCNzaA%Jn z7%H>q_8=Nr%*oIbNrx0kTLm}-PR)CM8<~87KA3vgcx-g$zu1Z_n}+h%4C4WGW$H-|OqGnG zAf8her-r4cOHKR-OI5%^`-Ew?`ORwx^Twrc%ZziEMz8mt#lcjL3b-(h4 zzaVMiJ4Feh8R+c(E$@yQra9R}7>NVsM=H*6*a@j$%K}(l`I^FI$)w;Eom3N`O@US{ z?VS65pJb!e6xyQFSX*F<*9Nh4xB`ZnjoFyG9rlfIwI7?=`HK>X8C4)3V_~xr%03!Q zRRZviQ`^5Cj=zNd)V9EAyjFBH_x6c|96m|F4~YRlqtn69u(S+6Qf^?7xix#B$Q_~s z?hU4^5!#Tj>B)=lrK^cIM@Mu|^u-bDqRgicoEhaJ8waA)xO8E(E}+D@^Dnb20k?oY zMVy&K#MZ!E@{&V?;CYWPSc-ZQl2lQsbldHWm7!8zwzHuEl?a?2o^zeQV^xf`jo&wV zeLWo^!M%(GTKwq!Hiu`wOLokfWmC_jh@-`^d3g*fIsi!lDDnkTgl$z_vvoY7hM(Kb zP4fDRgKc0Y6(%+(4~ptG`mAa%D9q#dTLb0zYZE$tm%SvA*zJAT*D;SWk%t@cabrnY zOtB}~@66E5;p0J(v1-wk&X_r<^Y_odsWI+gY-S&8PEbzT+ERDG`8X<7vm|lfQS{h^ z_g!BBeGi5tzKlF*2|trzEw`1fF!Tk;*Eg-l6?5MOvH_dZw$F4d9w{W&if))_HdiJQ zmQF`^3`1?@DFY|noUoMMJ6U}3eDizW=^>Yj5TI6YWA3&Y?0c+PmK{}y|uQ`)+F z2(L7p1vZJ;r=0*X6RER&{1RbD=|?JPE98kIkPG8zU7tQ8+4Cm^86ir?zyabFL<9}7 z()?PC#71k#zbUf4*=scdvp1XsUF`r%h7$T4PNk_f%E^RgYam`h+?=9aoEjd^ri&Ek zBdV0{L=?0~QN*kl?$a3Vz>>%lxJ0C>Lg#8>PY4H!1D>kci^J8vn7E_pdqB!NOz{eR zRJeyFclnzbdP-H{NMh1YhHn?{SrNlEQmRj^Fn`K5(p&8x29n8VnIU>Y$5<$ zzh~#lX2?uny+VM-04<)S)y6$HX1x?Or9Jam9pqOs&tL=(*LMPyh3~W6jo0RQVFZiA z+=F32w?QLJ4iMySU(ao+Vur_Fid`cMdkiZ9T>w z&;0&M|0v(@>{VR5V_^T#LEF}yVxn!v*QPRJS*=6{6I0?VpP1p|f*8jV^Odc!+|xJF z(pYb3RW~nq@8*dH+($Q7lG2pd?5>fyaiDs|P2d})!>RbEQf!RuCWoE@FNGQ2c2yYf zr>hAk(fs^&RYkZ+xbY<&1FO0Vf$2VE0V~ojZkPdPH^z5rL*W#-FXSb?V(yec zLrVgxBE8_C9RK?&$-l{RdpX?W4AY!QW~JEvi&Joc`k{aPk5u4>YZ0`B;YKZ8_&bJCcJlC)qAiaB_3ug7Eo<^5Ekg66sPX+E%S5aJUCt!e?%sCNL-eq zz~CP(^v|8?B&jo?+zDdB=c9463G8WVsNaNgez!Yl^K7p%EROFuFl?+mjvtybiRKT6 zrLh=#j(Spn@cbF|)HP*p>|n)l?HaAGqU4<|sAvE(Gk9u;xKSUYZGkUOS-q_}QvpiS zc_Xne8GoQr$*OB}I5G{#FWrTCPhN&zi45o;5V`7)_S)gAo1B%&ySw%ku_E!_2;9ec_NG02wrHb}x+=-K@ z{I356e2c;37c;*f-Krl*+@ntj&Y_1gFKKgu_kg6!e*Df0jFfB#HIx}R&SgZqt~@{T zn1QN{j7k>Yd#kuAltT(6WIc85+@h5V#*INYdG6^NkHL7e{_Ss8fDk4?ZYAxkkD0;4 z^rAOp*JWTODvYuN&!P$svR-~YH{)32X0B$vW^Fe>M*SHG4%^SgfBiU*+NfY#Aj95} z4(RiK-(GUHoe849Zg5NChHEEA^&~r2qf` literal 1536 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 literal 1122 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 diff --git a/example.env b/example.env new file mode 100644 index 00000000..06329196 --- /dev/null +++ b/example.env @@ -0,0 +1 @@ +export IT_APP_ENVIRONMENT='development' diff --git a/local-setup-for-tests.sh b/local-setup-for-tests.sh deleted file mode 100755 index f861cfe5..00000000 --- a/local-setup-for-tests.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash - -#export DATABASE_HOST=postgres -#export DATABASE_PORT=5432 -#export DATABASE_URL=postgres://$DATABASE_USER:$PG_PASSWORD@$DATABASE_HOST:$DATABASE_PORT/$DATABASE_NAME -# -#echo $DATABASE_URL -#DJANGO_SETTINGS_MODULE=config.settings.base -#DATABASE_NAME=vbv_lernwelt -SKIP_SETUP=false -## - -echo "Setting up VBV Project for Local usage" -if [ "$SKIP_SETUP" = false ]; then - if [ -z "$PG_PORT" ]; then # if the port is set in the env, use iterg - DB_PORT=""; - else - DB_PORT="-p $PG_PORT"; - fi - if [ -z "$PG_USER" ]; then # if the user is set in the env, use it - DB_USER=""; - else - DB_USER="-U $PG_USER"; - fi - echo "psql -h localhost --port=$DB_PORT --username=$DB_USER -c 'drop database if exists' $DATABASE_NAME;" - - echo "Drop all connections to the database" - psql -h localhost --port=$DB_PORT --username=$DB_USER -c "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '$DATABASE_NAME' AND pid <> pg_backend_pid();" - - echo "Drop database: $DATABASE_NAME" - psql -h localhost --port=$DB_PORT --username=$DB_USER -c "drop database if exists $DATABASE_NAME;" - - echo "Create database: $DATABASE_NAME" - psql -h localhost --port=$DB_PORT --username=$DB_USER -c "create database $DATABASE_NAME;" - - # reset data - python3 server/manage.py createcachetable --settings="$DJANGO_SETTINGS_MODULE" - python3 server/manage.py migrate --settings="$DJANGO_SETTINGS_MODULE" - python3 server/manage.py create_default_users --settings="$DJANGO_SETTINGS_MODULE" - python3 server/manage.py create_default_learningpath --settings="$DJANGO_SETTINGS_MODULE" -# -# # make django translations - (cd server && python3 manage.py compilemessages --settings="$DJANGO_SETTINGS_MODULE") -fi - diff --git a/prepare_server.sh b/prepare_server.sh new file mode 100755 index 00000000..655f1fe5 --- /dev/null +++ b/prepare_server.sh @@ -0,0 +1,69 @@ +#!/bin/bash + +if [ -z "$CI" ]; +then + # kill all subprocess on exit + trap "exit" INT TERM ERR + trap "kill 0" EXIT +else echo "CI is set to $CI"; +fi + +# script should fail when any process returns non zero code +set -ev + +# handle arguments +SKIP_SETUP=false +START_BACKGROUND=false + +for i in "$@" +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 +done + +echo "SKIP_SETUP = ${SKIP_SETUP}" + +POSTGRES_DB=${POSTGRES_DB:-vbv_lernwelt} +DJANGO_PORT=${DJANGO_PORT:-8000} + +mypsql() { + psql -h "${POSTGRES_HOST:-localhost}" -p "${POSTGRES_PORT:-5432}" -U "${POSTGRES_USER:-postgres}" "$@" +} + +if [ "$SKIP_SETUP" = false ]; then + echo "Drop all connections to $POSTGRES_DB" + mypsql -c "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '$POSTGRES_DB' AND pid <> pg_backend_pid();" > /dev/null 2>&1 + echo "Drop database: $POSTGRES_DB" + mypsql -c "drop database if exists $POSTGRES_DB;" + echo "Create database: $POSTGRES_DB" + mypsql -c "create database $POSTGRES_DB;" + + echo "initialize database for django" + python3 server/manage.py createcachetable --settings="$DJANGO_SETTINGS_MODULE" + python3 server/manage.py migrate --settings="$DJANGO_SETTINGS_MODULE" + python3 server/manage.py create_default_users --settings="$DJANGO_SETTINGS_MODULE" + python3 server/manage.py create_default_learningpath --settings="$DJANGO_SETTINGS_MODULE" + + # make django translations + (cd server && python3 manage.py compilemessages --settings="$DJANGO_SETTINGS_MODULE") +else + echo "else" +# python3 src/manage.py recreate_customer_data_for_integration_tests --settings="$DJANGO_SETTINGS_MODULE" +fi + +if [ "$START_BACKGROUND" = true ]; then + python3 server/manage.py runserver "${DJANGO_PORT}" --settings="$DJANGO_SETTINGS_MODULE" > /dev/null & +else + python3 server/manage.py runserver "${DJANGO_PORT}" --settings="$DJANGO_SETTINGS_MODULE" +fi diff --git a/prepare_server_cypress.sh b/prepare_server_cypress.sh index 8ef42ba9..36789573 100755 --- a/prepare_server_cypress.sh +++ b/prepare_server_cypress.sh @@ -1,91 +1,6 @@ -#!/bin/bash +export POSTGRES_DB=vbv_lernwelt_cypress +export DJANGO_PORT=8001 +export DJANGO_SETTINGS_MODULE=config.settings.test_cypress +export IT_APP_ENVIRONMENT=development -if [ -z "$CI" ]; -then - # kill all subprocess on exit - trap "exit" INT TERM ERR - trap "kill 0" EXIT -else echo "CI is set to $CI"; -fi - -# script should fail when any process returns non zero code -set -ev - -# handle arguments -SKIP_SETUP=false -START_BACKGROUND=false -PROXY_VUE=false - -for i in "$@" -do -case $i in - --start-background) - START_BACKGROUND=true - shift # past argument - ;; - --skip-setup) - SKIP_SETUP=true - shift # past argument with no value - ;; - --proxy-vue) - PROXY_VUE=true - shift # past argument with no value - ;; - *) - # unknown option - ;; -esac -done - -echo "SKIP_SETUP = ${SKIP_SETUP}" - -DJANGO_SETTINGS_MODULE=config.settings.test_cypress -CYPRESS_DB=vbv_lernwelt_cypress - -if [ "$SKIP_SETUP" = false ]; then - if [ -z "$PG_PORT" ]; then # if the port is set in the env, use iterg - DB_PORT=""; - else - DB_PORT="-p $PG_PORT"; - fi - if [ -z "$PG_USER" ]; then # if the user is set in the env, use it - DB_USER=""; - else - DB_USER="-U $PG_USER"; - fi - echo "psql -h localhost $DB_PORT $DB_USER -c 'drop database if exists $CYPRESS_DB;'" - # create database - psql -h localhost $DB_PORT $DB_USER -c "drop database if exists $CYPRESS_DB;" - psql -h localhost $DB_PORT $DB_USER -c "create database $CYPRESS_DB;" - - # reset data - # python3 src/manage.py randomdata --settings="$DJANGO_SETTINGS_MODULE" - python3 server/manage.py createcachetable --settings="$DJANGO_SETTINGS_MODULE" - python3 server/manage.py migrate --settings="$DJANGO_SETTINGS_MODULE" - - # make django translations - (cd server && python3 manage.py compilemessages --settings="$DJANGO_SETTINGS_MODULE") - - -else - echo "else" -# python3 src/manage.py recreate_customer_data_for_integration_tests --settings="$DJANGO_SETTINGS_MODULE" -fi - -if [ "$PROXY_VUE" = true ]; then - export DJANGO_VUE_LANDINGPAGE_PROXY=http://localhost:8080/ -fi - -# install cypress here to avoid problems with `npm install` on the iesc servers -#CYPRESS_INSTALLED=0 -##npx --no-install cypress --version || CYPRESS_INSTALLED=$? -#if [ $CYPRESS_INSTALLED -ne 0 ]; then -# echo "install cypress" -## npm install cypress@5.6.0 @testing-library/cypress@7.0.2 --no-save -#fi - -if [ "$START_BACKGROUND" = true ]; then - python3 server/manage.py runserver 8001 --settings="$DJANGO_SETTINGS_MODULE" > /dev/null & -else - python3 server/manage.py runserver 8001 --settings="$DJANGO_SETTINGS_MODULE" -fi +./prepare_server.sh "$@" diff --git a/server/config/settings/base.py b/server/config/settings/base.py index 9894b2a7..ba700be2 100644 --- a/server/config/settings/base.py +++ b/server/config/settings/base.py @@ -10,21 +10,17 @@ from environs import Env from vbv_lernwelt.core.utils import structlog_add_app_info SERVER_ROOT_DIR = Path(__file__).resolve(strict=True).parent.parent.parent -# vbv_lernwelt/ APPS_DIR = SERVER_ROOT_DIR / "vbv_lernwelt" env = Env() -READ_DOT_ENV_FILE = env.bool("VBV_DJANGO_READ_DOT_ENV_FILE", default=False) -if READ_DOT_ENV_FILE: - # OS environment variables take precedence over variables from .env - env.read_env(str(SERVER_ROOT_DIR / "example.env")) - -DJANGO_DEV_MODE = env("VBV_DJANGO_DEV_MODE", default="development") +# set to "development" for local development +APP_ENVIRONMENT = env("IT_APP_ENVIRONMENT") # GENERAL # ------------------------------------------------------------------------------ # https://docs.djangoproject.com/en/dev/ref/settings/#debug -DEBUG = env.bool("VBV_DJANGO_DEBUG", False) +DEBUG = env.bool("IT_DJANGO_DEBUG", True if APP_ENVIRONMENT == "development" else False) + # Local time zone. Choices are # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name # though not all of them may be available with every OS. @@ -48,8 +44,8 @@ LOCALE_PATHS = [str(SERVER_ROOT_DIR / "locale")] # https://docs.djangoproject.com/en/dev/ref/settings/#databases DATABASES = { "default": env.dj_db_url( - "VBV_DATABASE_URL", - default="postgres://vbv_lernwelt@localhost:5432/vbv_lernwelt", + "DATABASE_URL", + default="postgres://postgres@localhost:5432/vbv_lernwelt", ) } DATABASES["default"]["ATOMIC_REQUESTS"] = True # noqa F405 @@ -308,11 +304,14 @@ MANAGERS = ADMINS # https://docs.djangoproject.com/en/dev/ref/settings/#logging # See https://docs.djangoproject.com/en/dev/topics/logging for # more details on how to customize your logging configuration. -VBV_DJANGO_LOGGING_CONF = env( - "VBV_DJANGO_LOGGING_CONF", default="VBV_DJANGO_LOGGING_CONF_JSON_FILE" -) -if VBV_DJANGO_LOGGING_CONF == "VBV_DJANGO_LOGGING_CONF_CONSOLE_COLOR": +logging_conf_default = "IT_DJANGO_LOGGING_CONF_JSON_FILE" +if DEBUG: + logging_conf_default = "IT_DJANGO_LOGGING_CONF_CONSOLE_COLOR" + +IT_DJANGO_LOGGING_CONF = env("IT_DJANGO_LOGGING_CONF", default=logging_conf_default) + +if IT_DJANGO_LOGGING_CONF == "IT_DJANGO_LOGGING_CONF_CONSOLE_COLOR": timestamper = structlog.processors.TimeStamper(fmt="%Y-%m-%d %H:%M:%S") LOGGING = { "version": 1, @@ -476,12 +475,12 @@ SPECTACULAR_SETTINGS = { SECRET_KEY = env( - "VBV_DJANGO_SECRET_KEY", + "IT_DJANGO_SECRET_KEY", default="J9FiYN31FuY7lHrmx9Mpai3GGpTVCxakEclOfCLretDe7bTf2DtTsgazJ0aIMtbq", ) # https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts ALLOWED_HOSTS = env.list( - "VBV_DJANGO_ALLOWED_HOSTS", default=["localhost", "0.0.0.0", "127.0.0.1"] + "IT_DJANGO_ALLOWED_HOSTS", default=["localhost", "0.0.0.0", "127.0.0.1"] ) @@ -489,21 +488,21 @@ ALLOWED_HOSTS = env.list( CACHES = { "default": { "BACKEND": env( - "VBV_DJANGO_CACHE_BACKEND", + "IT_DJANGO_CACHE_BACKEND", default="django.core.cache.backends.db.DatabaseCache", ), - "LOCATION": env("VBV_DJANGO_CACHE_LOCATION", default="django_cache_table"), + "LOCATION": env("IT_DJANGO_CACHE_LOCATION", default="django_cache_table"), } } -if "django_redis.cache.RedisCache" in env("VBV_DJANGO_CACHE_BACKEND", default=""): +if "django_redis.cache.RedisCache" in env("IT_DJANGO_CACHE_BACKEND", default=""): CACHES = { "default": { "BACKEND": env( - "VBV_DJANGO_CACHE_BACKEND", + "IT_DJANGO_CACHE_BACKEND", default="django.core.cache.backends.db.DatabaseCache", ), - "LOCATION": env("VBV_DJANGO_CACHE_LOCATION", default="django_cache_table"), + "LOCATION": env("IT_DJANGO_CACHE_LOCATION", default="django_cache_table"), "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", # Mimicing memcache behavior. @@ -530,7 +529,7 @@ OAUTH = { } } -if DJANGO_DEV_MODE == "development": +if APP_ENVIRONMENT == "development": # http://whitenoise.evans.io/en/latest/django.html#using-whitenoise-in-development INSTALLED_APPS = ["whitenoise.runserver_nostatic"] + INSTALLED_APPS # noqa F405 @@ -547,7 +546,7 @@ if DJANGO_DEV_MODE == "development": # } # https://django-debug-toolbar.readthedocs.io/en/latest/installation.html#internal-ips INTERNAL_IPS = ["127.0.0.1", "10.0.2.2"] - if env.bool("VBV_DJANGO_LOCAL_DOCKER", False): + if env.bool("IT_DJANGO_LOCAL_DOCKER", False): import socket hostname, _, ips = socket.gethostbyname_ex(socket.gethostname()) @@ -564,13 +563,13 @@ if DJANGO_DEV_MODE == "development": # https://django-extensions.readthedocs.io/en/latest/installation_instructions.html#configuration INSTALLED_APPS += ["django_extensions"] # noqa F405 -if DJANGO_DEV_MODE in ["production", "caprover"]: +if APP_ENVIRONMENT in ["production", "caprover"]: # SECURITY # ------------------------------------------------------------------------------ # https://docs.djangoproject.com/en/dev/ref/settings/#secure-proxy-ssl-header SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https") # https://docs.djangoproject.com/en/dev/ref/settings/#secure-ssl-redirect - SECURE_SSL_REDIRECT = env.bool("VBV_DJANGO_SECURE_SSL_REDIRECT", default=True) + SECURE_SSL_REDIRECT = env.bool("IT_DJANGO_SECURE_SSL_REDIRECT", default=True) # https://docs.djangoproject.com/en/dev/ref/settings/#session-cookie-secure SESSION_COOKIE_SECURE = True # https://docs.djangoproject.com/en/dev/ref/settings/#csrf-cookie-secure @@ -604,7 +603,7 @@ if DJANGO_DEV_MODE in ["production", "caprover"]: default="VBV Lernwelt ", ) # https://docs.djangoproject.com/en/dev/ref/settings/#server-email - SERVER_EMAIL = env("VBV_DJANGO_SERVER_EMAIL", default=DEFAULT_FROM_EMAIL) + SERVER_EMAIL = env("IT_DJANGO_SERVER_EMAIL", default=DEFAULT_FROM_EMAIL) # https://docs.djangoproject.com/en/dev/ref/settings/#email-subject-prefix EMAIL_SUBJECT_PREFIX = env( "DJANGO_EMAIL_SUBJECT_PREFIX", @@ -614,7 +613,7 @@ if DJANGO_DEV_MODE in ["production", "caprover"]: # ADMIN # ------------------------------------------------------------------------------ # Django Admin URL regex. - ADMIN_URL = env("VBV_DJANGO_ADMIN_URL") + ADMIN_URL = env("IT_DJANGO_ADMIN_URL", 'admin/') # Anymail # ------------------------------------------------------------------------------ @@ -633,7 +632,7 @@ if DJANGO_DEV_MODE in ["production", "caprover"]: from sentry_sdk.integrations.logging import LoggingIntegration from sentry_sdk.integrations.redis import RedisIntegration - SENTRY_DSN = env("VBV_SENTRY_DSN") + SENTRY_DSN = env("IT_SENTRY_DSN") SENTRY_LOG_LEVEL = env.int("DJANGO_SENTRY_LOG_LEVEL", logging.INFO) sentry_logging = LoggingIntegration( diff --git a/server/config/settings/test.py b/server/config/settings/test.py index 90c4b66c..39548444 100644 --- a/server/config/settings/test.py +++ b/server/config/settings/test.py @@ -9,7 +9,7 @@ from .base import env # ------------------------------------------------------------------------------ # https://docs.djangoproject.com/en/dev/ref/settings/#secret-key SECRET_KEY = env( - "VBV_DJANGO_SECRET_KEY", + "IT_DJANGO_SECRET_KEY", default="1NpUCSvAKLpDZL9e3tqDaUe8Kk2xAuF1tXosFjBanc4lFCgNcfBp02MD3UjB72ZS", ) # https://docs.djangoproject.com/en/dev/ref/settings/#test-runner diff --git a/server/config/settings/test_cypress.py b/server/config/settings/test_cypress.py index dd94cb1f..e3c625b1 100644 --- a/server/config/settings/test_cypress.py +++ b/server/config/settings/test_cypress.py @@ -9,7 +9,7 @@ from .base import env # ------------------------------------------------------------------------------ # https://docs.djangoproject.com/en/dev/ref/settings/#secret-key SECRET_KEY = env( - "VBV_DJANGO_SECRET_KEY", + "IT_DJANGO_SECRET_KEY", default="1LhwZ0DvP4cGBgbBdCfaBQV7eiaOc4jWKdzO9WEXLFT7AaqBN6jqd0uyaZeAZ19K", ) diff --git a/server/example.env b/server/example.env deleted file mode 100644 index 7e4c6848..00000000 --- a/server/example.env +++ /dev/null @@ -1,11 +0,0 @@ -export VBV_DATABASE_URL='postgres://vbv_lernwelt@localhost:5432/vbv_lernwelt' -#export VBV_DJANGO_LOGGING_CONF=VBV_DJANGO_LOGGING_CONF_CONSOLE_COLOR -export VBV_DJANGO_DEBUG=True - -# oauth is for the moment not used -export OAUTH_CLIENT_ID=iterativ -export OAUTH_CLIENT_SECRET=abced-1234 -export OAUTH_ACCESS_TOKEN_URL=https://sso.test.b.lernetz.host/auth/realms/vbv/protocol/openid-connect/token -export OAUTH_AUTHORIZE_URL=https://sso.test.b.lernetz.host/auth/realms/vbv/protocol/openid-connect/auth -export OAUTH_API_BASE_URL=https://sso.test.b.lernetz.host/auth/realms/vbv/protocol/openid-connect/ -export OAUTH_LOCAL_REDIRECT_URI=http://localhost:8000/api/oauth/callback/ diff --git a/server/vbv_lernwelt/core/create_default_users.py b/server/vbv_lernwelt/core/create_default_users.py index 82960734..5cd12ce7 100644 --- a/server/vbv_lernwelt/core/create_default_users.py +++ b/server/vbv_lernwelt/core/create_default_users.py @@ -9,13 +9,11 @@ def create_default_users(user_model=User, group_model=Group): content_creator_grop, created = group_model.objects.get_or_create(name='content_creator_grop') student_group, created = group_model.objects.get_or_create(name='student_group') - admin_user, created = _get_or_create_user(user_model=user_model, - username='admin', - password='admin') - admin_user.is_superuser=True + admin_user, created = _get_or_create_user(user_model=user_model, username='admin', password='admin') + admin_user.is_superuser = True admin_user.groups.add(admin_group) - admin_user.save() + student_user, created = _get_or_create_user(user_model=user_model, username='student', password='student') student_user.groups.add(student_group) student_user.save() diff --git a/server/vbv_lernwelt/core/utils.py b/server/vbv_lernwelt/core/utils.py index af7f5938..637707c7 100644 --- a/server/vbv_lernwelt/core/utils.py +++ b/server/vbv_lernwelt/core/utils.py @@ -10,8 +10,8 @@ def structlog_add_app_info( logger: logging.Logger, method_name: str, event_dict: EventDict ) -> EventDict: event_dict["django_app"] = "vbv_lernwelt" - event_dict["django_dev_mode"] = settings.DJANGO_DEV_MODE - event_dict["django_app_dev_mode"] = f"vbv_lernwelt_{settings.DJANGO_DEV_MODE}" + event_dict["APP_ENVIRONMENT"] = settings.APP_ENVIRONMENT + event_dict["django_app_dev_mode"] = f"vbv_lernwelt_{settings.APP_ENVIRONMENT}" return event_dict diff --git a/server/vbv_lernwelt/core/views.py b/server/vbv_lernwelt/core/views.py index 5fe68853..50597690 100644 --- a/server/vbv_lernwelt/core/views.py +++ b/server/vbv_lernwelt/core/views.py @@ -19,8 +19,9 @@ def vue_home(request): content_type = headers.get('content-type', 'text/html') return HttpResponse(res.text, content_type=content_type) except Exception as e: - print(f'Can not connect to vue dev server at {settings.IT_SERVE_VUE_URL}:', e) - return + return HttpResponse( + f'Can not connect to vue dev server at {settings.IT_SERVE_VUE_URL}: {e}' + ) # render index.html from `npm run build` return render(request, 'index.html', {}) diff --git a/server/vbv_lernwelt/learnpath/tests/create_default_learning_path.py b/server/vbv_lernwelt/learnpath/tests/create_default_learning_path.py index 5e8a7527..17513b03 100644 --- a/server/vbv_lernwelt/learnpath/tests/create_default_learning_path.py +++ b/server/vbv_lernwelt/learnpath/tests/create_default_learning_path.py @@ -159,9 +159,6 @@ von Neukunden zu benützen circle_7 = CircleFactory.create(title="Prüfungsvorbereitung", parent=lp, topic=tp) - - - def delete_default_learning_path(): LearningUnit.objects.all().delete() LearningSequence.objects.all().delete()