diff --git a/.envrc b/.envrc index d07b2249..01ae3148 100644 --- a/.envrc +++ b/.envrc @@ -1 +1,14 @@ -source ./env/bin/activate \ No newline at end of file +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" \ No newline at end of file diff --git a/.gitignore b/.gitignore index c373aaee..45f266f8 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,9 @@ db.sqlite3 *.mo *__pycache__* .DS_Store +pyrightconfig.json +poetry.lock +dist/ .vscode/ env/ doc/html diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9943ab73..7b295d9e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -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: diff --git a/.mailmap b/.mailmap index 30fe2218..9533f02a 100644 --- a/.mailmap +++ b/.mailmap @@ -8,7 +8,7 @@ Och Partoo Skia Skia -Sli +Sli Soldat Terre Vial diff --git a/.readthedocs.yml b/.readthedocs.yml index 87a19b4f..afd7b4e3 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -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 \ No newline at end of file + - method: pip + path: . + extra_requirements: + - docs diff --git a/doc/about/tech.rst b/doc/about/tech.rst index 155f2792..ecd35b6b 100644 --- a/doc/about/tech.rst +++ b/doc/about/tech.rst @@ -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 `__ +`Utiliser Poetry `__ -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 ~~~~~ diff --git a/doc/start/devtools.rst b/doc/start/devtools.rst index 9c15bf7b..3688d099 100644 --- a/doc/start/devtools.rst +++ b/doc/start/devtools.rst @@ -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 : diff --git a/doc/start/install.rst b/doc/start/install.rst index 502835f0..f255799a 100644 --- a/doc/start/install.rst +++ b/doc/start/install.rst @@ -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 ----------------------------------- diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..178942af --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,65 @@ +[tool.poetry] +name = "Sith" +version = "1" +description = "Le web Sith de l'AE" +authors = [ + "Skia ", + "klmp200 ", + "Krophil ", + "Och ", + "tleb ", + "Soldat ", + "Nabos ", + "Terre ", + "Lo-J ", + "Vial " +] +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" diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index ae74020d..00000000 --- a/requirements.txt +++ /dev/null @@ -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