Application Django pour la gestion du COF
Find a file
2023-05-19 15:21:47 +02:00
bda Remove useless migrations 2023-05-19 15:21:47 +02:00
bds Remove useless migrations 2023-05-19 15:21:47 +02:00
clubs Remove useless migrations 2023-05-19 15:21:47 +02:00
events Remove useless migrations 2023-05-19 15:21:47 +02:00
gestioasso Use AutoField instead of BigAutoField 2023-05-19 15:21:19 +02:00
gestioncof Remove useless migrations 2023-05-19 15:21:47 +02:00
kfet Remove useless migrations 2023-05-19 15:21:47 +02:00
petitscours Replace unique_together by UniqueConstraint 2023-05-19 15:21:19 +02:00
provisioning Update django-redis-cache and fix vagrant setup 2023-05-19 15:18:58 +02:00
shared Update redis, and implement a custom channel layer to send datetime/decimal objects 2023-05-19 15:20:44 +02:00
.envrc dev: add nixos setup 2022-10-03 10:34:06 +02:00
.gitignore Update gitignore and shell.nix 2023-05-19 15:14:55 +02:00
.gitlab-ci.yml Fix typo 2023-05-19 15:21:19 +02:00
.pre-commit.sh Update the isort config for version 5.* 2020-07-04 13:40:32 +02:00
CHANGELOG.md Update changelog 2023-05-19 15:21:19 +02:00
LICENSE Add license 2017-02-11 21:35:29 +01:00
manage.py Rename the cof/ folder to gestioasso/ 2021-02-07 17:17:15 +01:00
pyproject.toml core -- Add black,isort,flake8 to CI and pre-commit hook 2018-10-06 12:53:50 +02:00
README.md Make "GestioBDS" appear in the README 2021-02-07 18:11:17 +01:00
requirements-devel.txt requirements: Fix required versions 2023-05-19 14:43:25 +02:00
requirements-prod.txt Update redis, and implement a custom channel layer to send datetime/decimal objects 2023-05-19 15:20:44 +02:00
requirements.txt Update django-hCaptcha 2023-05-19 15:21:46 +02:00
setup.cfg cof has been renamed to gestioasso 2023-05-19 15:21:19 +02:00
shell.nix Update gitignore and shell.nix 2023-05-19 15:14:55 +02:00
Vagrantfile Update the vagrant config → should work now 2020-12-04 16:10:27 +01:00

GestioCOF / GestioBDS

pipeline status coverage report

Installation

Il est possible d'installer GestioCOF sur votre machine de deux façons différentes :

Installation manuelle

Il est fortement conseillé d'utiliser un environnement virtuel pour Python.

Il vous faudra installer pip, les librairies de développement de python ainsi que sqlite3, un moteur de base de données léger et simple d'utilisation. Sous Debian et dérivées (Ubuntu, ...) :

sudo apt-get install python3-pip python3-dev python3-venv sqlite3

Si vous décidez d'utiliser un environnement virtuel Python (virtualenv; fortement conseillé), déplacez-vous dans le dossier où est installé GestioCOF (le dossier où se trouve ce README), et créez-le maintenant :

python3 -m venv venv

Pour l'activer, il faut taper

. venv/bin/activate

depuis le même dossier.

Vous pouvez maintenant installer les dépendances Python depuis le fichier requirements-devel.txt :

pip install -U pip  # parfois nécessaire la première fois
pip install -r requirements-devel.txt

Pour terminer, copier le fichier gestioasso/settings/secret_example.py vers gestioasso/settings/secret.py. Sous Linux ou Mac, préférez plutôt un lien symbolique pour profiter de façon transparente des mises à jour du fichier:

ln -s secret_example.py gestioasso/settings/secret.py

Nous avons un git hook de pre-commit pour formatter et vérifier que votre code vérifie nos conventions. Pour bénéficier des mises à jour du hook, préférez encore l'installation via un lien symbolique:

ln -s ../../.pre-commit.sh .git/hooks/pre-commit

Pour plus d'informations à ce sujet, consulter la page du wiki gestioCOF liée aux conventions.

Fin d'installation

Il ne vous reste plus qu'à initialiser les modèles de Django et peupler la base de donnée avec les données nécessaires au bon fonctionnement de GestioCOF + des données bidons bien pratiques pour développer avec la commande suivante :

bash provisioning/prepare_django.sh

Voir le paragraphe "outils pour développer" plus bas pour plus de détails.

Vous êtes prêts à développer ! Lancer GestioCOF en faisant

python manage.py runserver

Vagrant

Une autre façon d'installer GestioCOF sur votre machine est d'utiliser Vagrant. Vagrant permet de créer une machine virtuelle minimale sur laquelle tournera GestioCOF; ainsi on s'assure que tout le monde à la même configuration de développement (même sous Windows !), et l'installation se fait en une commande.

