datagouv / fr-format

GNU Affero General Public License v3.0
1 stars 0 forks source link

Utiliser des sources officielles stables #17

Open Pierlou opened 3 weeks ago

Pierlou commented 3 weeks ago

Pour la mise à jour des données de référence (codes INSEE, postaux, noms des communes, etc.), plusieurs solutions sont possibles :

Dans tous les cas, il serait bon de trouver des sources officielles et stables. Pour les communes/départements/EPCI/régions cela pourrait être : https://geo.api.gouv.fr/decoupage-administratif

Maintenant que le système est rôdé (avec csv-detective 0.7.2) cela pourrait être une piste d'amélioration 🚀

pierrecamilleri commented 1 week ago

Merci !

Effectivement, mais il y a une question sous-jacente : a priori, il me semble souhaitable de garder toutes les versions pour pouvoir en référencer une plutôt qu'une autre.

En effet, sinon, chaque nouvelle version des données introduit un breaking change (des fichiers qui étaient valides et qui peuvent ne plus l'être avec des nouvelles données).

Je propose donc d'avoir un moyen de versionner, par exemple de pouvoir indiquer Region.is_valid("Limousin", cog = "2005") (ou alternativement : version = "cog2005") pour préciser un code officiel géographique. Dans les schémas, ça pourrait se manifester comme ça :

{
 "frFormat": {
    "name": "region",
    "cog": "2005"
  }
}

Se pose la question de si on veut supporter une valeur par défaut, ou une fonctionnalité qui permet d'utiliser cog = "latest". Je suis plutôt d'avis contraire, car 1. ça nous engage et c'est difficile de revenir en arrière (alors qu'on peut toujours l'ajouter plus tard si le besoin est confirmé), 2. ça génère des schémas qui n'ont pas un comportement stable dans le temps et donc toute mise-à-jour de "frFormat" peut entraîner des régressions et 3. ça encourage des mauvaises pratiques de ne pas se poser la question de quel référentiel géo utiliser.

Pour la mise à jour des référentiels disponibles, je ne ferai pas de fetch en temps réel, qui pose des problématiques de performance et de mise en cache, de possibilité d'utilisation hors connexion, etc. qui me semblent pas indispensable pour le moment. J'opterais dans un premier temps pour une mise-à-jour manuelle avec scripts, et on pourra toujours automatiser sur cette base à l'avenir.