Project

General

Profile

Development #4842

Mise à jour de la base de données des lieux de socialisation

Added by Jérôme Schneider almost 10 years ago. Updated over 9 years ago.

Status:
Fermé
Priority:
Normal
Assignee:
Jérôme Schneider
Start date:
23 May 2014
Due date:
% Done:

90%

Estimated time:
Patch proposed:
Yes
Planning:

Description

Supprimer les entrées actuelles et peupler la base avec les fichiers tableurs disponibles sur le site du rectorat


Files

History

#1

Updated by Mikaël Ates (de retour le 5 mars) over 9 years ago

  • Patch proposed set to No

"""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

#2

Updated by Jérôme Schneider over 9 years ago

  • Status changed from Nouveau to En cours
#3

Updated by Jérôme Schneider over 9 years ago

  • Status changed from En cours to 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.
#4

Updated by Jérôme Schneider over 9 years ago

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.

#5

Updated by Frédéric Péters over 9 years ago

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.

#6

Updated by Jérôme Schneider over 9 years ago

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.

#7

Updated by Jérôme Schneider over 9 years ago

  • % Done changed from 40 to 70
#8

Updated by Benjamin Dauvergne over 9 years ago

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.

#9

Updated by Frédéric Péters over 9 years ago

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 ?

#10

Updated by Jérôme Schneider over 9 years ago

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é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.

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.

#11

Updated by Jérôme Schneider over 9 years ago

  • Status changed from Information nécessaire to Résolu (à déployer)
  • % Done changed from 70 to 90
#12

Updated by Mikaël Ates (de retour le 5 mars) over 9 years ago

  • Status changed from Résolu (à déployer) to Fermé

Ok

Also available in: Atom PDF