Pour utiliser Vagrant, il faut le télécharger et l'installer.

Si vous êtes sous Linux, votre distribution propose probablement des paquets Vagrant dans le gestionnaire de paquets (la version sera moins récente, ce qui peut parfois poser des problèmes de compatibilité).

Vagrant permet d'utiliser différents types de machines virtuelles; par défaut il utilise Virtualbox qu'il vous faudra également installer.

Une fois ces dépendances installées voici quelques commandes importantes pour gérer la machine virtuelle :

  • vagrant up permet de lancer la machine virtuelle. Si une machine virtuelle existe déjà, elle sera réutilisée; sinon, Vagrant va créer et configurer une nouvelle machine virtuelle pour vous (la première fois que vous lancez cette commande, Vagrant va télécharger une image d'Ubuntu; il vaut mieux avoir une connexion Internet pas trop mauvaise).

  • vagrant suspend permet de sauver l'état de la machine virtuelle sur le disque pour la relancer plus tard (y compris après un reboot) avec vagrant up

  • vagrant halt permet d'éteindre la machine virtuelle (par comparaison avec vagrant suspend, cela prend moins de place sur le disque car il n'y a pas besoin de sauver la RAM, mais la recréation avec vagrant up sera plus lente)

  • Enfin, vagrant destroy permet de détruire complètement la machine virtuelle : lors du prochain appel de vagrant up, elle sera réinstallée de zéro. Attention, contrairement aux deux méthodes précédentes, vagrant destroy détruira irrémédiablement le contenu de votre base de données locale, si elle vous est d'un quelconque intérêt, réfléchissez à deux fois !

  • vagrant ssh vous connecte en SSH à la machine virtuelle, dans le dossier où est installé GestioCOF. Vous pouvez utiliser les commandes Django habituelles (manage.py runserver etc.) pour lancer le serveur en dev par exemple

Le dossier avec le code de GestioCOF est partagé entre la machine virtuelle et votre machine physique : vous pouvez donc utiliser votre éditeur favori pour coder depuis l'extérieur de la machine virtuelle, et les changements seront répercutés dans la machine virtuelle.

Lancer le serveur de développement standard

Pour lancer le serveur de développement, il faut faire

   python manage.py runserver 0.0.0.0:8000

car par défaut Django n'écoute que sur l'adresse locale de la machine virtuelle or vous voudrez accéder à GestioCOF depuis votre machine physique. L'url à entrer dans le navigateur est localhost:8000.

Serveur de développement type production

Juste histoire de jouer, pas indispensable pour développer :

La VM Vagrant héberge en plus un serveur nginx configuré pour servir GestioCOF comme en production : on utilise Daphne et python manage.py runworker derrière un reverse-proxy nginx.

Ce serveur se lance tout seul et est accessible en dehors de la VM à l'url localhost:8080/gestion/. Toutefois il ne se recharge pas tout seul lorsque le code change, il faut relancer le worker avec sudo systemctl restart worker.service pour visualiser la dernière version du code.

Mise à jour

Pour mettre à jour les paquets Python, utiliser la commande suivante :

pip install --upgrade -r requirements-devel.txt

Pour mettre à jour les modèles après une migration, il faut ensuite faire :

python manage.py migrate

Outils pour développer

Base de donnée

Quelle que soit la méthode d'installation choisie, la base de donnée locale est peuplée avec des données artificielles pour faciliter le développement.

  • Un compte root (mot de passe root) avec tous les accès est créé. Connectez vous sur ce compte pour accéder à tout GestioCOF.
  • Des comptes utilisateurs COF et non-COF sont créés ainsi que quelques spectacles BdA et deux tirages au sort pour jouer avec les fonctionnalités du BdA.
  • À chaque compte est associé un trigramme K-Fêt
  • Un certain nombre d'articles K-Fêt sont renseignés.

Tests unitaires

On écrit désormais des tests unitaires qui sont lancés automatiquement sur gitlab à chaque push. Il est conseillé de lancer les tests sur sa machine avant de proposer un patch pour s'assurer qu'on ne casse pas une fonctionnalité existante.

Pour lancer les tests :

python manage.py test

Astuces

  • En développement on utilise la django debug toolbar parce que c'est utile pour débuguer les templates ou les requêtes SQL mais des fois c'est pénible parce ça fait ramer GestioCOF (surtout dans wagtail). Vous pouvez la désactiver temporairement en définissant la variable d'environnement DJANGO_NO_DDT dans votre shell : par exemple dans bash/zsh/…:
    $ export DJANGO_NO_DDT=1
    

Documentation utilisateur

Une brève documentation utilisateur est accessible sur le wiki pour avoir une idée de la façon dont le COF utilise GestioCOF.