Import synchro Apo: fix #116
This commit is contained in:
parent
7bc5a5ffd1
commit
5d527edb71
@ -153,7 +153,7 @@ def get_inscrits_etape(code_etape, anneeapogee=None, ntrials=4, use_cache=True):
|
|||||||
ntrials: try several time the same request, useful for some bad web services
|
ntrials: try several time the same request, useful for some bad web services
|
||||||
use_cache: use (redis) cache
|
use_cache: use (redis) cache
|
||||||
"""
|
"""
|
||||||
log("get_inscrits_etape: code=%s anneeapogee=%s" % (code_etape, anneeapogee))
|
log(f"get_inscrits_etape: code={code_etape} anneeapogee={anneeapogee}")
|
||||||
if anneeapogee is None:
|
if anneeapogee is None:
|
||||||
anneeapogee = str(time.localtime()[0])
|
anneeapogee = str(time.localtime()[0])
|
||||||
if use_cache:
|
if use_cache:
|
||||||
|
@ -87,7 +87,7 @@ def formsemestre_synchro_etuds(
|
|||||||
etuds: apres sélection par l'utilisateur, la liste des étudiants selectionnés
|
etuds: apres sélection par l'utilisateur, la liste des étudiants selectionnés
|
||||||
que l'on va importer/inscrire
|
que l'on va importer/inscrire
|
||||||
"""
|
"""
|
||||||
log("formsemestre_synchro_etuds: formsemestre_id=%s" % formsemestre_id)
|
log(f"formsemestre_synchro_etuds: formsemestre_id={formsemestre_id}")
|
||||||
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
sem = sco_formsemestre.get_formsemestre(formsemestre_id)
|
||||||
sem["etape_apo_str"] = sco_formsemestre.formsemestre_etape_apo_str(sem)
|
sem["etape_apo_str"] = sco_formsemestre.formsemestre_etape_apo_str(sem)
|
||||||
# Write access ?
|
# Write access ?
|
||||||
@ -182,35 +182,35 @@ def formsemestre_synchro_etuds(
|
|||||||
if not dialog_confirmed:
|
if not dialog_confirmed:
|
||||||
# Confirmation
|
# Confirmation
|
||||||
if a_importer:
|
if a_importer:
|
||||||
H.append("<h3>Etudiants à importer et inscrire :</h3><ol>")
|
H.append("<h3>Étudiants à importer et inscrire :</h3><ol>")
|
||||||
for key in a_importer:
|
for key in a_importer:
|
||||||
H.append("<li>%(fullname)s</li>" % etudsapo_ident[key])
|
nom = f"""{etudsapo_ident[key]['nom']} {etudsapo_ident[key].get("prenom", "")}"""
|
||||||
|
H.append(f"<li>{nom}</li>")
|
||||||
H.append("</ol>")
|
H.append("</ol>")
|
||||||
|
|
||||||
if a_inscrire:
|
if a_inscrire:
|
||||||
H.append("<h3>Etudiants à inscrire :</h3><ol>")
|
H.append("<h3>Étudiants à inscrire :</h3><ol>")
|
||||||
for key in a_inscrire:
|
for key in a_inscrire:
|
||||||
H.append("<li>%(fullname)s</li>" % etudsapo_ident[key])
|
nom = f"""{etudsapo_ident[key]['nom']} {etudsapo_ident[key].get("prenom", "")}"""
|
||||||
|
H.append(f"<li>{nom}</li>")
|
||||||
H.append("</ol>")
|
H.append("</ol>")
|
||||||
|
|
||||||
a_inscrire_en_double = inscrits_ailleurs.intersection(a_inscrire)
|
a_inscrire_en_double = inscrits_ailleurs.intersection(a_inscrire)
|
||||||
if a_inscrire_en_double:
|
if a_inscrire_en_double:
|
||||||
H.append("<h3>dont étudiants déjà inscrits:</h3><ol>")
|
H.append("<h3>dont étudiants déjà inscrits:</h3><ol>")
|
||||||
for key in a_inscrire_en_double:
|
for key in a_inscrire_en_double:
|
||||||
H.append(
|
nom = f"""{etudsapo_ident[key]['nom']} {etudsapo_ident[key].get("prenom", "")}"""
|
||||||
'<li class="inscrailleurs">%(fullname)s</li>'
|
H.append(f'<li class="inscrailleurs">{nom}</li>')
|
||||||
% etudsapo_ident[key]
|
|
||||||
)
|
|
||||||
H.append("</ol>")
|
H.append("</ol>")
|
||||||
|
|
||||||
if a_desinscrire:
|
if a_desinscrire:
|
||||||
H.append("<h3>Etudiants à désinscrire :</h3><ol>")
|
H.append("<h3>Étudiants à désinscrire :</h3><ol>")
|
||||||
for key in a_desinscrire:
|
for key in a_desinscrire:
|
||||||
etud = sco_etud.get_etud_info(filled=True, code_nip=key)[0]
|
etud = sco_etud.get_etud_info(filled=True, code_nip=key)[0]
|
||||||
H.append('<li class="desinscription">%(nomprenom)s</li>' % etud)
|
H.append('<li class="desinscription">%(nomprenom)s</li>' % etud)
|
||||||
H.append("</ol>")
|
H.append("</ol>")
|
||||||
if a_desinscrire_without_key:
|
if a_desinscrire_without_key:
|
||||||
H.append("<h3>Etudiants à désinscrire (sans code):</h3><ol>")
|
H.append("<h3>Étudiants à désinscrire (sans code):</h3><ol>")
|
||||||
for etudid in a_desinscrire_without_key:
|
for etudid in a_desinscrire_without_key:
|
||||||
etud = inscrits_without_key_all[etudid]
|
etud = inscrits_without_key_all[etudid]
|
||||||
sco_etud.format_etud_ident(etud)
|
sco_etud.format_etud_ident(etud)
|
||||||
@ -669,7 +669,7 @@ def do_import_etuds_from_portal(sem, a_importer, etudsapo_ident):
|
|||||||
# here we try to remove all created students
|
# here we try to remove all created students
|
||||||
cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor)
|
cursor = cnx.cursor(cursor_factory=ndb.ScoDocCursor)
|
||||||
for etudid in created_etudids:
|
for etudid in created_etudids:
|
||||||
log("do_import_etuds_from_portal: deleting etudid=%s" % etudid)
|
log(f"do_import_etuds_from_portal: deleting etudid={etudid}")
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
"delete from notes_moduleimpl_inscription where etudid=%(etudid)s",
|
"delete from notes_moduleimpl_inscription where etudid=%(etudid)s",
|
||||||
{"etudid": etudid},
|
{"etudid": etudid},
|
||||||
@ -702,7 +702,7 @@ def do_import_etuds_from_portal(sem, a_importer, etudsapo_ident):
|
|||||||
|
|
||||||
ScolarNews.add(
|
ScolarNews.add(
|
||||||
typ=ScolarNews.NEWS_INSCR,
|
typ=ScolarNews.NEWS_INSCR,
|
||||||
text="Import Apogée de %d étudiants en " % len(created_etudids),
|
text=f"Import Apogée de {len(created_etudids)} étudiants en ",
|
||||||
obj=sem["formsemestre_id"],
|
obj=sem["formsemestre_id"],
|
||||||
max_frequency=10 * 60, # 10'
|
max_frequency=10 * 60, # 10'
|
||||||
)
|
)
|
||||||
@ -716,6 +716,7 @@ def do_import_etud_admission(
|
|||||||
"""
|
"""
|
||||||
annee_courante = time.localtime()[0]
|
annee_courante = time.localtime()[0]
|
||||||
serie_bac, spe_bac = get_bac(etud)
|
serie_bac, spe_bac = get_bac(etud)
|
||||||
|
# Les champs n'ont pas les mêmes noms dans Apogee et dans ScoDoc:
|
||||||
args = {
|
args = {
|
||||||
"etudid": etudid,
|
"etudid": etudid,
|
||||||
"annee": get_opt_str(etud, "inscription") or annee_courante,
|
"annee": get_opt_str(etud, "inscription") or annee_courante,
|
||||||
@ -723,23 +724,26 @@ def do_import_etud_admission(
|
|||||||
"specialite": spe_bac,
|
"specialite": spe_bac,
|
||||||
"annee_bac": get_opt_str(etud, "anneebac"),
|
"annee_bac": get_opt_str(etud, "anneebac"),
|
||||||
"codelycee": get_opt_str(etud, "lycee"),
|
"codelycee": get_opt_str(etud, "lycee"),
|
||||||
|
"nomlycee": get_opt_str(etud, "nom_lycee"),
|
||||||
|
"villelycee": get_opt_str(etud, "ville_lycee"),
|
||||||
|
"codepostallycee": get_opt_str(etud, "codepostal_lycee"),
|
||||||
"boursier": get_opt_str(etud, "bourse"),
|
"boursier": get_opt_str(etud, "bourse"),
|
||||||
}
|
}
|
||||||
# log("do_import_etud_admission: etud=%s" % pprint.pformat(etud))
|
# log("do_import_etud_admission: etud=%s" % pprint.pformat(etud))
|
||||||
al = sco_etud.admission_list(cnx, args={"etudid": etudid})
|
adm_list = sco_etud.admission_list(cnx, args={"etudid": etudid})
|
||||||
if not al:
|
if not adm_list:
|
||||||
sco_etud.admission_create(cnx, args) # -> adm_id
|
sco_etud.admission_create(cnx, args) # -> adm_id
|
||||||
else:
|
else:
|
||||||
# existing data: merge
|
# existing data: merge
|
||||||
e = al[0]
|
adm_info = adm_list[0]
|
||||||
if get_opt_str(etud, "inscription"):
|
if get_opt_str(etud, "inscription"):
|
||||||
e["annee"] = args["annee"]
|
adm_info["annee"] = args["annee"]
|
||||||
keys = list(args.keys())
|
keys = list(args.keys())
|
||||||
for k in keys:
|
for k in keys:
|
||||||
if not args[k]:
|
if not args[k]:
|
||||||
del args[k]
|
del args[k]
|
||||||
e.update(args)
|
adm_info.update(args)
|
||||||
sco_etud.admission_edit(cnx, e)
|
sco_etud.admission_edit(cnx, adm_info)
|
||||||
# Traite cas particulier de la date de naissance pour anciens
|
# Traite cas particulier de la date de naissance pour anciens
|
||||||
# etudiants IUTV
|
# etudiants IUTV
|
||||||
if import_naissance and "naissance" in etud:
|
if import_naissance and "naissance" in etud:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# -*- mode: python -*-
|
# -*- mode: python -*-
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
SCOVERSION = "9.3.27"
|
SCOVERSION = "9.3.28"
|
||||||
|
|
||||||
SCONAME = "ScoDoc"
|
SCONAME = "ScoDoc"
|
||||||
|
|
||||||
|
@ -18,6 +18,9 @@
|
|||||||
<bac>S Scientifique</bac>
|
<bac>S Scientifique</bac>
|
||||||
<anneebac>2019</anneebac>
|
<anneebac>2019</anneebac>
|
||||||
<lycee>07981234T</lycee>
|
<lycee>07981234T</lycee>
|
||||||
|
<nom_lycee>nom du lycée</nom_lycee>
|
||||||
|
<ville_lycee>ville lycée</ville_lycee>
|
||||||
|
<codepostal_lycee>code postal lycée</codepostal_lycee>
|
||||||
<mention>AB</mention>
|
<mention>AB</mention>
|
||||||
<bourse>N</bourse>
|
<bourse>N</bourse>
|
||||||
<paiementinscription>true</paiementinscription>
|
<paiementinscription>true</paiementinscription>
|
||||||
@ -34,5 +37,4 @@
|
|||||||
<cod_dip>{diplome}</cod_dip>
|
<cod_dip>{diplome}</cod_dip>
|
||||||
<cod_etp>{etape}</cod_etp>
|
<cod_etp>{etape}</cod_etp>
|
||||||
<tem_rgl_sit_mil>O</tem_rgl_sit_mil>
|
<tem_rgl_sit_mil>O</tem_rgl_sit_mil>
|
||||||
<fullname>{prenom} {nom}</fullname>
|
|
||||||
</etudiant>
|
</etudiant>
|
||||||
|
@ -2,6 +2,14 @@
|
|||||||
|
|
||||||
"""Simple fake HTTP serveur
|
"""Simple fake HTTP serveur
|
||||||
emulating "Apogee" Web service
|
emulating "Apogee" Web service
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
/opt/scodoc/tools/fakeportal/fakeportal.py
|
||||||
|
|
||||||
|
et régler "URL du portail" sur la page de *Paramétrage* du département testé,
|
||||||
|
typiquement: http://localhost:8678
|
||||||
|
et "Version de l'API" à 2
|
||||||
|
|
||||||
"""
|
"""
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from urllib.parse import parse_qs
|
from urllib.parse import parse_qs
|
||||||
@ -32,6 +40,8 @@ ETUD_HEAD = """<?xml version="1.0" encoding="UTF-8"?>
|
|||||||
ETUD_TAIL = """</etudiants>
|
ETUD_TAIL = """</etudiants>
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
CODES_ETAPES = ("V1RT", "V2RT", "V2RT2", "")
|
||||||
|
|
||||||
|
|
||||||
def make_random_etud(nip, etape=None, annee=None, template=ETUD_TEMPLATE_FULL):
|
def make_random_etud(nip, etape=None, annee=None, template=ETUD_TEMPLATE_FULL):
|
||||||
"""return XML for a student"""
|
"""return XML for a student"""
|
||||||
@ -39,7 +49,7 @@ def make_random_etud(nip, etape=None, annee=None, template=ETUD_TEMPLATE_FULL):
|
|||||||
gender = random.choice(("M", "F"))
|
gender = random.choice(("M", "F"))
|
||||||
nom, prenom = nomprenom(gender)
|
nom, prenom = nomprenom(gender)
|
||||||
if not etape:
|
if not etape:
|
||||||
etape = random.choice(("V1RT", "V2RT", "V2RT2", ""))
|
etape = random.choice(CODES_ETAPES)
|
||||||
if not annee:
|
if not annee:
|
||||||
annee = time.strftime("%Y") # current year
|
annee = time.strftime("%Y") # current year
|
||||||
diplome = "VDRT"
|
diplome = "VDRT"
|
||||||
@ -54,7 +64,6 @@ def make_random_etud(nip, etape=None, annee=None, template=ETUD_TEMPLATE_FULL):
|
|||||||
ville_naissance=random.choice(("Paris", "Berlin", "Londres", "")),
|
ville_naissance=random.choice(("Paris", "Berlin", "Londres", "")),
|
||||||
code_dep_naissance=random.choice(("75", "99", "89")),
|
code_dep_naissance=random.choice(("75", "99", "89")),
|
||||||
libelle_dep_naissance="nom département",
|
libelle_dep_naissance="nom département",
|
||||||
# nomlycee=
|
|
||||||
)
|
)
|
||||||
return data
|
return data
|
||||||
|
|
||||||
@ -155,6 +164,10 @@ def signal_handler(sig, frame):
|
|||||||
signal.signal(signal.SIGINT, signal_handler)
|
signal.signal(signal.SIGINT, signal_handler)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
# Help message
|
||||||
|
print(f"Les étapes (codes Apogée) sont: {CODES_ETAPES}")
|
||||||
|
print(f"Définir l'URL du portail comme: http://localhost:{PORT}")
|
||||||
|
print("""et "Version de l'API" à 2""")
|
||||||
# Start the server
|
# Start the server
|
||||||
print(f"Server listening on port {PORT}...")
|
print(f"Server listening on port {PORT}...")
|
||||||
my_server = socketserver.TCPServer(("", PORT), MyHttpRequestHandler)
|
my_server = socketserver.TCPServer(("", PORT), MyHttpRequestHandler)
|
||||||
|
Loading…
Reference in New Issue
Block a user