Using poetry as a dependency system for development

This commit is contained in:
Antoine Bartuccio 2021-10-15 16:12:56 +00:00
parent bfa3b45547
commit 85623f48a9
10 changed files with 115 additions and 59 deletions

15
.envrc
View File

@ -1 +1,14 @@
source ./env/bin/activate
if [[ ! -f pyproject.toml ]]; then
log_error 'No pyproject.toml found. Use `poetry new` or `poetry init` to create one first.'
exit 2
fi
local VENV=$(poetry env list --full-path | cut -d' ' -f1)
if [[ -z $VENV || ! -d $VENV/bin ]]; then
log_error 'No poetry virtual environment found. Use `poetry install` to create one first.'
exit 2
fi
export VIRTUAL_ENV=$VENV
export POETRY_ACTIVE=1
PATH_add "$VENV/bin"

3
.gitignore vendored
View File

@ -4,6 +4,9 @@ db.sqlite3
*.mo
*__pycache__*
.DS_Store
pyrightconfig.json
poetry.lock
dist/
.vscode/
env/
doc/html

View File

@ -6,20 +6,14 @@ test:
script:
- env
- apt-get update
- apt-get install -y gettext python3-xapian libgraphviz-dev
- pushd /usr/lib/python3/dist-packages/xapian && ln -s _xapian* _xapian.so && popd
- export PYTHONPATH="/usr/lib/python3/dist-packages:$PYTHONPATH"
- python -c 'import xapian' # Fail immediately if there is a problem with xapian
- pip install -U -r requirements.txt
- pip install -U coverage
- apt-get install -y gettext libxapian-dev libgraphviz-dev
- pip install .[testing]
- mkdir -p /dev/shm/search_indexes
- ln -s /dev/shm/search_indexes sith/search_indexes
- ./manage.py compilemessages
- coverage run ./manage.py test
- coverage html
- coverage report
- cd doc
- make html # Make documentation
variables:
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip_tests"
cache:

View File

@ -8,7 +8,7 @@ Och <francescowitz68@gmail.com>
Partoo <joqaste@gmail.com>
Skia <skia@hya.sk> <lordbanana25@mailoo.org>
Skia <skia@hya.sk> <skia@libskia.so>
Sli <klmp200@klmp200.net>
Sli <klmp200@klmp200.net> <antoine@bartuccio.fr>
Soldat <ryan-68@live.fr>
Terre <jbaptiste.lenglet+git@gmail.com>
Vial <robin.trioux@utbm.fr>

View File

@ -4,6 +4,11 @@
# Required
version: 2
# Allow installing xapian-bindings in pip
build:
apt_packages:
- libxapian-dev
# Build documentation in the doc/ directory with Sphinx
sphinx:
configuration: doc/conf.py
@ -13,6 +18,9 @@ formats: all
# Optionally set the version of Python and requirements required to build your docs
python:
version: 3.6
version: 3.8
install:
- requirements: requirements.txt
- method: pip
path: .
extra_requirements:
- docs

View File

@ -160,12 +160,13 @@ Sentry
Sentry est une plate-forme libre qui permet de se tenir informer des bugs qui ont lieu sur le site. À chaque crash du logiciel (erreur 500), une erreur est envoyée sur la plate-forme et est indiqué précisément à quelle ligne de code celle-ci a eu lieu, à quelle heure, combien de fois, avec quel navigateur la page a été visitée et même éventuellement un commentaire de l'utilisateur qui a rencontré le bug.
Virtualenv
Poetry
~~~~~~~~~~
`Utiliser virtualenv <https://python-guide-pt-br.readthedocs.io/fr/latest/dev/virtualenvs.html>`__
`Utiliser Poetry <https://python-poetry.org/docs/basic-usage/>`__
Virtualenv est un utilitaire permettant d'installer un environnement Python de manière locale sans avoir besoin des droits root pour y installer des dépendances. Il est très utilisé pour gérer plusieurs projets différents en parallèles puisqu'il permet d'avoir sur sa machine plusieurs environnements différents et donc plusieurs versions d'une même dépendance dans plusieurs projets différent sans impacter le système sur lequel le tout est installé.
Poetry est un utilitaire qui permet de créer et gérer des environements Python de manière simple et intuitive. Il permet également de gérer et mettre à jour le fichier de dépendances.
L'avantage d'utiliser poetry (et les environnements virtuels en général) est de pouvoir gérer plusieurs projets différents en parallèles puisqu'il permet d'avoir sur sa machine plusieurs environnements différents et donc plusieurs versions d'une même dépendance dans plusieurs projets différent sans impacter le système sur lequel le tout est installé.
Black
~~~~~

View File

@ -22,7 +22,7 @@ VsCode
.. warning::
Il faut installer black dans son virtualenv pour cet éditeur
Il faut installer black dans son environement virtuel pour cet éditeur
Black est directement pris en charge par l'extension pour le Python de VsCode, il suffit de rentrer la configuration suivante :

View File

