Cet outil a été développé dans le cadre de la crise sanitaire du COVID-19 afin de permettre une remontée hebdomadaire simple, anonyme et sur la base du volontariat du moral de l'équipe chez Etalab.
Il peut être adapté facilement pour d'autres besoins et déployé sur n'importe quel serveur supportant Python3 et/ou Docker.
La configuration se fait via un fichier TOML. Le fichier utilisé par défaut est dans config/config.toml
. Vous pouvez modifier ce fichier ou pointer vers un autre fichier en utilisant la variable d'environnement CCV_CONFIG_FILE
.
Exemple de fichier de configuration commenté :
# Le titre du formulaire
title = "Comment ça va cette semaine ?"
# Chaque ligne de ce tableau constitue un paragraphe derrière le lien "Pourquoi ce questionnaire"
why = [
"L'objectif principal de ce questionnaire est de mieux appréhender le moral à Etalab pendant le confinement, semaine par semaine. Un autre objectif est de permettre à chacun et chacune de s'exprimer de manière anonyme si il ou elle le souhaite.",
"A travers les résultats, nous cherchons notamment à identifier d'éventuelles baisses de moral collectives, voire individuelles à travers le champ texte libre.",
]
# Chaque champ du formulaire est introduit par [[fields]]
[[fields]]
# Le formulaire a deux emplacement : `top` et `bottom`
# L'emplacement `top` peut être utilisé pour les champs obligatoire et les plus importants
# L'emplacement `bottom` peut être utilisé pour les champs facultatifs ou moins importants
# L'emplacement `bottom` est facultatif
position = "top"
# Le nom technique du champ, doit être unique pour chaque champ
name = "mood"
# Le type (`radio` ou `textarea` pour l'instant)
type = "radio"
# Le nom du champ pour les humains
label = "Mon moral"
# Dans le cas d'un champ "radio", les différentes options
# Sous la forme ["{clé_technique}", "{nom_humain}"]
options = [
[ "tres_bien", "😀",],
[ "bien", "🙂",],
[ "moyen", "😐",],
[ "pas_bien", "🙁",],
]
# Champ requis ou non
required = true
# La taille des options radio (facultatif)
size = "lg"
# La description qui s'affiche sous le champ (facultatif)
hint = "C'est le seul champ obligatoire 😉"
[[fields]]
position = "top"
name = "thoughts"
label = "Besoin d'aide ? Un problème ? Une suggestion ? Un coup de gueule ? C'est ici !"
type = "textarea"
required = false
hint = "Ces commentaires ne sont pas publics."
cd backend
pip install -r backend/requirements.txt
FLASK_DEBUG=1 FLASK_APP=app flask run
L'app python sera disponible sur http://localhost:5000.
Une base de données sqlite stockée dans backend/commentcava.db
sera utilisée. Vous pouvez changer ça grâce à la variable d'environnement DB_DSN
, par exemple pour utiliser une base postgres : DB_DSN=postgresql://postgres@db:5432/postgres
.
cd frontend
yarn install && yarn serve
L'app javascript sera disponible sur http://localhost:8080 et utilisera l'API ci-dessus.
Un docker-compose
tout-en-un est disponible. Une base postgres sera utilisée.
docker-compose up
L'application sera disponible sur http://{docker-host}:8000
.
Une interface de consultation des résultats agrégés par intervalle de dates est disponible sur /report
.
Un export CSV est disponible via la commande suivante :
$ cd backend
$ python cli.py export-csv --help
Usage: cli.py export-csv [OPTIONS]
Options:
--start TEXT Start date (eg 2012-12-01)
--end TEXT End date (eg 2012-12-31)
--help Show this message and exit.
Le CSV sera disponible sur la sortie standard. Vous pouvez utiliser la commande suivante pour exporter les résultats dans un fichier :
pyton cli.py export-csv > monfichier.csv