Code Monkey home page Code Monkey logo

portail's Introduction

Installation

Installer python 3.4+ Installer les librairies listées dans le fichier requirements.txt.

pip install -r requirements.txt

Créer un fichier project/settings/dev.py inspiré de project/settings/dev.example.py avec les settings de dev.

Créer la base de données

Lancer les commandes suivantes :

python manage.py makemigrations
python manage.py migrate
python manage.py init_groups
python manage.py createsuperuser

Installation du moteur de recherche

Suivre la documentation pour installer meilisearch :

https://docs.meilisearch.com/

Pour Windows, le script d'installation via curl ne fonctionnera pas, mais un binaire existe ici : https://github.com/meilisearch/MeiliSearch/releases

Configurer l'url de meilisearch dans project/settings/dev.py, normalement :

MEILISEARCH_URL = 'http://127.0.0.1:7700'
MEILISEARCH_KEY = ''

Puis lancer la tache de création de l'index :

python manage.py build_meilisearch_index

Un signal django récupère les modifications d'orgues faites directement via l'interface et met à jour l'index de recherche meilisearch. Ce signal ne récupère pas les modifications faites en ligne de commande, les modifications groupées via l'admin ou encore les suppressions d'orgues. Pour mettre à jour l'index de recherche après ces types de modifications, il faut lancer la commande build_meilisearch_index. En production cette commande est lancée toutes les nuits (à 2 h) pour garantir que l'index soit à jour.

Si l'installation de meilisearch ne fonctionne pas, on peut utiliser un moteur de recherche dégradé en paramétrant :

MEILISEARCH_URL = False

Insérer la config

Pour récupérer les configs depuis le site inventaire des orgues (Facteurs, types de jeux, types de claviers et ) Téléchargez le fichier config.json depuis l'url du site : https://inventaire-des-orgues.fr/api/v1/config.json (il faut être connecter au site inventaire) et lancer la commande suivante :

python manage.py init_config --delete path/ver/config.json

Importer des données

Il est possiblde de récupérer un fichier d'import pour les orgues des pays de la loire :

python manage.py import_data --create path/ver/import.json

Calculer les résumé de composition

Certaines données sont mises en cache pour améliorer la perfomance des requêtes. Pour forcer le recalcul des "résumés clavier" il faut lancer la commande :

python manage.py calcul_resume_composition

Normalement le résumé clavier est recalculé automatiquement à chaque modification de la composition d'un orgue.

l'option --delete permet de vider la base préalablement si nécessaire

Démarrer le serveur

Démarre un serveur qui sera automatiquement relancé lors de changement dans le code.

python manage.py runserver

Mettre à jour meilisearch sur le serveur

sudo su
rm -rf /usr/bin/meilisearch
curl -L https://install.meilisearch.com | sh
mv ./meilisearch /usr/bin/
nano /etc/systemd/system/meilisearch.service
systemctl start meilisearch
systemctl status meilisearch
cd /var/www
source pythonenv/bin/activate
cd portail/
python manage.py build_meilisearch_index

Faire un import de données sur le serveur

Placer le fichier JSON d'importation quelque part sur le disque. (s'inspirer du format de exemple_orgue-v3.json) A noter : la colonne codification est utilisée comme pivot pour retrouver des orgues potentiellement déjà existants dans la base de données avant de les mettre à jour.

Lancer :

source /var/www/pythonenv/bin/activate
cd /var/www/portail
python manage.py import_data chemin/vers/exemple_orgue-v3.json

Optionel : ajouter --delete pour supprimer les orgues existants avant l'importation

Importer les scans des livres d'inventaire

Des liens ont été prédisposés, sur chaque fiche, vers les scans au format PDF des livres d'inventaires papier.

En local sur son poste de travail :

  • Créer un dossier par département
  • Transformer chacun de ces dossiers en archive .tar avec 7-zip ou autre logiciel. Pour 7-zip, option "chemin relatif"

Transférer ces .tar sur le serveur, à l'aide de MobaXterm ou autre, par exemple par SFTP, dans un répertoire temporaire. ex : /home/louisvierne/temp_tar

Quelques commandes tar utiles :

# Examiner le contenu d'une archive .tar
tar -tf ./truc.tar

# Dépaqueter une archive .tar
tar -xvf ./truc.tar

Lancer les script de déploiement des fichiers PDF :

python manage.py deployer_pdfs /home/louisvierne/temp_tar/29/

Le script gère le changement du propriétaire, du groupe et des permissions sur le serveur. Dans le cas d'un déplacement manuel de fichier, ne pas oublier de les mettre à jour :