@ -6,11 +6,11 @@ Dépendances du système
Certaines dépendances sont nécessaires niveau système :
* virtualenv
* poetry
* libmysqlclient
* libssl
* libjpeg
* python3-xapian
* libxapian-dev
* zlib1g-dev
* python3
* gettext
@ -22,8 +22,11 @@ Sur Ubuntu
.. sourcecode:: bash
sudo apt install libmysqlclient-dev libssl-dev libjpeg-dev zlib1g-dev python3-dev libffi-dev python3-dev libgraphviz-dev pkg-config python3-xapian gettext git
sudo pip3 install virtualenv
sudo apt install libssl-dev libjpeg-dev zlib1g-dev python3-dev libffi-dev python3-dev libgraphviz-dev pkg-config libxapian-dev gettext git
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3 -
# To include mysql for importing old bdd
sudo apt install libmysqlclient-dev
Sur MacOS
~~~~~~~~~
@ -32,7 +35,7 @@ Pour installer les dépendances, il est fortement recommandé d'installer le ges
.. sourcecode:: bash
brew install git python xapian graphviz
brew install git python xapian graphviz poetry
# Si vous aviez une version de python ne venant pas de homebrew
brew link --overwrite python
@ -41,8 +44,8 @@ Pour installer les dépendances, il est fortement recommandé d'installer le ges
# Pour bien configurer gettext
brew link gettext # (suivez bien les instructions supplémentaires affichées)
# Pour installer virtualenv
pip3 install virtualenv
# Pour installer poetry
pip3 install poetry
.. note::
@ -56,15 +59,11 @@ Installer le projet
git clone https://ae-dev.utbm.fr/ae/Sith.git
cd Sith
# Prépare et active l'environnement du projet
virtualenv --system-site-packages --python=python3 env
source env/bin/activate
# Création de l'environnement et installation des dépendances
poetry install
# Installe les dépendances du projet
pip install -r requirements.txt
# Si vous avez des problèmes avec graphiviz
pip install pygraphviz --install-option="--include-path=/usr/include/graphviz" --install-option="--library-path=/usr/lib/graphviz/"
# Activation de l'environnement virtuel
poetry shell
# Prépare la base de donnée
./manage.py setup
@ -74,7 +73,7 @@ Installer le projet
.. note::
Pour éviter d'avoir à utiliser la commande source sur le virtualenv systématiquement, il est possible de consulter :ref:`direnv`.
Pour éviter d'avoir à utiliser la commande poetry shell systématiquement, il est possible de consulter :ref:`direnv`.
Configuration pour le développement
-----------------------------------

65
pyproject.toml Normal file
View File

@ -0,0 +1,65 @@
[tool.poetry]
name = "Sith"
version = "1"
description = "Le web Sith de l'AE"
authors = [
"Skia <skia@hya.sk>",
"klmp200 <antoine@bartuccio.fr>",
"Krophil <pierre.brunet@krophil.fr>",
"Och <francescowitz68@gmail.com>",
"tleb <tleb@openmailbox.org>",
"Soldat <ryan-68@live.fr>",
"Nabos <gnikwo@hotmail.com>",
"Terre <jbaptiste.lenglet+git@gmail.com>",
"Lo-J <renaudg779@gmail.com>",
"Vial <robin.trioux@utbm.fr>"
]
documentation = "https://sith-ae.readthedocs.io/"
homepage = "https://ae.utbm.fr/"
license = "GPL-3.0-only"
[tool.poetry.dependencies]
python = "^3.7"
Django = "^2.2"
Pillow = "^8.3.2"
mistune = "^0.8.4"
django-jinja = "^2.9.1"
pyOpenSSL = "^21.0.0"
pytz = "^2021.1"
djangorestframework = "^3.12.4"
django-phonenumber-field = "^5.2.0"
phonenumbers = "^8.12.33"
django-ajax-selects = "^2.1.0"
reportlab = "^3.6.1"
django-haystack = "^3.1.1"
xapian-haystack = "^2.1.1"
xapian-bindings = "^0.1.0"
libsass = "^0.21.0"
django-ordered-model = "^3.4.3"
django-simple-captcha = "^0.5.14"
python-dateutil = "^2.8.2"
sentry-sdk = "^1.4.3"
graphviz = "^0.17"
# Extra optional dependencies
mysqlclient = { version = "^2.0.3", optional = true }
coverage = {version = "^5.5", optional = true}
# Docs extra dependencies
Sphinx = {version = "^4.2.0", optional = true}
sphinx-rtd-theme = {version = "^1.0.0", optional = true}
sphinx-copybutton = {version = "^0.4.0", optional = true}
[tool.poetry.extras]
testing = ["coverage"]
migration = ["mysqlclient"]
docs = ["Sphinx", "sphinx-rtd-theme", "sphinx-copybutton"]
[tool.poetry.dev-dependencies]
django-debug-toolbar = "^3.2.2"
ipython = "^7.28.0"
black = "^21.9b0"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

View File

@ -1,27 +0,0 @@
# Django 1.11 LTS is required
Django >=2.2, <3.0
Pillow
mistune
django-jinja
pyopenssl
pytz
djangorestframework
django-phonenumber-field
phonenumbers
django-ajax-selects
reportlab
django-haystack
xapian-haystack
django-debug-toolbar
libsass
django-ordered-model
django-simple-captcha
python-dateutil
pygraphviz
sentry_sdk
# mysqlclient
# For documentation
Sphinx > 2.0
sphinx_rtd_theme
sphinx-copybutton