Différences entre les versions de « Legi.py »
(→Installation sous Debian 10 : procédure telle que faite à l’instant) |
|||
Ligne 7 : | Ligne 7 : | ||
== Installation sous Debian 10 == | == Installation sous Debian 10 == | ||
:''Cette section explique comment installer | :''Cette section explique comment installer legi.py avec Git et mettre en place les mises à jour quotidiennes. Procédure écrite et testée en mai 2021.'' | ||
Le code de legi.py sera placé dans <code>/opt/legi.py</code>, les données XML officielles dans <code>/srv/data/legi/xml</code> et la base de données résultat dans <code>/srv/data/legi/sql</code>. | |||
Les commandes sont ici utilisées avec sudo puisque cela a vocation à être un service « système ». | |||
; Pré-requis | ; Pré-requis | ||
* Système : Debian 10 | * Système : Debian 10 | ||
* Connectivité : IPv4 nécessaire (d’une part pour le téléchargement sur Github puisque celui-ci n’a pas encore l’IPv6 [sic], d’autre part pour les téléchargements quotidiens depuis la DILA) | * Connectivité : IPv4 nécessaire (d’une part pour le téléchargement sur Github puisque celui-ci n’a pas encore l’IPv6 [sic], d’autre part pour les téléchargements quotidiens depuis la DILA) | ||
* Ressources : | |||
** téléchargement initial : ≈ 3 Gio | |||
** téléchargements quotidiens : ≈ 1 Mio, sauf lors d’un ré-export complet de la base XML une fois par an (≈ 1 Gio dans ce cas) | |||
** stockage du XML compressé : ≈ 3-4 Gio | |||
** stockage de la base SQL : ≈ 4 Gio | |||
** CPU/mémoire : peu consommateur sauf lors du calcul initial, 1-2 Gio est suffisant, avoir plus de ressources augmente la vitesse notamment du calcul initial | |||
=== Installation des dépendances === | |||
Paquets généraux : | Paquets généraux : | ||
sudo apt-get install -y git gcc g++ python3-pip python3-setuptools python3-dev | |||
sudo apt-get install -y git gcc g++ python3-pip python3-setuptools python3-dev | À part git, les suivants sont nécessaires pour la compilation du paquet Python « hunspell » lors de l’installation avec pip. | ||
Paquets spécifiques : | Paquets spécifiques : | ||
sudo apt-get install -y libarchive13 hunspell hunspell-fr libhunspell-dev | |||
sudo apt-get install -y libarchive13 hunspell hunspell-fr libhunspell-dev | |||
</ | === Installation de legi.py === | ||
sudo mkdir /opt/legi.py | |||
sudo git clone <nowiki>https://github.com/Legilibre/legi.py</nowiki> /opt/legi.py | |||
cd /opt/legi.py | |||
sudo pip3 install -r requirements.txt | |||
=== Création de la mise à jour quotidienne === | |||
Cette mise à jour est programmée avec un timer systemd et un utilisateur système dédié. | |||
Noter que la mise à jour est programmée ici du lundi au vendredi entre 23:15 et 23:30 et toutes les 12 heures : selon [https://github.com/Legilibre/salon/issues/18 ces stats], l’heure de livraison étant variable, souvent entre 21:00 et 23:00, mais parfois plus tard ; on pourrait programmer une vérification de la présence de livraison du jour à partir de 20:00 (ce que je fais pour Archéo Lex). La vérification toutes les 12 heures est notamment pour le cas d’un ordinateur de bureau, pas forcément allumé en soirée. | |||
Sur la pérennité de la livraison via FTP, il a été annoncé par la DILA le 29 novembre 2019 (lors de l’inauguration des nouvelles API) que cela était pérenne. | |||
Note d’implémentation : j’utilise ici wget pour faire le téléchargement même si legi.py a un utilitaire dédié, plus par conviction personnelle qu’il est préférable d’utiliser les outils existants plutôt que de les réimplémenter. | |||
sudo adduser --system --home / --shell /usr/bin/sh --no-create-home --disabled-password legi | |||
sudo mkdir -p /usr/local/lib/systemd/system | |||
sudo vi /usr/local/lib/systemd/system/legi-database-update.service # copier le contenu ci-dessous | |||
sudo vi /usr/local/lib/systemd/system/legi-database-update.timer # copier le contenu ci-dessous | |||
sudo systemctl daemon-reload | |||
sudo mkdir -p /var/log/legi /srv/data/legi/{xml,sql} | |||
sudo chown -R legi /var/log/legi /srv/data/legi | |||
sudo systemctl start legi-database-update.timer | |||
sudo systemctl enable legi-database-update.timer | |||
; /usr/local/lib/systemd/system/legi-database-update.service | |||
[Unit] | |||
Description=LEGI database update | |||
Documentation=<nowiki>https://github.com/Legilibre/legi.py</nowiki> | |||
[Service] | |||
Type=oneshot | |||
WorkingDirectory=/opt/legi.py | |||
ExecStartPre=wget -c -N --no-remove-listing --no-verbose -nH -P /srv/data/legi/xml '<nowiki>ftp://echanges.dila.gouv.fr/LEGI/*.tar.gz</nowiki>' | |||
ExecStart=python3 -m legi.tar2sqlite /srv/data/legi/sql/legi.sqlite /srv/data/legi/xml | |||
User=legi | |||
StandardOutput=file:/var/log/legi/update.log | |||
; /usr/local/lib/systemd/system/legi-database-update.timer | |||
[Unit] | |||
Description=Run LEGI database update | |||
[Timer] | |||
OnCalendar=Mon..Fri *-*-* 11/12:15:00 | |||
RandomizedDelaySec=900 | |||
[Install] | |||
WantedBy=timers.target | |||
=== Lancement initial === | |||
On peut lancer le calcul initial tout de suite : | |||
sudo systemctl start legi-database-update.service --no-block | |||
sudo systemctl status legi-database-update.service | |||
Ce calcul initial mettra quelques heures, variable selon la vitesse de téléchargement et les ressources CPU/mémoire disponible. | |||
== Utilisation au quotidien == | |||
sqlite3 /srv/data/legi/sql/legi.sqlite | |||
Version du 9 mai 2021 à 20:57
En légistique numérique, legi.py transforme la base de données LEGI, contenant les lois consolidées, produite officiellement par la DILA et consistant en des fichiers XML, en une base SQL (SQLite uniquement).
Ce programme est écrit en Python 3.7, dont l’auteur principal est le développeur Changaco et dont la licence est CC0.
Dans la chaîne de traitement, legi.py est utilisé en première partie ; Archéo Lex utilise notamment la colonne sur la date de dernière mise à jour pour ne modifier que les nouveautés du jour. Dans une Pull Request que, idéalement, je finalise, legi.py pourrait être étendu à la base de données JORF contenant notamment les lois dans leur version initiale, chose manquante dans LEGI. Plus loin, il s’agirait de mettre en correspondance les bases JORF et LEGI [1].
Installation sous Debian 10
- Cette section explique comment installer legi.py avec Git et mettre en place les mises à jour quotidiennes. Procédure écrite et testée en mai 2021.
Le code de legi.py sera placé dans /opt/legi.py
, les données XML officielles dans /srv/data/legi/xml
et la base de données résultat dans /srv/data/legi/sql
.
Les commandes sont ici utilisées avec sudo puisque cela a vocation à être un service « système ».
- Pré-requis
- Système : Debian 10
- Connectivité : IPv4 nécessaire (d’une part pour le téléchargement sur Github puisque celui-ci n’a pas encore l’IPv6 [sic], d’autre part pour les téléchargements quotidiens depuis la DILA)
- Ressources :
- téléchargement initial : ≈ 3 Gio
- téléchargements quotidiens : ≈ 1 Mio, sauf lors d’un ré-export complet de la base XML une fois par an (≈ 1 Gio dans ce cas)
- stockage du XML compressé : ≈ 3-4 Gio
- stockage de la base SQL : ≈ 4 Gio
- CPU/mémoire : peu consommateur sauf lors du calcul initial, 1-2 Gio est suffisant, avoir plus de ressources augmente la vitesse notamment du calcul initial
Installation des dépendances
Paquets généraux :
sudo apt-get install -y git gcc g++ python3-pip python3-setuptools python3-dev
À part git, les suivants sont nécessaires pour la compilation du paquet Python « hunspell » lors de l’installation avec pip.
Paquets spécifiques :
sudo apt-get install -y libarchive13 hunspell hunspell-fr libhunspell-dev
Installation de legi.py
sudo mkdir /opt/legi.py sudo git clone https://github.com/Legilibre/legi.py /opt/legi.py cd /opt/legi.py sudo pip3 install -r requirements.txt
Création de la mise à jour quotidienne
Cette mise à jour est programmée avec un timer systemd et un utilisateur système dédié.
Noter que la mise à jour est programmée ici du lundi au vendredi entre 23:15 et 23:30 et toutes les 12 heures : selon ces stats, l’heure de livraison étant variable, souvent entre 21:00 et 23:00, mais parfois plus tard ; on pourrait programmer une vérification de la présence de livraison du jour à partir de 20:00 (ce que je fais pour Archéo Lex). La vérification toutes les 12 heures est notamment pour le cas d’un ordinateur de bureau, pas forcément allumé en soirée.
Sur la pérennité de la livraison via FTP, il a été annoncé par la DILA le 29 novembre 2019 (lors de l’inauguration des nouvelles API) que cela était pérenne.
Note d’implémentation : j’utilise ici wget pour faire le téléchargement même si legi.py a un utilitaire dédié, plus par conviction personnelle qu’il est préférable d’utiliser les outils existants plutôt que de les réimplémenter.
sudo adduser --system --home / --shell /usr/bin/sh --no-create-home --disabled-password legi sudo mkdir -p /usr/local/lib/systemd/system sudo vi /usr/local/lib/systemd/system/legi-database-update.service # copier le contenu ci-dessous sudo vi /usr/local/lib/systemd/system/legi-database-update.timer # copier le contenu ci-dessous sudo systemctl daemon-reload sudo mkdir -p /var/log/legi /srv/data/legi/{xml,sql} sudo chown -R legi /var/log/legi /srv/data/legi sudo systemctl start legi-database-update.timer sudo systemctl enable legi-database-update.timer
- /usr/local/lib/systemd/system/legi-database-update.service
[Unit] Description=LEGI database update Documentation=https://github.com/Legilibre/legi.py [Service] Type=oneshot WorkingDirectory=/opt/legi.py ExecStartPre=wget -c -N --no-remove-listing --no-verbose -nH -P /srv/data/legi/xml 'ftp://echanges.dila.gouv.fr/LEGI/*.tar.gz' ExecStart=python3 -m legi.tar2sqlite /srv/data/legi/sql/legi.sqlite /srv/data/legi/xml User=legi StandardOutput=file:/var/log/legi/update.log
- /usr/local/lib/systemd/system/legi-database-update.timer
[Unit] Description=Run LEGI database update [Timer] OnCalendar=Mon..Fri *-*-* 11/12:15:00 RandomizedDelaySec=900 [Install] WantedBy=timers.target
Lancement initial
On peut lancer le calcul initial tout de suite :
sudo systemctl start legi-database-update.service --no-block sudo systemctl status legi-database-update.service
Ce calcul initial mettra quelques heures, variable selon la vitesse de téléchargement et les ressources CPU/mémoire disponible.
Utilisation au quotidien
sqlite3 /srv/data/legi/sql/legi.sqlite