# Modifier le propriétaire et les permissions des fichiers.
# Se placer dans le bon répertoire.
chown -R fabdev:www-data ./*
chmod -R 644 ./*

Travailler directement sur la base de données

source /var/www/pythonenv/bin/activate
cd /var/www/portail
python manage.py shell

from orgues.models import Orgue
Orgue.objects.all()
Orgue.objects.filter(departement="Ardennes")

Se référer à la documentation Django pour des requêtes plus poussées, avec usage notamment des commandes comme : exclude(), get() et des suffixes : __startwith, __lte, etc. update() permet les mises à jour simultanées. Exemple : corriger les noms erronés du champ ancienne_commune :

Orgue.objects.filter(ancienne_commune="/").update(ancienne_commune="")

Renouvellement des certificats

Via un fichier cron. Pour le voir :

sudo su
crontab -l

Commandes manuelles correspondantes si besoin de renouvellement manuel :

sudo service nginx stop
sudo certbot renew
sudo service nginx start

Rétablir les permissions sur les fichiers

Lors de manipulations sur le serveur, il faut veiller à ne pas modifier les permissions des fichiers manipulés par Django. Pour rétablir les bonnes permissions :

sudo chown -R fabdev:www-data /var/www/portail/static/media

Création d'un diagramme UML à partir du modèle de données Django

Installer si nécessaire django-extensions et pydotplus (toutefois ces deux modules sont dans requirements.txt, donc l'installation n'est normalement pas nécessaire).

Créer un fichier de graphe (.dot) à l'aide de :

python manage.py graph_models orgues -a -g > orgue.dot

Puis générer un diagramme .svg (ou .png) en ligne : https://dreampuf.github.io/GraphvizOnline

Export CSV

Bien pratique pour travailler sur un tableur type OpenOffice ou Excel... https://inventaire-des-orgues.fr/orgues/csv

Api

Voir la documentation de l'API

Pense-bête Python

Pour installer un fichier Wheel depuis la console Python.

import pip
from pip._internal import main as pipmain
pipmain(['install', "Chemin\\vers\\fichier.whl"])

Scripts manage.py

Localisation et correspondance avec OpenStreetMap

Avec Open Street Map

Lancer l’appariement sur tous les orgues qui n’ont pas déjà le champ id_osm rempli : Attention, en raison du timer entre requêtes OpenStreetMap, la commande peut être très longue.

nohup python manage.py appariement_osm all &

Associer à chaque orgue les id d’OSM trouvés dans appariement_osm :

python manage.py import_organ_osm_id orgues/temp/appariements_osm_all.json

Calculer le barycentre de chaque bâtiment. On recalcule pour tous les orgues, mais cela permet de corriger les orgues pour lesquels la position est erronée pour le moment :

python manage.py calcul_barycenter_osm --calculall calculall

Associer à chaque orgue les positions en latitude longitude calculées dans calcul_barycenter_osm :

python manage.py import_organ_lonlat coordonnees_osm.json --ecrase if

A condition qu’on ne lance pas appariement_osm et calcul_barycenter_osm le même jour, on sera en-dessous de la limite des 10000 requêtes par jour.

Avec la BD Topo

Lancer l’appariement sur tous les orgues qui n’ont pas déjà le champ id_osm rempli :

py manage.py appariement_topo

Importer les coordonnées des orgues :

python manage.py import_organ_lonlat orgues/temp/appariements_topo.json --ecrase if

Corrections de données

Supprimer en base de données les liens cassés pointant vers des images

python manage.py remove_broken_images

Contrôle général de la qualité des données (casse, nom d'édifice non complétés, etc.) :

python manage.py quality_check

Vérification de la présence du code INSEE dans chaque fiche :

python manage.py verif_presence_insee

Corriger un attribut sur toutes les fiches :

python manage.py corriger_attribut --replace designation "G.O." "grand orgue" 

Remplir toutes les valeurs None de l'attribut designation par une valeur par défaut :

python manage.py corriger_designatio_none --replace "orgue"

Supprimer tous les doublons dans la liste des facteurs d'orgues :

python manage.py delete_organ_builder_duplication

Renommer des codes de fiche à l'aide d'une liste CSV ancien_code;nouveau_code. Attention, cette manipulation n'est pas anodine et il ne doit pas y avoir d'erreur de données, car en plus du changement de code les fichiers et images sont déplacés et le fichier PDF extrait du livre d'inventaire est renommé.

python manage.py replace_codes

Déployer à partir d'un fichier archive TAR les PDF extraits des livres d'inventaire aux bons endroits sur le disque du serveur :

python manage.py deployer_pdfs

Accès au serveur

  • ajouter utilisateur au groupe Unix qui convient
  • si accès root attribuer les droit (visudo) et permettre l'accès sans mot de passe (clé RSA)
  • ajouter sa clé publique /home/utilisateur/.ssh/authorized_keys

portail's People

Contributors

amaryllis25 avatar celestinhuet avatar dependabot[bot] avatar gwilhermpoullennec avatar johan-leclercq avatar lluke-h avatar lucasberbesson avatar patou avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

portail's Issues

Pédale vs. Pédalier

Dans la composition, l'ensemble sonore joué avec les pieds est la "Pédale" et non le "Pédalier" (ce dernier étant l'objet).

Filtrage temporel des orgues

Pouvoir rechercher sur le temps :
- un intervalle de dates saisies par l'utilisateur, la seconde étant initiée à la première + 30 ans
- ou un intervalle -15ans + 15ans autour d'une date saisie par l'utilisateur

Console

Ne pas parler de console : Buffet/Console peut s'intituler simplement Buffet.

Champs à ne pas afficher dans l'interface

"osm_latitude": "",
"osm_longitude": "",
"livre": "Orgues de l'Aisne",
"pages_pdf": "12-14",
"page_livre": "14-16",
"page_livre_complement": "",
"orgbase_manu": "",
"orgbase_auto": "",
"orgbase_commune": "",
"orgbase_desc": "",
"orgbase_edifice": "",
"orgbase_facteurs": "",
"orgbase_minicompo": "",

Affichage sur smartphone

Sur petits écrans :

  • Affichage du cartouche latéral de résumé en début et non fin.
  • Comment afficher la frise ?
  • N'afficher qu'un orgue par ligne sur la page principale et non trois.

Chemins des images et des fichiers

Ranger les fichiers dans /media/[numero_departement]/[codification_orgue]/fichiers et les images dans /media/[numero_departement]/[codification_orgue]/images

Permission localisation

ajouter une permission change_localisation qui permet d'accéder à l'onglet "Localisation" (anciennement "géographie") dans lequel on peut modifier toutes les infos geo (y compris open street map)

Markdown pour les grands textbox

Permettre l'utilisation du Markdown pour pouvoir structurer le texte des grands formulaires, notamment : Sommiers, Tuyauterie, Evènement.

Etendue de chaque clavier

Information à pouvoir éditer et ajouter en tête de colonne dans le tableau de composition en mode lecture, juste en-dessous du titre du clavier.

Affichage département

Affichage du département en plus de la commune et de l’édifice dans les titres de fiche et dans les puces de cartes.

Sent with GitHawk

Lien POP via PM

Avec la codification Palissy, de type PM0123456, on peut fabriquer une url vers POP, grâce à un suffixe invariable à placer en configuration.
Ce lien peut être présent à minima dans le cartouche de résumé.

Sent with GitHawk

Bug d'affichage mini-carte

La mini-carte ne s'affiche pas si lat ou lon sont négatifs. Probablement un problème de formattage de chaîne de caractère Javascript.
Peut-être utiliser : |safe plutôt que |escapejs dans le template HTML.

Basses et dessus

Pour un jeu de la composition, pouvoir choisir :

  • "Basse" : abbréviation possible dans la lecture : "B"
  • "Dessus" : abbréviation possible dans la lecture : "D"
  • (néant)

Ordre des items dans le cartouche résumé

  • 3 infos générales :

    • facteur d’orgues + année de construction
    • élévation
    • état
  • 6 infos techniques :

    • nombre de claviers + étendue
    • nombre de jeux
    • pédalier + étendue
    • ajouter : boîte expressive (oui ou non, information utile pour l’accompagnement d’un choeur ou d’un soliste comme du répertoire)
    • transmission
    • tirage des jeux
  • 2 infos administratives :

    • propriétaire
    • association

Facteurs dans le cartouche résumé

Les afficher sous forme d'une liste : Facteurs(année d'intervention), Facteurs(année d'intervention), etc.
Comme sur le site ADORA Orgue Aquitaine.

Recherche "élastique"

Implémenter une recherche souple :

  • Pour débuter : simple spilt d'une chaîne de caractère (enlever et séparer "église", "-", " ", et ne pas tenir compte de la casse), de façon à ce qu'une recherche sur "malo" affiche les orgues de Saint-Malo.
  • Suppression automatique des espaces en début et fin de saisie
  • Puis : ElasticSearch ou équivalent.

Edition tirage des jeux et transmission des notes

  • En mode édition de la fiche, faire apparaître un court champ libre pour le tirage des jeux.
  • En mode édition de la fiche, faire apparaître un court champ libre pour la transmission des notes.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.