Script migration: vérification existence departements dans base cible

This commit is contained in:
Emmanuel Viennet 2021-09-17 09:15:12 +02:00
parent 7d59b52018
commit 45352d9248
4 changed files with 45 additions and 6 deletions

View File

@ -38,8 +38,8 @@ from operator import itemgetter
from xml.etree import ElementTree from xml.etree import ElementTree
import flask import flask
from flask import url_for, g from flask import url_for
from flask import current_app from flask import current_app, g
from flask_login import current_user from flask_login import current_user
from config import Config 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 """List all formsemestres matching etape, XML format
DEPRECATED: use formsemestre_list() DEPRECATED: use formsemestre_list()
""" """
log("Warning: calling deprecated XMLgetFormsemestres") current_app.logger.debug("Warning: calling deprecated XMLgetFormsemestres")
args = {} args = {}
if etape_apo: if etape_apo:
args["etape_apo"] = etape_apo args["etape_apo"] = etape_apo

View File

@ -1,7 +1,7 @@
# -*- mode: python -*- # -*- mode: python -*-
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
SCOVERSION = "9.0.28" SCOVERSION = "9.0.29"
SCONAME = "ScoDoc" SCONAME = "ScoDoc"

View File

@ -264,6 +264,17 @@ def create_dept(dept): # create-dept
return 0 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() @app.cli.command()
@with_appcontext @with_appcontext
def import_scodoc7_users(): # import-scodoc7-users def import_scodoc7_users(): # import-scodoc7-users

View File

@ -65,6 +65,27 @@ else
SCODOC7_HOME="$1" # racine de l'archive importée SCODOC7_HOME="$1" # racine de l'archive importée
fi 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" # --- 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 # Bases appartenant à www-data: les attribue à "scodoc" pour le script de migration SQL
# qui tourne en tant que "scodoc" # qui tourne en tant que "scodoc"
@ -160,6 +181,8 @@ migrate_local_files() {
# ------ MAIN # ------ MAIN
check_existing_depts
change_scodoc_file_ownership change_scodoc_file_ownership
if [ "$INPLACE" == 1 ] if [ "$INPLACE" == 1 ]
@ -190,10 +213,15 @@ su -c "(cd $SCODOC_DIR && source venv/bin/activate && flask import-scodoc7-users
# ----- Migration bases départements # ----- Migration bases départements
# les départements ScoDoc7 ont été déplacés dans /opt/scodoc-data/config/dept # 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/<dept_name>/... donc minuscules/majuscules
# alors qu'en ScoDoc9 elles seront .../archives/<dept_id>/ : le numéro interne du département,
# puisque l'acronyme peut changer.
for f in "$SCODOC_VAR_DIR"/config/depts/*.cfg for f in "$SCODOC_VAR_DIR"/config/depts/*.cfg
do 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 db_name=$(echo "SCO$dept" | tr "[:lower:]" "[:upper:]") # nom de BD toujours en majuscule
echo echo
echo "----------------------------------------------" echo "----------------------------------------------"