Find a file
Alexis Métaireau d11cdb5eb8 Specify version in la_chariotte.__version__ only
Rather than having the version specified in different locations. This uses
setuptools dynamic features.
2023-08-14 11:58:11 +02:00
la_chariotte Specify version in la_chariotte.__version__ only 2023-08-14 11:58:11 +02:00
.coveragerc create gitlab-ci.yml 2023-04-18 16:03:57 +02:00
.gitignore Add package{,-lock}.json to the gitignore. 2023-08-14 11:47:05 +02:00
.gitlab-ci.yml fix venv creation in ci 2023-07-13 16:30:08 +02:00
CHANGELOG.md do not specify changes in CHANGELOG before v1 2023-08-14 08:39:43 +00:00
chariotte-v0-data.sql dump data for v0 2023-06-05 14:33:30 +02:00
conftest.py tests and test fixtures 2023-04-19 18:13:44 +02:00
dev-requirements.txt move xhtml dependency to requirements.txt 2023-06-05 14:35:57 +02:00
Dockerfile install gettext in Docker image 2023-07-31 14:11:08 +00:00
LICENSE license file and info 2023-03-30 16:54:42 +02:00
mails.sqlite password reset pages and email sending 2023-08-07 15:54:10 +02:00
manage.py install black and format files 2023-04-18 16:01:10 +02:00
pyproject.toml Specify version in la_chariotte.__version__ only 2023-08-14 11:58:11 +02:00
README.md Specify version in la_chariotte.__version__ only 2023-08-14 11:58:11 +02:00
requirements.txt add plain text alternative to mail 2023-08-11 12:08:14 +02:00

La Chariotte | 1.0.0

Présentation

La Chariotte est une application web sous licence libre Affero GPL, développée et maintenue par Hashbang.

Contribuer

Si vous souhaitez contribuer au projet de la Chariotte, merci beaucoup !

Pour cela, une fois que vous avez cloné le projet et obtenu le statut de développeur sur le projet GitLab, vous pouvez :

  • choisir une tâche dans le board que vous voulez réaliser, et vous l'assigner - si vous ne savez pas quelle tâche faire, n'hésitez pas à écrire à laetitia@chariotte.fr
  • créer une nouvelle branche à partir de develop dont le nom dira ce que vous voulez faire
  • réaliser la tâche, sans oublier d'écrire et de lancer les tests (voir plus bas)
  • créer une Merge Request, contenant le plus de détails possible sur ce que vous avez fait

Ensuite, un mainteneur de la Chariotte pourra relire votre code et proposer des améliorations/poser des questions si nécessaire. Seuls les mainteneurs peuvent merger dans develop et main.

Encore merci, et bon code !

Versions - semantic versionning

Les fonctionnalités développées dans les différentes versions sont listées dans le fichier CHANGELOG.md.

Étant donné un numéro de version MAJEUR.MINEUR.CORRECTIF, il faut incrémenter :

le numéro de version MAJEUR quand il y a des changements non rétrocompatibles, le numéro de version MINEUR quand il y a des ajouts de fonctionnalités rétrocompatibles, le numéro de version de CORRECTIF quand il y a des corrections danomalies rétrocompatibles.

La version est à mettre à jour dans la_chariotte.__init__.py lors des releases.

Développement

Cloner le projet :

git clone https://gitlab.com/hashbangfr/la_chariotte.git

Installer les dépendances :

pip install -r requirements.txt
pip install -r dev-requirements.txt

Installation d'un environnement virtuel

Pour éviter que les bibliothèques nécessaires au projet ne rentrent en conflit avec celles de votre système, il peut être utile d'installer un environnement virtuel :

python3 -m venv .venv

Une fois l'environnement virtuel installé, vous pouvez l'activer :

source .venv/bin/activate

Installation de la base de données

La Chariotte nécessite une base de données, et est actuellement compatible avec PostgreSQL (instructions d'installation ici).

Pour le développement, nous vous conseillons de créer une base de données nommée chariotte accessible par l'utilisateur et le mot de passe du même nom.

CREATE ROLE chariotte WITH
	LOGIN
	NOSUPERUSER
	CREATEDB
	NOCREATEROLE
	INHERIT
	NOREPLICATION
	CONNECTION LIMIT -1
	PASSWORD 'xxxxxx';
CREATE DATABASE chariotte
    WITH
    OWNER = chariotte
    ENCODING = 'UTF8'
    CONNECTION LIMIT = -1
    IS_TEMPLATE = False;

Création du fichier de configuration

Créez un fichier de configuration dans lequel vous pourrez spécifier la configuration qui est utile pour vous. Nous allons le nommer ici local_settings.py.

from la_chariotte.settings import *

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'chariotte',
        'USER': 'chariotte',
        'PASSWORD': 'chariotte',
        'HOST': 'localhost',
    }
}

Lancement du serveur

Tout devrait être maintenant prêt pour pouvoir lancer le serveur :

python manage.py runserver --settings=local_settings

Pour créer un superutilisateur, qui aura accès à l'interface admin (/admin) :

python manage.py createsuperuser

Travailler sur le frontend

install bulma

npm install bulma

check sass version

sass --version
# used for developement: 1.59.3 compiled with dart2js 2.19.4

watch for changes when updating scss files (from project root)

sass --watch --no-source-map ./la_chariotte/static/sass/style.sass:./la_chariotte/static/css/app.css

OR compile css only once (from project root)

sass --no-source-map ./la_chariotte/static/sass/style.sass:./la_chariotte/static/css/app.css

Lancer les tests

Lancer les tests avec pytest :

pytest

Si il y a des erreurs ISORT, on peut lancer isort pour trier les fichiers :

isort .

Si il y a des erreurs BLACK, on peut lancer black pour linter le code :

black .

Tests de l'envoi de mails

Pour tester l'apparence des mails, on peut utiliser Sendria :

pip install sendria
sendria --db mails.sqlite
$NAVIGATOR http://127.0.0.1:1080

Architecture de l'application

Les différentes applications Django créées sont :

  • order, pour gérer tout ce qui tourne autour des commandes
  • accounts, pour gérer la création de comptes. Pour la connexion, la déconnexion et le changement de mot de passe, on utilise l'application auth intégrée à Django.
  • mail, pour l'envoi des mails.

A l'état actuel, le diagramme de classes est le suivant :

classDiagram
    GroupedOrder "item_set" <-- Item
    GroupedOrder "order_set" <-- Order
    Order "ordered_items" <-- OrderedItem 
    Item "orders" <-- OrderedItem 
    OrderAuthor "author" <-- Order
    CustomUser "grouped_orders" <-- GroupedOrder

    class GroupedOrder{
      name
      deadline : DateTime
      delivery_date : Date
      place
      description
      orga : CustomUser
      total_price
    }
    class Item{
      name
      grouped_order : GroupedOrder
      ordered_nb
      total_price
      max_limit
    }
    class Order{
        grouped_order : GroupedOrder
        author : OrderAuthor
        price
        created_date
        note
    }
    class OrderedItem{
        order : Order
        nb 
        item : Item
    }
    class OrderAuthor {
        first_name
        last_name
        phone
        email
    }
    class CustomUser{
        first_name
        last_name
        email
    }