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 *.mo
*__pycache__* *__pycache__*
.DS_Store .DS_Store
pyrightconfig.json
poetry.lock
dist/
.vscode/ .vscode/
env/ env/
doc/html doc/html

View File

@ -6,20 +6,14 @@ test:
script: script:
- env - env
- apt-get update - apt-get update
- apt-get install -y gettext python3-xapian libgraphviz-dev - apt-get install -y gettext libxapian-dev libgraphviz-dev
- pushd /usr/lib/python3/dist-packages/xapian && ln -s _xapian* _xapian.so && popd - pip install .[testing]
- 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
- mkdir -p /dev/shm/search_indexes - mkdir -p /dev/shm/search_indexes
- ln -s /dev/shm/search_indexes sith/search_indexes - ln -s /dev/shm/search_indexes sith/search_indexes
- ./manage.py compilemessages - ./manage.py compilemessages
- coverage run ./manage.py test - coverage run ./manage.py test
- coverage html - coverage html
- coverage report - coverage report
- cd doc
- make html # Make documentation
variables: variables:
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip_tests" PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip_tests"
cache: cache:

View File

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

View File

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

View File

@ -22,7 +22,7 @@ VsCode
.. warning:: .. 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 : 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 : Certaines dépendances sont nécessaires niveau système :
* virtualenv * poetry
* libmysqlclient * libmysqlclient
* libssl * libssl
* libjpeg * libjpeg
* python3-xapian * libxapian-dev
* zlib1g-dev * zlib1g-dev
* python3 * python3
* gettext * gettext
@ -22,8 +22,11 @@ Sur Ubuntu
.. sourcecode:: bash .. 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 apt install libssl-dev libjpeg-dev zlib1g-dev python3-dev libffi-dev python3-dev libgraphviz-dev pkg-config libxapian-dev gettext git
sudo pip3 install virtualenv 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 Sur MacOS
~~~~~~~~~ ~~~~~~~~~
@ -32,7 +35,7 @@ Pour installer les dépendances, il est fortement recommandé d'installer le ges
.. sourcecode:: bash .. 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 # Si vous aviez une version de python ne venant pas de homebrew
brew link --overwrite python 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 # Pour bien configurer gettext
brew link gettext # (suivez bien les instructions supplémentaires affichées) brew link gettext # (suivez bien les instructions supplémentaires affichées)
# Pour installer virtualenv # Pour installer poetry
pip3 install virtualenv pip3 install poetry
.. note:: .. note::
@ -56,15 +59,11 @@ Installer le projet
git clone https://ae-dev.utbm.fr/ae/Sith.git git clone https://ae-dev.utbm.fr/ae/Sith.git
cd Sith cd Sith
# Prépare et active l'environnement du projet # Création de l'environnement et installation des dépendances
virtualenv --system-site-packages --python=python3 env poetry install
source env/bin/activate
# Installe les dépendances du projet # Activation de l'environnement virtuel
pip install -r requirements.txt poetry shell
# 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/"
# Prépare la base de donnée # Prépare la base de donnée
./manage.py setup ./manage.py setup
@ -74,7 +73,7 @@ Installer le projet
.. note:: .. 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 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