Librairie Python gérant les échanges synchrones de numéros uniques avec le Système National d'Enregistrement (SNE) des demandes de logements sociaux dans le cadre de leur gestion.
 
 
Aller au fichier
François Decq 701847c2a0 [fix] Incrémentation version dans init 2017-08-25 17:23:47 +02:00
libsne [fix] Incrémentation version dans init 2017-08-25 17:23:47 +02:00
ressources [enh] Initialisation du dépôt libsne version alpha à la fin de mon stage sur Gitea 2017-08-23 11:01:47 +02:00
tests [enh] Ajout des requirements 2017-08-24 18:08:37 +02:00
.gitignore [dev] ajout build/ a gitignore 2017-08-25 17:14:57 +02:00
CHANGELOG.md [enh] Initialisation du dépôt libsne version alpha à la fin de mon stage sur Gitea 2017-08-23 11:01:47 +02:00
LICENSE [enh] Initialisation du dépôt libsne version alpha à la fin de mon stage sur Gitea 2017-08-23 11:01:47 +02:00
MANIFEST.in [enh] Initialisation du dépôt libsne version alpha à la fin de mon stage sur Gitea 2017-08-23 11:01:47 +02:00
README.md [doc] MAJ README bis, développement 2017-08-25 17:21:32 +02:00
pylint_et_tests.sh [enh] Ajout des scripts 2017-08-25 09:47:09 +02:00
requirements_dev.txt [dev] packaging pour le dev 2017-08-25 16:23:03 +02:00
setup.cfg [fix] import Constantes en Python3 + README + version 0.1.0a4 2017-08-23 14:23:53 +02:00
setup.py [enh] ajout entry_points 2017-08-25 17:14:25 +02:00
tests.sh [fix] python2 au lieu de python dans le tests.sh 2017-08-25 10:06:53 +02:00

README.md

Libsne

Librairie Python gérant les échanges synchrones de numéros uniques avec le Système National d'Enregistrement (SNE) des demandes de logements sociaux dans le cadre de leur gestion.


Cette librairie permet de gérer plusieurs étapes dans le processus d'échanges de numéros uniques SNE :

  • Récupération d'une chaîne de caractères ou d'un arbre lxml.etree représentant la structure XML de la demande de logement ;
  • Construction du message SOAP à envoyer au serveur SNE selon le protocole XOP/MTOM (comme spécifié dans le cahier des charges des interfaces SNE) ;
  • Échanges avec le serveur SNE selon le protocole HTTPS/TLS grâce à l'authentification et la signature par système de certificats ;
  • Analyse de la réponse du serveur SNE, construction des exceptions selon le type d'erreur (enveloppe SOAP, anomalies dans le XML, ...), ou retour de réponse si pas d'erreur.

5 services Web (sur les 6 proposés par SNE, voir cahier des charges) sont disponibles. Au sein de la librairie, ces services sont définis en enlevant le get et en remplaçant la première lettre par une minuscule (ex : getDemandeLogement devient demandeLogement) :

  • getNumUnique ayant comme paramètre la demande de logement sous forme de chaîne de caractères représentant la structure XML de la demande (paramètre : xml) ;
  • getDemandeLogement ayant comme paramètre le numéro unique SNE (paramètre : num_unique) ;
  • getDoublons ayant comme paramètre une demande de logement partielle sous forme de chaîne de caractères représentant la structure XML de la demande (paramètre : xml) ;
  • (getNouveauxDaloDepuisLe ayant comme paramètre la date à partir de laquelle chercher les nouveaux DALO (paramètre date au format YYYY-MM-DDTHH:MM:SS.s+HH:MM par rapport à UTC).)
  • (getDemandesRadieesDepuisLe ayant comme paramètre la date à partir de laquelle chercher les nouvelles demandes radiées (paramètre date au format YYYY-MM-DDTHH:MM:SS.s+HH:MM par rapport à UTC).)

Ces deux derniers services ne fonctionnent pas correctement, améliorations bienvenues :)

