Development #4842
Mise à jour de la base de données des lieux de socialisation
90%
Description
Supprimer les entrées actuelles et peupler la base avec les fichiers tableurs disponibles sur le site du rectorat
Fichiers
Historique
Mis à jour par Mikaël Ates il y a plus de 9 ans
- Patch proposed mis à Non
"""J'ai trouvé les adresses sur le site http://www.ia42.ac-lyon.fr/
Sommaire
Etablissements et circonscriptions
Premier degré:
Télécharger le fichier écoles publiques et privées
Second degré:
Télécharger le fichier collèges et lycées privés et publics
Voilà je regarde si je peux trouver une liste des crèches et jardin d'enfants"""
Annuaire officiel : http://www.education.gouv.fr/pid24301/annuaire-accueil-recherche.html
Mis à jour par Jérôme Schneider il y a plus de 9 ans
- Statut changé de En cours à Information nécessaire
Je vois plusieurs points qui demandent réflexion sur ce ticket :
- la suppression des entrées actuelles : ça aura un impact fort sur l'existant. Tous les onglets lieux de socialisation vont se retrouver vide. Ca ne me semble pas être la bonne solution. On peut essayer de faire une migration intelligente qui va essayer de faire un matching entre les anciennes entrées et les nouvelles mais je pense qu'on aura beaucoup d'erreurs. La troisième idées serait de supprimer que les lieux de socialisation qui ne sont pas utilisés et de garder les autre en laissant le soin aux secrétaires de nettoyer la base.
- dans le fichier ANNUAIRE_ECOLES_PUBLIQUES.xls il manque le nom d'une école sur deux. Je propose qu'on injecte pas ces écoles.
Mis à jour par Jérôme Schneider il y a plus de 9 ans
- Fichier import_school_from_xls_files.py import_school_from_xls_files.py ajouté
- % réalisé changé de 0 à 40
Voici un premier script qui ne fait que le mapping entre les xls et calebase. Je le mets dans le ticket pour valider que je pars bien dans le bonne direction. Les xls sont loin d'être parfait mais l'extraction n'est pas catastrophique.
Mis à jour par Frédéric Péters il y a plus de 9 ans
Sur le fond je vais laisser Mikaël, sur la forme moi je trouve qu'il y a beaucoup de scripts qui se trouvent ainsi faits sur le côté, et que ça pourrait très bien aller en commande de management (et comme dans docbow ça pourrait être appelable depuis le script dans /etc/init.d/, comme ça on est sûr d'avoir un seul endroit qui s'occupe de l'environnement, et donc les settings les mêmes).
Sinon dans un survol rapide alors je le note, même si ça devrait se voir en testant pour de vrai : ici lycee/college devraient être des chaînes :
elif school_type.lower() in [u"lp", u"lycée", u"sep", u"lycée professionnel"]: value['school_type'] = lycee elif school_type.lower() == u"collège": value['school_type'] = college
Le isinstance multiplé sur str et unicode, Thomas m'a récemment fait remarqué qu'il était avantageusement remplacé par un seul test sur le type basestring.
Mis à jour par Jérôme Schneider il y a plus de 9 ans
- Fichier 0001-ressources-new-command-reinit_schools_from_xls-which.patch 0001-ressources-new-command-reinit_schools_from_xls-which.patch ajouté
- Patch proposed changé de Non à Oui
J'ai suivi les remarques de Fred en utilisant basestring et ajoutant une commande dans ressources. De plus cette version vide la base des lieux de socialisations et injecte ceux des xls.
Mis à jour par Benjamin Dauvergne il y a plus de 9 ans
Je n'ai pas regardé le schéma mais il me semble que si tu supprimes toutes les school tu perds toutes les affectations existantes. Si c'est le cas il faudrait plutôt essayer d'utiliser la clé unique fournie par l'educnat, le code RNE ou code école, pour pouvoir faire des mises à jour. Ça donnerait un truc comme ça
def save_schools(self, schools): for school in schools: mschool, created = School.objects.get_or_create(code_rne=school['code_rne'], defaults=school) if not created: mschool.__dict__.update(schools) mschool.save() mschool.services = self.services
Les types d'établissements devraient plutôt être récupérés par chaîne que par id (ça rejoint la remarque de fred) vu que l'objet ne sert qu'à stocker un nom, ou alors il faut transformer school_type en champ varchar.
creche = SchoolType.objects.get(id=1) maternelle = SchoolType.objects.get(id=2) primaire = SchoolType.objects.get(id=3) college = SchoolType.objects.get(id=4) lycee = SchoolType.objects.get(id=5) inconnu = SchoolType.objects.get(id=8) services = Service.objects.all()
Il faudrait ça:
creche = SchoolType.objects.get_or_create(name=u'crèche') maternelle = SchoolType.objects.get(name=u'maternelle') etc...
Aussi je ne sais pas si il y a une ligne d'entête dans le XLS mais si il y en a une je ferai un assert pour vérifier que les titres ne changent pas; sûr ça va péter lorsqu'ils corrigent une typo ou en font une mais si le format change vraiment on le saura.
Autre petit conseil j'aime bien mettre le décorateur commit_on_success
sur la méthode handle()
ou la méthode qui effectue des modifications sur la base dans mes commandes, ça me rassure de savoir que quand ça foire il n'y a pas d'effet sur la base et ça permet d'implémenter facilement un mode -dry
ou -fake
qui ne fait rien, en lançant simplement une exception.
Mis à jour par Frédéric Péters il y a plus de 9 ans
Je n'ai pas regardé le schéma mais il me semble que si tu supprimes toutes les school tu perds toutes les affectations existantes. [...]
Jérôme, la nouvelle commande a été poussée; le problème évoqué par Benjamin n'existe pas ?
Mis à jour par Jérôme Schneider il y a plus de 9 ans
Benjamin Dauvergne a écrit :
Je n'ai pas regardé le schéma mais il me semble que si tu supprimes toutes les school tu perds toutes les affectations existantes. Si c'est le cas il faudrait plutôt essayer d'utiliser la clé unique fournie par l'educnat, le code RNE ou code école, pour pouvoir faire des mises à jour. Ça donnerait un truc comme ça
Le code RNE n'est pas présent dans les fichiers xls et ce script n'est pas prévu pour faire une mise à jour mais injecter une fois les lieux de socialisation.
Les types d'établissements devraient plutôt être récupérés par chaîne que par id (ça rejoint la remarque de fred) vu que l'objet ne sert qu'à stocker un nom, ou alors il faut transformer school_type en champ varchar.
[...]
J'ai modifié avant de pousser dans le master.
Aussi je ne sais pas si il y a une ligne d'entête dans le XLS mais si il y en a une je ferai un assert pour vérifier que les titres ne changent pas; sûr ça va péter lorsqu'ils corrigent une typo ou en font une mais si le format change vraiment on le saura.
Vu que c'est du one shot je ne pense pas que ca soit utile.
Autre petit conseil j'aime bien mettre le décorateur
commit_on_success
sur la méthodehandle()
ou la méthode qui effectue des modifications sur la base dans mes commandes, ça me rassure de savoir que quand ça foire il n'y a pas d'effet sur la base et ça permet d'implémenter facilement un mode-dry
ou-fake
qui ne fait rien, en lançant simplement une exception.
On repart de 0 pour cette commande donc je ne pense pas que soit utile. Au contraire ça permet de voir directement ou ça foire.
Mis à jour par Jérôme Schneider il y a plus de 9 ans
- Statut changé de Information nécessaire à Résolu (à déployer)
- % réalisé changé de 70 à 90