From 45352d9248bc8fc729a779924ec1cd4edd5d077f Mon Sep 17 00:00:00 2001 From: Emmanuel Viennet Date: Fri, 17 Sep 2021 09:15:12 +0200 Subject: [PATCH] =?UTF-8?q?Script=20migration:=20v=C3=A9rification=20exist?= =?UTF-8?q?ence=20departements=20dans=20base=20cible?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/notes.py | 6 +++--- sco_version.py | 2 +- scodoc.py | 11 +++++++++++ tools/migrate_from_scodoc7.sh | 32 ++++++++++++++++++++++++++++++-- 4 files changed, 45 insertions(+), 6 deletions(-) diff --git a/app/views/notes.py b/app/views/notes.py index 6893e2f6c9..baaf1ea809 100644 --- a/app/views/notes.py +++ b/app/views/notes.py @@ -38,8 +38,8 @@ from operator import itemgetter from xml.etree import ElementTree import flask -from flask import url_for, g -from flask import current_app +from flask import url_for +from flask import current_app, g from flask_login import current_user from config import Config @@ -637,7 +637,7 @@ def XMLgetFormsemestres(etape_apo=None, formsemestre_id=None, REQUEST=None): """List all formsemestres matching etape, XML format DEPRECATED: use formsemestre_list() """ - log("Warning: calling deprecated XMLgetFormsemestres") + current_app.logger.debug("Warning: calling deprecated XMLgetFormsemestres") args = {} if etape_apo: args["etape_apo"] = etape_apo diff --git a/sco_version.py b/sco_version.py index 8fb397ce7a..cbe325861a 100644 --- a/sco_version.py +++ b/sco_version.py @@ -1,7 +1,7 @@ # -*- mode: python -*- # -*- coding: utf-8 -*- -SCOVERSION = "9.0.28" +SCOVERSION = "9.0.29" SCONAME = "ScoDoc" diff --git a/scodoc.py b/scodoc.py index dd7e3f1107..c32a84195d 100755 --- a/scodoc.py +++ b/scodoc.py @@ -264,6 +264,17 @@ def create_dept(dept): # create-dept return 0 +@app.cli.command() +@click.argument("depts", nargs=-1) +def list_depts(depts=""): # list-dept + """If dept exists, print it, else nothing. + Called without arguments, list all depts along with their ids. + """ + for dept in models.Departement.query.order_by(models.Departement.id): + if not depts or dept.acronym in depts: + print(f"{dept.id}\t{dept.acronym}") + + @app.cli.command() @with_appcontext def import_scodoc7_users(): # import-scodoc7-users diff --git a/tools/migrate_from_scodoc7.sh b/tools/migrate_from_scodoc7.sh index 67ba70d662..f8af51bd92 100755 --- a/tools/migrate_from_scodoc7.sh +++ b/tools/migrate_from_scodoc7.sh @@ -65,6 +65,27 @@ else SCODOC7_HOME="$1" # racine de l'archive importée fi +# --- 1. Vérifie qu'aucun des départements à importer n'existe déjà +check_existing_depts() { + sco7_depts="" + for f in "${SCODOC7_HOME}/var/scodoc/"/config/depts/*.cfg + do + dept=$(basename "${f%.*}") # le nom du dept peut-être en minuscules + sco9_name=$(echo "$dept" | tr "[:lower:]" "[:upper:]") # acronym ScoDoc 9 toujours en majuscule + sco7_depts="$sco7_depts $sco9_name" + done + nb_existing=$(echo "$sco7_depts" | su -c "cd $SCODOC_DIR && source venv/bin/activate && xargs flask list-depts" "$SCODOC_USER" | wc -l) + if [ "$nb_existing" -gt 0 ] + then + echo "Attention: il existe déjà $nb_existing départements de même nom que celles" + echo "que vous souhaitez importer !" + echo "Département qui allaient être importées: $sco7_depts" + echo "=> arrêt." + exit 2 + fi +} + + # --- 2. Propriétaire des bases de données pour import "en place" # Bases appartenant à www-data: les attribue à "scodoc" pour le script de migration SQL # qui tourne en tant que "scodoc" @@ -160,6 +181,8 @@ migrate_local_files() { # ------ MAIN +check_existing_depts + change_scodoc_file_ownership if [ "$INPLACE" == 1 ] @@ -190,10 +213,15 @@ su -c "(cd $SCODOC_DIR && source venv/bin/activate && flask import-scodoc7-users # ----- Migration bases départements # les départements ScoDoc7 ont été déplacés dans /opt/scodoc-data/config/dept -# (ils ne sont d'ailleurs plus utilisés par ScoDoc 9) +# (ils ne sont plus utilisés par ScoDoc 9) +# Le nom du dept peut-être en minuscules et/ou majuscules (Geii, GEII...) +# Le nom de BD ScoDoc7 est toujours en majuscules (SCOGEII) +# Rappel: les archives ScoDoc7 étaient .../archives//... donc minuscules/majuscules +# alors qu'en ScoDoc9 elles seront .../archives// : le numéro interne du département, +# puisque l'acronyme peut changer. for f in "$SCODOC_VAR_DIR"/config/depts/*.cfg do - dept=$(basename "${f%.*}") # le nom du dept peut-être en minuscules et/ou majuscules (geii, GEII...) + dept=$(basename "${f%.*}") # le nom du dept peut-être en minuscules db_name=$(echo "SCO$dept" | tr "[:lower:]" "[:upper:]") # nom de BD toujours en majuscule echo echo "----------------------------------------------"