La librairie est compatible Python 2 et Python 3.

Installation

En tant que logiciel libre, il est préférable d'utiliser la librairie SNE sur les systèmes d'exploitation GNU/Linux (Debian, Ubuntu, Mint, ...).

Installation via PIP

La librairie SNE (version alpha) est disponible sur PyPI et peut être installée en ligne de commande (l'installation peut prendre du temps, notamment pour lxml) :

pip install --pre libsne

Installation via Git

La librairie SNE est disponible sur la forge de Cliss XXI et peut être clonée via Git. Cependant l'installation via git s'adresse surtout aux développeurs. Voir le paragraphe Développement pour plus d'informations.

Configuration

Les fichiers ressources sont ajoutés automatiquement lors de l'installation. Cependant, ils peuvent changer à tout moment ! Se renseigner sur le site du gouvernement.

Comment l'utiliser

Python

Pour utiliser la librairie SNE depuis un code externe Python, il faut appeler la fonction echanger qui prend en paramètres le nom du service, le chemin du fichier contenant la chaîne publique de certificats, le chemin du fichier contenant la clé privée, optionnellement le nom d'hôte de SNE (défaut à nuu-ws.ecole.application.developpement-durable.gouv.fr sur le port 443 si non fourni) et le paramètre du service sous forme de kwargs.

Exemples :

import libsne
reponse_serveur = libsne.echanger("demandeLogement", "certificats/public/fullchain.pem", "certificats/prive/key.pem", num_unique="0123456789ABCDEFGH")
reponse_serveur = libsne.echanger("numUnique", "certificats/public/fullchain.pem", "certificats/prive/key.pem", xml=xml_demande)
reponse_serveur = libsne.echanger("demandesRadieesDepuisLe", "certificats/public/fullchain.pem", "certificats/prive/key.pem", date="2017-01-13T14:55:43.5+02:00") # Ne fonctionne pas correctement actuellement

Ligne de commande

La librairie est aussi utilisable en ligne de commande.

Exemples :

./libsne.py demandeLogement 0123456789ABCDEFGH certificats/public/fullchain.pem certificats/prive/key.pem
./libsne.py numUnique [xml_demande] certificats/public/fullchain.pem certificats/prive/key.pem
./libsne.py demandesRadieesDepuisLe 2017-01-13T14:55:43.5+02:00 certificats/public/fullchain.pem certificats/prive/key.pem # Ne fonctionne pas correctement actuellement

Documentation

Ce README et les docstrings :)

Développement

Il est préalablement nécessaire de monter un environnement de développement :

git clone https://forge.cliss21.org/cliss21/libsne.git
cd libsne
virtualenv venv
. venv/bin/activate
pip install -r requirements_dev.txt
pip install -e .

Tests

Une fois l'environnement de test deployé, les tests peuvent être lancés de la manière suivante :

./tests.sh
# TODO: faire un Makefile
# TODO: jouer les tests avec tox

Déploiement sur PyPI

La librairie étant disponible sur PyPI, il est possible pour les développeurs de la librairie de mettre à jour le paquet Python. Pour cela, il est usuel de créer un fichier .pypirc à la racine du home de la machine (~/.pypirc) contenant les informations nécessaires au déploiement :

[distutils]
index-servers=
    pypi
    testpypi

[testpypi]
repository = https://test.pypi.org/legacy/
username = LOGIN
password = PASS

[pypi]
username = LOGIN
password = PASS

Ne pas oublier de se rendre dans l'environnement virtuel si vous n'y êtes pas encore. Il sera ensuite possible de pousser la librairie sur PyPI :

# Sur testpypi
python setup.py bdist_wheel upload --repository testpypi

# Sur pypi
python setup.py bdist_wheel upload

Contacts

Vous pouvez contacter Cliss XXI pour plus de détails sur la librairie.

Licence

La librairie est disponible librement sous licence GNU AGPLv3+. Voir le fichier LICENSE pour plus de détails.