Merge pull request #46 from YunoHost-Apps/testing

master <- testing
This commit is contained in:
eric_G 2024-05-13 21:04:17 +02:00 committed by GitHub
commit 03ac1a778a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
23 changed files with 999 additions and 1169 deletions

View file

@ -1,6 +1,8 @@
# All available README files by language # All available README files by language
- [Read the README in English](README.md) - [Read the README in English](README.md)
- [Lee el README en español](README_es.md)
- [Irakurri README euskaraz](README_eu.md)
- [Lire le README en français](README_fr.md) - [Lire le README en français](README_fr.md)
- [Le o README en galego](README_gl.md) - [Le o README en galego](README_gl.md)
- [Leggi il “README” in italiano](README_it.md) - [阅读中文(简体)的 README](README_zh_Hans.md)

172
README.md
View file

@ -9,24 +9,21 @@ It shall NOT be edited by hand.
[![Install django-for-runners with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=django-for-runners) [![Install django-for-runners with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=django-for-runners)
*[Read this README is other languages.](./ALL_README.md)* *[Read this README in other languages.](./ALL_README.md)*
> *This package allows you to install django-for-runners quickly and simply on a YunoHost server.* > *This package allows you to install django-for-runners quickly and simply on a YunoHost server.*
> *If you don't have YunoHost, please consult [the guide](https://yunohost.org/install) to learn how to install it.* > *If you don't have YunoHost, please consult [the guide](https://yunohost.org/install) to learn how to install it.*
## Overview ## Overview
![Logo](https://raw.githubusercontent.com/jedie/django-for-runners/main/for_runners/static/Django-ForRunners128.png) [![tests](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/tests.yml)
[![codecov](https://codecov.io/github/jedie/for_runners_ynh/branch/main/graph/badge.svg)](https://app.codecov.io/github/jedie/for_runners_ynh)
[![for_runners_ynh @ PyPi](https://img.shields.io/pypi/v/for_runners_ynh?label=for_runners_ynh%20%40%20PyPi)](https://pypi.org/project/for_runners_ynh/)
[![Python Versions](https://img.shields.io/pypi/pyversions/for_runners_ynh)](https://github.com/YunoHost-Apps/django-for-runners_ynh/blob/main/pyproject.toml)
[![License GPL-3.0-or-later](https://img.shields.io/pypi/l/for_runners_ynh)](https://github.com/YunoHost-Apps/django-for-runners_ynh/blob/main/LICENSE)
[django-for-runners](https://github.com/jedie/django-for-runners) is a libre web-based management for your GPX tracks of your running (or other sports activity). Used [Python](https://www.python.org/)/[Django](https://www.djangoproject.com/). [django-for-runners](https://github.com/jedie/django-for-runners) is a libre web-based management for your GPX tracks of your running (or other sports activity). Used [Python](https://www.python.org/)/[Django](https://www.djangoproject.com/).
[![pytest](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/pytest.yml/badge.svg?branch=master)](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/pytest.yml) [![YunoHost apps package linter](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/package_linter.yml/badge.svg)](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/package_linter.yml) [![Coverage Status on codecov.io](https://codecov.io/gh/YunoHost-Apps/django-for-runners_ynh/branch/master/graph/badge.svg)](https://codecov.io/gh/YunoHost-Apps/django-for-runners_ynh)
![django-for-runners @ PyPi](https://img.shields.io/pypi/v/django-for-runners?label=django-for-runners%20%40%20PyPi)
![Python Versions](https://img.shields.io/pypi/pyversions/django-for-runners)
![License GPL V3+](https://img.shields.io/pypi/l/django-for-runners)
Pull requests welcome ;) Pull requests welcome ;)
This package for YunoHost used [django-yunohost-integration](https://github.com/YunoHost-Apps/django_yunohost_integration) This package for YunoHost used [django-yunohost-integration](https://github.com/YunoHost-Apps/django_yunohost_integration)
@ -42,165 +39,8 @@ More screenshots are here: [jedie.github.io/tree/master/screenshots/django-for-r
![Screenshot of django-for-runners](./doc/screenshots/for_runners_v060_2018_07_19_event_costs.png) ![Screenshot of django-for-runners](./doc/screenshots/for_runners_v060_2018_07_19_event_costs.png)
![Screenshot of django-for-runners](./doc/screenshots/for_runners_v040_2018_6_26_gpx_info.png) ![Screenshot of django-for-runners](./doc/screenshots/for_runners_v040_2018_6_26_gpx_info.png)
## Disclaimers / important information
## Settings and upgrades
Almost everything related to django-for-runners's configuration is handled in a `"../conf/settings.py"` file.
You can edit the file `/opt/yunohost/django-for-runners/local_settings.py` to enable or disable features.
Test sending emails:
```bash
ssh admin@yourdomain.tld
root@yunohost:~# cd /opt/yunohost/django-for-runners/
root@yunohost:/opt/yunohost/django-for-runners# source venv/bin/activate
(venv) root@yunohost:/opt/yunohost/django-for-runners# ./manage.py sendtestemail --admins
```
Background info: Error mails are send to all [settings.ADMINS](https://docs.djangoproject.com/en/2.2/ref/settings/#std:setting-ADMINS). By default the YunoHost admin is inserted here.
To check current ADMINS run:
```bash
(venv) root@yunohost:/opt/yunohost/django-for-runners# ./manage.py sendtestemail --admins
```
If you prefere to send error emails to a extrnal email address, just do something like this:
```bash
echo "ADMINS = (('Your Name', 'example@domain.tld'),)" >> /opt/yunohost/django-for-runners/local_settings.py
```
To check the effective settings, run this:
```bash
(venv) root@yunohost:/opt/yunohost/django-for-runners# ./manage.py diffsettings
```
# Miscellaneous
## SSO authentication
[SSOwat](https://github.com/YunoHost/SSOwat) is fully supported via [django_ynh](https://github.com/YunoHost-Apps/django_ynh):
* First user (`$YNH_APP_ARG_ADMIN`) will be created as Django's super user
* All new users will be created as normal users
* Login via SSO is fully supported
* User Email, First / Last name will be updated from SSO data
## Links
* Report a bug about this package: https://github.com/YunoHost-Apps/django-for-runners_ynh
* Report a bug about django-for-runners itself: https://github.com/jedie/django-for-runners
* YunoHost website: https://yunohost.org/
---
# Developer info
## package installation / debugging
Please send your pull request to https://github.com/YunoHost-Apps/django-for-runners_ynh
Try 'main' branch, e.g.:
```bash
sudo yunohost app install https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/master --debug
or
sudo yunohost app upgrade django-for-runners -u https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/master --debug
```
Try 'testing' branch, e.g.:
```bash
sudo yunohost app install https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/testing --debug
or
sudo yunohost app upgrade django-for-runners -u https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/testing --debug
```
To remove call e.g.:
```bash
sudo yunohost app remove django-for-runners
```
Backup / remove / restore cycle, e.g.:
```bash
yunohost backup create --apps django-for-runners
yunohost backup list
archives:
- django-for-runners-pre-upgrade1
- 20201223-163434
yunohost app remove django-for-runners
yunohost backup restore 20201223-163434 --apps django-for-runners
```
Debug installation, e.g.:
```bash
root@yunohost:~# ls -la /var/www/django-for-runners/
total 18
drwxr-xr-x 4 root root 4 Dec 8 08:36 .
drwxr-xr-x 6 root root 6 Dec 8 08:36 ..
drwxr-xr-x 2 root root 2 Dec 8 08:36 media
drwxr-xr-x 7 root root 8 Dec 8 08:40 static
root@yunohost:~# ls -la /opt/yunohost/django-for-runners/
total 58
drwxr-xr-x 5 django-for-runners django-for-runners 11 Dec 8 08:39 .
drwxr-xr-x 3 root root 3 Dec 8 08:36 ..
-rw-r--r-- 1 django-for-runners django-for-runners 460 Dec 8 08:39 gunicorn.conf.py
-rw-r--r-- 1 django-for-runners django-for-runners 0 Dec 8 08:39 local_settings.py
-rwxr-xr-x 1 django-for-runners django-for-runners 274 Dec 8 08:39 manage.py
-rw-r--r-- 1 django-for-runners django-for-runners 171 Dec 8 08:39 secret.txt
drwxr-xr-x 6 django-for-runners django-for-runners 6 Dec 8 08:37 venv
-rw-r--r-- 1 django-for-runners django-for-runners 115 Dec 8 08:39 wsgi.py
-rw-r--r-- 1 django-for-runners django-for-runners 4737 Dec 8 08:39 settings.py
root@yunohost:~# cd /opt/yunohost/django-for-runners/
root@yunohost:/opt/yunohost/django-for-runners# source venv/bin/activate
(venv) root@yunohost:/opt/yunohost/django-for-runners# ./manage.py check
django-for-runners v0.8.2 (Django v2.2.17)
DJANGO_SETTINGS_MODULE='settings'
PROJECT_PATH:/opt/yunohost/django-for-runners/venv/lib/python3.7/site-packages
BASE_PATH:/opt/yunohost/django-for-runners
System check identified no issues (0 silenced).
root@yunohost:~# tail -f /var/log/django-for-runners/django-for-runners.log
root@yunohost:~# cat /etc/systemd/system/django-for-runners.service
root@yunohost:~# systemctl reload-or-restart django-for-runners
root@yunohost:~# systemctl status django-for-runners
root@yunohost:~# journalctl --unit=for_runners --follow
```
## local test
For quicker developing of django-for-runners in the context of YunoHost app,
it's possible to run the Django developer server with the settings
and urls made for YunoHost installation.
e.g.:
```bash
~$ git clone https://github.com/YunoHost-Apps/django-for-runners_ynh.git
~$ cd django-for-runners_ynh/
~/django-for-runners_ynh$ make
install-poetry install or update poetry
install install django-for-runners via poetry
update update the sources and installation
local-test Run local_test.py to run django-for-runners_ynh locally
~/django-for-runners_ynh$ make install-poetry
~/django-for-runners_ynh$ make install
~/django-for-runners_ynh$ make local-test
```
Notes:
* SQlite database will be used
* A super user with username `test` and password `test` is created
* The page is available under `http://127.0.0.1:8000/app_path/`
## Documentation and resources ## Documentation and resources
- Official app website: <https://github.com/YunoHost-Apps/django-for-runners_ynh>
- Official user documentation: <https://github.com/jedie/django-for-runners> - Official user documentation: <https://github.com/jedie/django-for-runners>
- Official admin documentation: <https://github.com/YunoHost-Apps/django-for-runners_ynh> - Official admin documentation: <https://github.com/YunoHost-Apps/django-for-runners_ynh>
- Upstream app code repository: <https://github.com/YunoHost-Apps/django-for-runners_ynh> - Upstream app code repository: <https://github.com/YunoHost-Apps/django-for-runners_ynh>

62
README_es.md Normal file
View file

@ -0,0 +1,62 @@
<!--
Este archivo README esta generado automaticamente<https://github.com/YunoHost/apps/tree/master/tools/readme_generator>
No se debe editar a mano.
-->
# django-for-runners para Yunohost
[![Nivel de integración](https://dash.yunohost.org/integration/django-for-runners.svg)](https://dash.yunohost.org/appci/app/django-for-runners) ![Estado funcional](https://ci-apps.yunohost.org/ci/badges/django-for-runners.status.svg) ![Estado En Mantención](https://ci-apps.yunohost.org/ci/badges/django-for-runners.maintain.svg)
[![Instalar django-for-runners con Yunhost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=django-for-runners)
*[Leer este README en otros idiomas.](./ALL_README.md)*
> *Este paquete le permite instalardjango-for-runners rapidamente y simplement en un servidor YunoHost.*
> *Si no tiene YunoHost, visita [the guide](https://yunohost.org/install) para aprender como instalarla.*
## Descripción general
[![tests](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/tests.yml)
[![codecov](https://codecov.io/github/jedie/for_runners_ynh/branch/main/graph/badge.svg)](https://app.codecov.io/github/jedie/for_runners_ynh)
[![for_runners_ynh @ PyPi](https://img.shields.io/pypi/v/for_runners_ynh?label=for_runners_ynh%20%40%20PyPi)](https://pypi.org/project/for_runners_ynh/)
[![Python Versions](https://img.shields.io/pypi/pyversions/for_runners_ynh)](https://github.com/YunoHost-Apps/django-for-runners_ynh/blob/main/pyproject.toml)
[![License GPL-3.0-or-later](https://img.shields.io/pypi/l/for_runners_ynh)](https://github.com/YunoHost-Apps/django-for-runners_ynh/blob/main/LICENSE)
[django-for-runners](https://github.com/jedie/django-for-runners) is a libre web-based management for your GPX tracks of your running (or other sports activity). Used [Python](https://www.python.org/)/[Django](https://www.djangoproject.com/).
Pull requests welcome ;)
This package for YunoHost used [django-yunohost-integration](https://github.com/YunoHost-Apps/django_yunohost_integration)
More screenshots are here: [jedie.github.io/tree/master/screenshots/django-for-runners](https://github.com/jedie/jedie.github.io/tree/master/screenshots/django-for-runners/README.creole)
**Versión actual:** 0.17.4~ynh1
## Capturas
![Captura de django-for-runners](./doc/screenshots/for_runers_v060_2018_07_31_gpx_track.png)
![Captura de django-for-runners](./doc/screenshots/for_runners_v060_2018_07_19_event_costs.png)
![Captura de django-for-runners](./doc/screenshots/for_runners_v040_2018_6_26_gpx_info.png)
## Documentaciones y recursos
- Documentación usuario oficial: <https://github.com/jedie/django-for-runners>
- Documentación administrador oficial: <https://github.com/YunoHost-Apps/django-for-runners_ynh>
- Repositorio del código fuente oficial de la aplicación : <https://github.com/YunoHost-Apps/django-for-runners_ynh>
- Catálogo YunoHost: <https://apps.yunohost.org/app/django-for-runners>
- Reportar un error: <https://github.com/YunoHost-Apps/django-for-runners_ynh/issues>
## Información para desarrolladores
Por favor enviar sus correcciones a la [`branch testing`](https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/testing
Para probar la rama `testing`, sigue asÍ:
```bash
sudo yunohost app install https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/testing --debug
o
sudo yunohost app upgrade django-for-runners -u https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/testing --debug
```
**Mas informaciones sobre el empaquetado de aplicaciones:** <https://yunohost.org/packaging_apps>

62
README_eu.md Normal file
View file

@ -0,0 +1,62 @@
<!--
Ohart ongi: README hau automatikoki sortu da <https://github.com/YunoHost/apps/tree/master/tools/readme_generator>ri esker
EZ editatu eskuz.
-->
# django-for-runners YunoHost-erako
[![Integrazio maila](https://dash.yunohost.org/integration/django-for-runners.svg)](https://dash.yunohost.org/appci/app/django-for-runners) ![Funtzionamendu egoera](https://ci-apps.yunohost.org/ci/badges/django-for-runners.status.svg) ![Mantentze egoera](https://ci-apps.yunohost.org/ci/badges/django-for-runners.maintain.svg)
[![Instalatu django-for-runners YunoHost-ekin](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=django-for-runners)
*[Irakurri README hau beste hizkuntzatan.](./ALL_README.md)*
> *Pakete honek django-for-runners YunoHost zerbitzari batean azkar eta zailtasunik gabe instalatzea ahalbidetzen dizu.*
> *YunoHost ez baduzu, kontsultatu [gida](https://yunohost.org/install) nola instalatu ikasteko.*
## Aurreikuspena
[![tests](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/tests.yml)
[![codecov](https://codecov.io/github/jedie/for_runners_ynh/branch/main/graph/badge.svg)](https://app.codecov.io/github/jedie/for_runners_ynh)
[![for_runners_ynh @ PyPi](https://img.shields.io/pypi/v/for_runners_ynh?label=for_runners_ynh%20%40%20PyPi)](https://pypi.org/project/for_runners_ynh/)
[![Python Versions](https://img.shields.io/pypi/pyversions/for_runners_ynh)](https://github.com/YunoHost-Apps/django-for-runners_ynh/blob/main/pyproject.toml)
[![License GPL-3.0-or-later](https://img.shields.io/pypi/l/for_runners_ynh)](https://github.com/YunoHost-Apps/django-for-runners_ynh/blob/main/LICENSE)
[django-for-runners](https://github.com/jedie/django-for-runners) is a libre web-based management for your GPX tracks of your running (or other sports activity). Used [Python](https://www.python.org/)/[Django](https://www.djangoproject.com/).
Pull requests welcome ;)
This package for YunoHost used [django-yunohost-integration](https://github.com/YunoHost-Apps/django_yunohost_integration)
More screenshots are here: [jedie.github.io/tree/master/screenshots/django-for-runners](https://github.com/jedie/jedie.github.io/tree/master/screenshots/django-for-runners/README.creole)
**Paketatutako bertsioa:** 0.17.4~ynh1
## Pantaila-argazkiak
![django-for-runners(r)en pantaila-argazkia](./doc/screenshots/for_runers_v060_2018_07_31_gpx_track.png)
![django-for-runners(r)en pantaila-argazkia](./doc/screenshots/for_runners_v060_2018_07_19_event_costs.png)
![django-for-runners(r)en pantaila-argazkia](./doc/screenshots/for_runners_v040_2018_6_26_gpx_info.png)
## Dokumentazioa eta baliabideak
- Erabiltzaileen dokumentazio ofiziala: <https://github.com/jedie/django-for-runners>
- Administratzaileen dokumentazio ofiziala: <https://github.com/YunoHost-Apps/django-for-runners_ynh>
- Jatorrizko aplikazioaren kode-gordailua: <https://github.com/YunoHost-Apps/django-for-runners_ynh>
- YunoHost Denda: <https://apps.yunohost.org/app/django-for-runners>
- Eman errore baten berri: <https://github.com/YunoHost-Apps/django-for-runners_ynh/issues>
## Garatzaileentzako informazioa
Bidali `pull request`a [`testing` abarrera](https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/testing).
`testing` abarra probatzeko, ondorengoa egin:
```bash
sudo yunohost app install https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/testing --debug
edo
sudo yunohost app upgrade django-for-runners -u https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/testing --debug
```
**Informazio gehiago aplikazioaren paketatzeari buruz:** <https://yunohost.org/packaging_apps>

View file

@ -16,17 +16,14 @@ Il NE doit PAS être modifié à la main.
## Vue densemble ## Vue densemble
![Logo](https://raw.githubusercontent.com/jedie/django-for-runners/main/for_runners/static/Django-ForRunners128.png) [![tests](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/tests.yml)
[![codecov](https://codecov.io/github/jedie/for_runners_ynh/branch/main/graph/badge.svg)](https://app.codecov.io/github/jedie/for_runners_ynh)
[![for_runners_ynh @ PyPi](https://img.shields.io/pypi/v/for_runners_ynh?label=for_runners_ynh%20%40%20PyPi)](https://pypi.org/project/for_runners_ynh/)
[![Python Versions](https://img.shields.io/pypi/pyversions/for_runners_ynh)](https://github.com/YunoHost-Apps/django-for-runners_ynh/blob/main/pyproject.toml)
[![License GPL-3.0-or-later](https://img.shields.io/pypi/l/for_runners_ynh)](https://github.com/YunoHost-Apps/django-for-runners_ynh/blob/main/LICENSE)
[django-for-runners](https://github.com/jedie/django-for-runners) is a libre web-based management for your GPX tracks of your running (or other sports activity). Used [Python](https://www.python.org/)/[Django](https://www.djangoproject.com/). [django-for-runners](https://github.com/jedie/django-for-runners) is a libre web-based management for your GPX tracks of your running (or other sports activity). Used [Python](https://www.python.org/)/[Django](https://www.djangoproject.com/).
[![pytest](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/pytest.yml/badge.svg?branch=master)](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/pytest.yml) [![YunoHost apps package linter](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/package_linter.yml/badge.svg)](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/package_linter.yml) [![Coverage Status on codecov.io](https://codecov.io/gh/YunoHost-Apps/django-for-runners_ynh/branch/master/graph/badge.svg)](https://codecov.io/gh/YunoHost-Apps/django-for-runners_ynh)
![django-for-runners @ PyPi](https://img.shields.io/pypi/v/django-for-runners?label=django-for-runners%20%40%20PyPi)
![Python Versions](https://img.shields.io/pypi/pyversions/django-for-runners)
![License GPL V3+](https://img.shields.io/pypi/l/django-for-runners)
Pull requests welcome ;) Pull requests welcome ;)
This package for YunoHost used [django-yunohost-integration](https://github.com/YunoHost-Apps/django_yunohost_integration) This package for YunoHost used [django-yunohost-integration](https://github.com/YunoHost-Apps/django_yunohost_integration)
@ -42,165 +39,8 @@ More screenshots are here: [jedie.github.io/tree/master/screenshots/django-for-r
![Capture décran de django-for-runners](./doc/screenshots/for_runners_v060_2018_07_19_event_costs.png) ![Capture décran de django-for-runners](./doc/screenshots/for_runners_v060_2018_07_19_event_costs.png)
![Capture décran de django-for-runners](./doc/screenshots/for_runners_v040_2018_6_26_gpx_info.png) ![Capture décran de django-for-runners](./doc/screenshots/for_runners_v040_2018_6_26_gpx_info.png)
## Avertissements / informations importantes
## Settings and upgrades
Almost everything related to django-for-runners's configuration is handled in a `"../conf/settings.py"` file.
You can edit the file `/opt/yunohost/django-for-runners/local_settings.py` to enable or disable features.
Test sending emails:
```bash
ssh admin@yourdomain.tld
root@yunohost:~# cd /opt/yunohost/django-for-runners/
root@yunohost:/opt/yunohost/django-for-runners# source venv/bin/activate
(venv) root@yunohost:/opt/yunohost/django-for-runners# ./manage.py sendtestemail --admins
```
Background info: Error mails are send to all [settings.ADMINS](https://docs.djangoproject.com/en/2.2/ref/settings/#std:setting-ADMINS). By default the YunoHost admin is inserted here.
To check current ADMINS run:
```bash
(venv) root@yunohost:/opt/yunohost/django-for-runners# ./manage.py sendtestemail --admins
```
If you prefere to send error emails to a extrnal email address, just do something like this:
```bash
echo "ADMINS = (('Your Name', 'example@domain.tld'),)" >> /opt/yunohost/django-for-runners/local_settings.py
```
To check the effective settings, run this:
```bash
(venv) root@yunohost:/opt/yunohost/django-for-runners# ./manage.py diffsettings
```
# Miscellaneous
## SSO authentication
[SSOwat](https://github.com/YunoHost/SSOwat) is fully supported via [django_ynh](https://github.com/YunoHost-Apps/django_ynh):
* First user (`$YNH_APP_ARG_ADMIN`) will be created as Django's super user
* All new users will be created as normal users
* Login via SSO is fully supported
* User Email, First / Last name will be updated from SSO data
## Links
* Report a bug about this package: https://github.com/YunoHost-Apps/django-for-runners_ynh
* Report a bug about django-for-runners itself: https://github.com/jedie/django-for-runners
* YunoHost website: https://yunohost.org/
---
# Developer info
## package installation / debugging
Please send your pull request to https://github.com/YunoHost-Apps/django-for-runners_ynh
Try 'main' branch, e.g.:
```bash
sudo yunohost app install https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/master --debug
or
sudo yunohost app upgrade django-for-runners -u https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/master --debug
```
Try 'testing' branch, e.g.:
```bash
sudo yunohost app install https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/testing --debug
or
sudo yunohost app upgrade django-for-runners -u https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/testing --debug
```
To remove call e.g.:
```bash
sudo yunohost app remove django-for-runners
```
Backup / remove / restore cycle, e.g.:
```bash
yunohost backup create --apps django-for-runners
yunohost backup list
archives:
- django-for-runners-pre-upgrade1
- 20201223-163434
yunohost app remove django-for-runners
yunohost backup restore 20201223-163434 --apps django-for-runners
```
Debug installation, e.g.:
```bash
root@yunohost:~# ls -la /var/www/django-for-runners/
total 18
drwxr-xr-x 4 root root 4 Dec 8 08:36 .
drwxr-xr-x 6 root root 6 Dec 8 08:36 ..
drwxr-xr-x 2 root root 2 Dec 8 08:36 media
drwxr-xr-x 7 root root 8 Dec 8 08:40 static
root@yunohost:~# ls -la /opt/yunohost/django-for-runners/
total 58
drwxr-xr-x 5 django-for-runners django-for-runners 11 Dec 8 08:39 .
drwxr-xr-x 3 root root 3 Dec 8 08:36 ..
-rw-r--r-- 1 django-for-runners django-for-runners 460 Dec 8 08:39 gunicorn.conf.py
-rw-r--r-- 1 django-for-runners django-for-runners 0 Dec 8 08:39 local_settings.py
-rwxr-xr-x 1 django-for-runners django-for-runners 274 Dec 8 08:39 manage.py
-rw-r--r-- 1 django-for-runners django-for-runners 171 Dec 8 08:39 secret.txt
drwxr-xr-x 6 django-for-runners django-for-runners 6 Dec 8 08:37 venv
-rw-r--r-- 1 django-for-runners django-for-runners 115 Dec 8 08:39 wsgi.py
-rw-r--r-- 1 django-for-runners django-for-runners 4737 Dec 8 08:39 settings.py
root@yunohost:~# cd /opt/yunohost/django-for-runners/
root@yunohost:/opt/yunohost/django-for-runners# source venv/bin/activate
(venv) root@yunohost:/opt/yunohost/django-for-runners# ./manage.py check
django-for-runners v0.8.2 (Django v2.2.17)
DJANGO_SETTINGS_MODULE='settings'
PROJECT_PATH:/opt/yunohost/django-for-runners/venv/lib/python3.7/site-packages
BASE_PATH:/opt/yunohost/django-for-runners
System check identified no issues (0 silenced).
root@yunohost:~# tail -f /var/log/django-for-runners/django-for-runners.log
root@yunohost:~# cat /etc/systemd/system/django-for-runners.service
root@yunohost:~# systemctl reload-or-restart django-for-runners
root@yunohost:~# systemctl status django-for-runners
root@yunohost:~# journalctl --unit=for_runners --follow
```
## local test
For quicker developing of django-for-runners in the context of YunoHost app,
it's possible to run the Django developer server with the settings
and urls made for YunoHost installation.
e.g.:
```bash
~$ git clone https://github.com/YunoHost-Apps/django-for-runners_ynh.git
~$ cd django-for-runners_ynh/
~/django-for-runners_ynh$ make
install-poetry install or update poetry
install install django-for-runners via poetry
update update the sources and installation
local-test Run local_test.py to run django-for-runners_ynh locally
~/django-for-runners_ynh$ make install-poetry
~/django-for-runners_ynh$ make install
~/django-for-runners_ynh$ make local-test
```
Notes:
* SQlite database will be used
* A super user with username `test` and password `test` is created
* The page is available under `http://127.0.0.1:8000/app_path/`
## Documentations et ressources ## Documentations et ressources
- Site officiel de lapp: <https://github.com/YunoHost-Apps/django-for-runners_ynh>
- Documentation officielle utilisateur: <https://github.com/jedie/django-for-runners> - Documentation officielle utilisateur: <https://github.com/jedie/django-for-runners>
- Documentation officielle de ladmin: <https://github.com/YunoHost-Apps/django-for-runners_ynh> - Documentation officielle de ladmin: <https://github.com/YunoHost-Apps/django-for-runners_ynh>
- Dépôt de code officiel de lapp: <https://github.com/YunoHost-Apps/django-for-runners_ynh> - Dépôt de code officiel de lapp: <https://github.com/YunoHost-Apps/django-for-runners_ynh>

View file

@ -16,17 +16,14 @@ NON debe editarse manualmente.
## Vista xeral ## Vista xeral
![Logo](https://raw.githubusercontent.com/jedie/django-for-runners/main/for_runners/static/Django-ForRunners128.png) [![tests](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/tests.yml)
[![codecov](https://codecov.io/github/jedie/for_runners_ynh/branch/main/graph/badge.svg)](https://app.codecov.io/github/jedie/for_runners_ynh)
[![for_runners_ynh @ PyPi](https://img.shields.io/pypi/v/for_runners_ynh?label=for_runners_ynh%20%40%20PyPi)](https://pypi.org/project/for_runners_ynh/)
[![Python Versions](https://img.shields.io/pypi/pyversions/for_runners_ynh)](https://github.com/YunoHost-Apps/django-for-runners_ynh/blob/main/pyproject.toml)
[![License GPL-3.0-or-later](https://img.shields.io/pypi/l/for_runners_ynh)](https://github.com/YunoHost-Apps/django-for-runners_ynh/blob/main/LICENSE)
[django-for-runners](https://github.com/jedie/django-for-runners) is a libre web-based management for your GPX tracks of your running (or other sports activity). Used [Python](https://www.python.org/)/[Django](https://www.djangoproject.com/). [django-for-runners](https://github.com/jedie/django-for-runners) is a libre web-based management for your GPX tracks of your running (or other sports activity). Used [Python](https://www.python.org/)/[Django](https://www.djangoproject.com/).
[![pytest](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/pytest.yml/badge.svg?branch=master)](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/pytest.yml) [![YunoHost apps package linter](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/package_linter.yml/badge.svg)](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/package_linter.yml) [![Coverage Status on codecov.io](https://codecov.io/gh/YunoHost-Apps/django-for-runners_ynh/branch/master/graph/badge.svg)](https://codecov.io/gh/YunoHost-Apps/django-for-runners_ynh)
![django-for-runners @ PyPi](https://img.shields.io/pypi/v/django-for-runners?label=django-for-runners%20%40%20PyPi)
![Python Versions](https://img.shields.io/pypi/pyversions/django-for-runners)
![License GPL V3+](https://img.shields.io/pypi/l/django-for-runners)
Pull requests welcome ;) Pull requests welcome ;)
This package for YunoHost used [django-yunohost-integration](https://github.com/YunoHost-Apps/django_yunohost_integration) This package for YunoHost used [django-yunohost-integration](https://github.com/YunoHost-Apps/django_yunohost_integration)
@ -42,165 +39,8 @@ More screenshots are here: [jedie.github.io/tree/master/screenshots/django-for-r
![Captura de pantalla de django-for-runners](./doc/screenshots/for_runners_v060_2018_07_19_event_costs.png) ![Captura de pantalla de django-for-runners](./doc/screenshots/for_runners_v060_2018_07_19_event_costs.png)
![Captura de pantalla de django-for-runners](./doc/screenshots/for_runners_v040_2018_6_26_gpx_info.png) ![Captura de pantalla de django-for-runners](./doc/screenshots/for_runners_v040_2018_6_26_gpx_info.png)
## Avisos / información importante
## Settings and upgrades
Almost everything related to django-for-runners's configuration is handled in a `"../conf/settings.py"` file.
You can edit the file `/opt/yunohost/django-for-runners/local_settings.py` to enable or disable features.
Test sending emails:
```bash
ssh admin@yourdomain.tld
root@yunohost:~# cd /opt/yunohost/django-for-runners/
root@yunohost:/opt/yunohost/django-for-runners# source venv/bin/activate
(venv) root@yunohost:/opt/yunohost/django-for-runners# ./manage.py sendtestemail --admins
```
Background info: Error mails are send to all [settings.ADMINS](https://docs.djangoproject.com/en/2.2/ref/settings/#std:setting-ADMINS). By default the YunoHost admin is inserted here.
To check current ADMINS run:
```bash
(venv) root@yunohost:/opt/yunohost/django-for-runners# ./manage.py sendtestemail --admins
```
If you prefere to send error emails to a extrnal email address, just do something like this:
```bash
echo "ADMINS = (('Your Name', 'example@domain.tld'),)" >> /opt/yunohost/django-for-runners/local_settings.py
```
To check the effective settings, run this:
```bash
(venv) root@yunohost:/opt/yunohost/django-for-runners# ./manage.py diffsettings
```
# Miscellaneous
## SSO authentication
[SSOwat](https://github.com/YunoHost/SSOwat) is fully supported via [django_ynh](https://github.com/YunoHost-Apps/django_ynh):
* First user (`$YNH_APP_ARG_ADMIN`) will be created as Django's super user
* All new users will be created as normal users
* Login via SSO is fully supported
* User Email, First / Last name will be updated from SSO data
## Links
* Report a bug about this package: https://github.com/YunoHost-Apps/django-for-runners_ynh
* Report a bug about django-for-runners itself: https://github.com/jedie/django-for-runners
* YunoHost website: https://yunohost.org/
---
# Developer info
## package installation / debugging
Please send your pull request to https://github.com/YunoHost-Apps/django-for-runners_ynh
Try 'main' branch, e.g.:
```bash
sudo yunohost app install https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/master --debug
or
sudo yunohost app upgrade django-for-runners -u https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/master --debug
```
Try 'testing' branch, e.g.:
```bash
sudo yunohost app install https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/testing --debug
or
sudo yunohost app upgrade django-for-runners -u https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/testing --debug
```
To remove call e.g.:
```bash
sudo yunohost app remove django-for-runners
```
Backup / remove / restore cycle, e.g.:
```bash
yunohost backup create --apps django-for-runners
yunohost backup list
archives:
- django-for-runners-pre-upgrade1
- 20201223-163434
yunohost app remove django-for-runners
yunohost backup restore 20201223-163434 --apps django-for-runners
```
Debug installation, e.g.:
```bash
root@yunohost:~# ls -la /var/www/django-for-runners/
total 18
drwxr-xr-x 4 root root 4 Dec 8 08:36 .
drwxr-xr-x 6 root root 6 Dec 8 08:36 ..
drwxr-xr-x 2 root root 2 Dec 8 08:36 media
drwxr-xr-x 7 root root 8 Dec 8 08:40 static
root@yunohost:~# ls -la /opt/yunohost/django-for-runners/
total 58
drwxr-xr-x 5 django-for-runners django-for-runners 11 Dec 8 08:39 .
drwxr-xr-x 3 root root 3 Dec 8 08:36 ..
-rw-r--r-- 1 django-for-runners django-for-runners 460 Dec 8 08:39 gunicorn.conf.py
-rw-r--r-- 1 django-for-runners django-for-runners 0 Dec 8 08:39 local_settings.py
-rwxr-xr-x 1 django-for-runners django-for-runners 274 Dec 8 08:39 manage.py
-rw-r--r-- 1 django-for-runners django-for-runners 171 Dec 8 08:39 secret.txt
drwxr-xr-x 6 django-for-runners django-for-runners 6 Dec 8 08:37 venv
-rw-r--r-- 1 django-for-runners django-for-runners 115 Dec 8 08:39 wsgi.py
-rw-r--r-- 1 django-for-runners django-for-runners 4737 Dec 8 08:39 settings.py
root@yunohost:~# cd /opt/yunohost/django-for-runners/
root@yunohost:/opt/yunohost/django-for-runners# source venv/bin/activate
(venv) root@yunohost:/opt/yunohost/django-for-runners# ./manage.py check
django-for-runners v0.8.2 (Django v2.2.17)
DJANGO_SETTINGS_MODULE='settings'
PROJECT_PATH:/opt/yunohost/django-for-runners/venv/lib/python3.7/site-packages
BASE_PATH:/opt/yunohost/django-for-runners
System check identified no issues (0 silenced).
root@yunohost:~# tail -f /var/log/django-for-runners/django-for-runners.log
root@yunohost:~# cat /etc/systemd/system/django-for-runners.service
root@yunohost:~# systemctl reload-or-restart django-for-runners
root@yunohost:~# systemctl status django-for-runners
root@yunohost:~# journalctl --unit=for_runners --follow
```
## local test
For quicker developing of django-for-runners in the context of YunoHost app,
it's possible to run the Django developer server with the settings
and urls made for YunoHost installation.
e.g.:
```bash
~$ git clone https://github.com/YunoHost-Apps/django-for-runners_ynh.git
~$ cd django-for-runners_ynh/
~/django-for-runners_ynh$ make
install-poetry install or update poetry
install install django-for-runners via poetry
update update the sources and installation
local-test Run local_test.py to run django-for-runners_ynh locally
~/django-for-runners_ynh$ make install-poetry
~/django-for-runners_ynh$ make install
~/django-for-runners_ynh$ make local-test
```
Notes:
* SQlite database will be used
* A super user with username `test` and password `test` is created
* The page is available under `http://127.0.0.1:8000/app_path/`
## Documentación e recursos ## Documentación e recursos
- Web oficial da app: <https://github.com/YunoHost-Apps/django-for-runners_ynh>
- Documentación oficial para usuarias: <https://github.com/jedie/django-for-runners> - Documentación oficial para usuarias: <https://github.com/jedie/django-for-runners>
- Documentación oficial para admin: <https://github.com/YunoHost-Apps/django-for-runners_ynh> - Documentación oficial para admin: <https://github.com/YunoHost-Apps/django-for-runners_ynh>
- Repositorio de orixe do código: <https://github.com/YunoHost-Apps/django-for-runners_ynh> - Repositorio de orixe do código: <https://github.com/YunoHost-Apps/django-for-runners_ynh>

62
README_zh_Hans.md Normal file
View file

@ -0,0 +1,62 @@
<!--
注意:此 README 由 <https://github.com/YunoHost/apps/tree/master/tools/readme_generator> 自动生成
请勿手动编辑。
-->
# YunoHost 上的 django-for-runners
[![集成程度](https://dash.yunohost.org/integration/django-for-runners.svg)](https://dash.yunohost.org/appci/app/django-for-runners) ![工作状态](https://ci-apps.yunohost.org/ci/badges/django-for-runners.status.svg) ![维护状态](https://ci-apps.yunohost.org/ci/badges/django-for-runners.maintain.svg)
[![使用 YunoHost 安装 django-for-runners](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=django-for-runners)
*[阅读此 README 的其它语言版本。](./ALL_README.md)*
> *通过此软件包,您可以在 YunoHost 服务器上快速、简单地安装 django-for-runners。*
> *如果您还没有 YunoHost请参阅[指南](https://yunohost.org/install)了解如何安装它。*
## 概况
[![tests](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/tests.yml)
[![codecov](https://codecov.io/github/jedie/for_runners_ynh/branch/main/graph/badge.svg)](https://app.codecov.io/github/jedie/for_runners_ynh)
[![for_runners_ynh @ PyPi](https://img.shields.io/pypi/v/for_runners_ynh?label=for_runners_ynh%20%40%20PyPi)](https://pypi.org/project/for_runners_ynh/)
[![Python Versions](https://img.shields.io/pypi/pyversions/for_runners_ynh)](https://github.com/YunoHost-Apps/django-for-runners_ynh/blob/main/pyproject.toml)
[![License GPL-3.0-or-later](https://img.shields.io/pypi/l/for_runners_ynh)](https://github.com/YunoHost-Apps/django-for-runners_ynh/blob/main/LICENSE)
[django-for-runners](https://github.com/jedie/django-for-runners) is a libre web-based management for your GPX tracks of your running (or other sports activity). Used [Python](https://www.python.org/)/[Django](https://www.djangoproject.com/).
Pull requests welcome ;)
This package for YunoHost used [django-yunohost-integration](https://github.com/YunoHost-Apps/django_yunohost_integration)
More screenshots are here: [jedie.github.io/tree/master/screenshots/django-for-runners](https://github.com/jedie/jedie.github.io/tree/master/screenshots/django-for-runners/README.creole)
**分发版本:** 0.17.4~ynh1
## 截图
![django-for-runners 的截图](./doc/screenshots/for_runers_v060_2018_07_31_gpx_track.png)
![django-for-runners 的截图](./doc/screenshots/for_runners_v060_2018_07_19_event_costs.png)
![django-for-runners 的截图](./doc/screenshots/for_runners_v040_2018_6_26_gpx_info.png)
## 文档与资源
- 官方用户文档: <https://github.com/jedie/django-for-runners>
- 官方管理文档: <https://github.com/YunoHost-Apps/django-for-runners_ynh>
- 上游应用代码库: <https://github.com/YunoHost-Apps/django-for-runners_ynh>
- YunoHost 商店: <https://apps.yunohost.org/app/django-for-runners>
- 报告 bug <https://github.com/YunoHost-Apps/django-for-runners_ynh/issues>
## 开发者信息
请向 [`testing` 分支](https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/testing) 发送拉取请求。
如要尝试 `testing` 分支,请这样操作:
```bash
sudo yunohost app install https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/testing --debug
sudo yunohost app upgrade django-for-runners -u https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/testing --debug
```
**有关应用打包的更多信息:** <https://yunohost.org/packaging_apps>

View file

@ -21,9 +21,9 @@ bleach==6.1.0 \
--hash=sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe \ --hash=sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe \
--hash=sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6 --hash=sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6
# via django-tools # via django-tools
bx-django-utils==67 \ bx-django-utils==69 \
--hash=sha256:8740fdaf98ed68a8ddb3af025d9b4f87c99101405898ddca86810b0c384b215a \ --hash=sha256:39e96b8ad47bcf36d6713e4e42c8d09deb21e413160dc2944f17b7d2e2244713 \
--hash=sha256:aca0ae5c91a62e4f594172b8c43468c701516f99ae50d99412d5299ba375df03 --hash=sha256:59b806aa36b50184f14bd0f7a61fb66c478fa231a44f92472360ce0cf1616013
# via django-for-runners # via django-for-runners
bx-py-utils==88 \ bx-py-utils==88 \
--hash=sha256:32fbc7e9ff3dfb0a817c80fb1d165ec559643dab59c0be549e646acbf8223b75 \ --hash=sha256:32fbc7e9ff3dfb0a817c80fb1d165ec559643dab59c0be549e646acbf8223b75 \
@ -33,9 +33,9 @@ bx-py-utils==88 \
# cli-base-utilities # cli-base-utilities
# django-for-runners # django-for-runners
# django-tools # django-tools
certifi==2023.7.22 \ certifi==2023.11.17 \
--hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ --hash=sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1 \
--hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 --hash=sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474
# via requests # via requests
charset-normalizer==3.3.2 \ charset-normalizer==3.3.2 \
--hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \
@ -241,9 +241,9 @@ django-for-runners==0.17.4 \
--hash=sha256:ceecf3ed00e372cb012e1635fb6388675ecf92e2125c6782a4c41fd5b4c3d96a \ --hash=sha256:ceecf3ed00e372cb012e1635fb6388675ecf92e2125c6782a4c41fd5b4c3d96a \
--hash=sha256:fbf2498ddac8a18b241f8b05a1d03288984a11714009d1312cf17b48517f08de --hash=sha256:fbf2498ddac8a18b241f8b05a1d03288984a11714009d1312cf17b48517f08de
# via for-runners-ynh (pyproject.toml) # via for-runners-ynh (pyproject.toml)
django-import-export==3.3.2 \ django-import-export==3.3.3 \
--hash=sha256:9a5c7c191014e4defb01573ee94864b60724a203f1b8a7e5e67a03f06b27b62d \ --hash=sha256:2c1b16e1cf2ea5f62a165d8867e7c6dcff25673ab7201fd18aaf67c9ee90367e \
--hash=sha256:d13e7508190f46442280bd7d04efcf49af6521350a70a6f9e06447ef28d6a41d --hash=sha256:78973202e93897326ab0411d64eaf89b72779fcb21ee9e5f64f3fb96571a5978
# via django-for-runners # via django-for-runners
django-processinfo==1.1.0 \ django-processinfo==1.1.0 \
--hash=sha256:c7d1fe2203655925294c860878509fe2a6eb1a5390a170c848023e4619b903da \ --hash=sha256:c7d1fe2203655925294c860878509fe2a6eb1a5390a170c848023e4619b903da \
@ -271,57 +271,57 @@ et-xmlfile==1.1.0 \
--hash=sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c \ --hash=sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c \
--hash=sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada --hash=sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada
# via openpyxl # via openpyxl
fonttools==4.44.0 \ fonttools==4.45.1 \
--hash=sha256:05d7c4d2c95b9490e669f3cb83918799bf1c838619ac6d3bad9ea017cfc63f2e \ --hash=sha256:03ed3bda541e86725f6b4e1b94213f13ed1ae51a5a1f167028534cedea38c010 \
--hash=sha256:0f412954275e594f7a51c16f3b3edd850acb0d842fefc33856b63a17e18499a5 \ --hash=sha256:0dc7617d96b1e668eea9250e1c1fe62d0c78c3f69573ce7e3332cc40e6d84356 \
--hash=sha256:22ea8aa7b3712450b42b044702bd3a64fd118006bad09a6f94bd1b227088492e \ --hash=sha256:105099968b58a5b4cef6f3eb409db8ea8578b302a9d05e23fecba1b8b0177b5f \
--hash=sha256:2db63941fee3122e31a21dd0f5b2138ce9906b661a85b63622421d3654a74ae2 \ --hash=sha256:1b9e9ad2bcded9a1431afaa57c8d3c39143ac1f050862d66bddd863c515464a2 \
--hash=sha256:2e91e19b583961979e2e5a701269d3cfc07418963bee717f8160b0a24332826b \ --hash=sha256:1f53a19dcdd5737440839b8394eeebb35da9ec8109f7926cb6456639b5b58e47 \
--hash=sha256:31b38528f25bc662401e6ffae14b3eb7f1e820892fd80369a37155e3b636a2f4 \ --hash=sha256:21e96b99878348c74aa58059b8578d7586f9519cbcdadacf56486737038aa043 \
--hash=sha256:3d29509f6e05e8d725db59c2d8c076223d793e4e35773040be6632a0349f2f97 \ --hash=sha256:2c980d60cd6ec1376206fe55013d166e5627ad0b149b5c81e74eaa913ab6134f \
--hash=sha256:46c79af80a835410874683b5779b6c1ec1d5a285e11c45b5193e79dd691eb111 \ --hash=sha256:316cec50581e844c3ab69d7c82455b54c7cf18236b2f09e722faf665fbfcac58 \
--hash=sha256:4e90dd81b6e0d97ebfe52c0d12a17a9ef7f305d6bfbb93081265057d6092f252 \ --hash=sha256:37cd1ced6efb3dd6fe82e9f9bf92fd74ac58a5aefc284045f59ecd517a5fb9ab \
--hash=sha256:50d25893885e80a5955186791eed5579f1e75921751539cc1dc3ffd1160b48cf \ --hash=sha256:392d0e3cc23daee910193625f7cf1b387aff9dd5b6f1a5f4a925680acb6dcbc2 \
--hash=sha256:518a945dbfe337744bfff31423c1430303b8813c5275dffb0f2577f0734a1189 \ --hash=sha256:3bdd7dfca8f6c9f4779384064027e8477ad6a037d6a327b09381f43e0247c6f3 \
--hash=sha256:54efed22b2799a85475e6840e907c402ba49892c614565dc770aa97a53621b2b \ --hash=sha256:43a3d267334109ff849c37cf3629476b5feb392ef1d2e464a167b83de8cd599c \
--hash=sha256:58af428746fa73a2edcbf26aff33ac4ef3c11c8d75bb200eaea2f7e888d2de4e \ --hash=sha256:45fa321c458ea29224067700954ec44493ae869b47e7c5485a350a149a19fb53 \
--hash=sha256:59b6ad83cce067d10f4790c037a5904424f45bebb5e7be2eb2db90402f288267 \ --hash=sha256:46eabddec12066829b8a1efe45ae552ba2f1796981ecf538d5f68284c354c589 \
--hash=sha256:63a3112f753baef8c6ac2f5f574bb9ac8001b86c8c0c0380039db47a7f512d20 \ --hash=sha256:4b9544b1346d99848ac0e9b05b5d45ee703d7562fc4c9c48cf4b781de9632e57 \
--hash=sha256:66bc6efd829382f7a7e6cf33c2fb32b13edc8a239eb15f32acbf197dce7a0165 \ --hash=sha256:4ba17822a6681d06849078daaf6e03eccc9f467efe7c4c60280e28a78e8e5df9 \
--hash=sha256:6999e80a125b0cd8e068d0210b63323f17338038c2ecd2e11b9209ec430fe7f2 \ --hash=sha256:5a17706b9cc24b27721613fe5773d93331ab7f0ecaca9955aead89c6b843d3a7 \
--hash=sha256:6d16d9634ff1e5cea2cf4a8cbda9026f766e4b5f30b48f8180f0e99133d3abfc \ --hash=sha256:5cbf02cda8465b69769d07385f5d11e7bba19954e7787792f46fe679ec755ebb \
--hash=sha256:84f308b7a8d28208d54315d11d35f9888d6d607673dd4d42d60b463682ee0400 \ --hash=sha256:6e441286d55fe7ec7c4fb36812bf914924813776ff514b744b510680fc2733f2 \
--hash=sha256:9ee8692e23028564c13d924004495f284df8ac016a19f17a87251210e1f1f928 \ --hash=sha256:6eb2c54f7a07c92108daabcf02caf31df97825738db02a28270633946bcda4d0 \
--hash=sha256:a3da036b016c975c2d8c69005bdc4d5d16266f948a7fab950244e0f58301996a \ --hash=sha256:777ba42b94a27bb7fb2b4082522fccfd345667c32a56011e1c3e105979af5b79 \
--hash=sha256:a7aec7f5d14dfcd71fb3ebc299b3f000c21fdc4043079101777ed2042ba5b7c5 \ --hash=sha256:794de93e83297db7b4943f2431e206d8b1ea69cb3ae14638a49cc50332bf0db8 \
--hash=sha256:a8a1fa9a718de0bc026979c93e1e9b55c5efde60d76f91561fd713387573817d \ --hash=sha256:800e354e0c3afaeb8d9552769773d02f228e98c37b8cb03041157c3d0687cffc \
--hash=sha256:a8b99713d3a0d0e876b6aecfaada5e7dc9fe979fcd90ef9fa0ba1d9b9aed03f2 \ --hash=sha256:847f3f49dd3423e5a678c098e2ba92c7f4955d4aab3044f6a507b0bb0ecb07e0 \
--hash=sha256:b63da598d9cbc52e2381f922da0e94d60c0429f92207bd3fb04d112fc82ea7cb \ --hash=sha256:8717db3e4895e4820ade64ea379187738827ee60748223cb0438ef044ee208c6 \
--hash=sha256:b6e6aa2d066f8dafd06d8d0799b4944b5d5a1f015dd52ac01bdf2895ebe169a0 \ --hash=sha256:8b07b857d4f9de3199a8c3d1b1bf2078c0f37447891ca1a8d9234106b9a27aff \
--hash=sha256:b99fe8ef4093f672d00841569d2d05691e50334d79f4d9c15c1265d76d5580d2 \ --hash=sha256:8e1aefc2bf3c43e0f33f995f828a7bbeff4adc9393a7760b11456dbcf14388f6 \
--hash=sha256:b9beb0fa6ff3ea808ad4a6962d68ac0f140ddab080957b20d9e268e4d67fb335 \ --hash=sha256:a12dee6523c02ca78aeedd0a5e12bfa9b7b29896350edd5241542897b072ae23 \
--hash=sha256:b9eab7f9837fdaa2a10a524fbcc2ec24bf60637c044b6e4a59c3f835b90f0fae \ --hash=sha256:a3c11d9687479f01eddef729aa737abcdea0a44fdaffb62a930a18892f186c9b \
--hash=sha256:bca49da868e8bde569ef36f0cc1b6de21d56bf9c3be185c503b629c19a185287 \ --hash=sha256:b6de2f0fcd3302fb82f94801002cb473959e998c14c24ec28234adb674aed345 \
--hash=sha256:c05064f95aacdfc06f21e55096c964b2228d942b8675fa26995a2551f6329d2d \ --hash=sha256:ba299f1fbaa2a1e33210aaaf6fa816d4059e4d3cfe2ae9871368d4ab548c1c6a \
--hash=sha256:c2de1fb18198acd400c45ffe2aef5420c8d55fde903e91cba705596099550f3b \ --hash=sha256:ba6c23591427844dfb0a13658f1718489de75de6a46b64234584c0d17573162d \
--hash=sha256:c794de4086f06ae609b71ac944ec7deb09f34ecf73316fddc041087dd24bba39 \ --hash=sha256:c4f4a5870e3b56788fb196da8cf30d0dfd51a76dc3b907861d018165f76ae4c2 \
--hash=sha256:d4fa4f4bc8fd86579b8cdbe5e948f35d82c0eda0091c399d009b2a5a6b61c040 \ --hash=sha256:cb472905da3049960e80fc1cf808231880d79727a8410e156bf3e5063a1c574f \
--hash=sha256:dab3d00d27b1a79ae4d4a240e8ceea8af0ff049fd45f05adb4f860d93744110d \ --hash=sha256:cebcddbe9351b67166292b4f71ffdbfcce01ba4b07d4267824eb46b277aeb19a \
--hash=sha256:dbac86d83d96099890e731cc2af97976ff2c98f4ba432fccde657c5653a32f1c \ --hash=sha256:e2277cba9f0b525e30de2a9ad3cb4219aa4bc697230c1645666b0deee9f914f0 \
--hash=sha256:df40daa6c03b98652ffe8110ae014fe695437f6e1cb5a07e16ea37f40e73ac86 \ --hash=sha256:e29d5f298d616a93a4c5963682dc6cc8cc09f6d89cad2c29019fc5fb3b4d9472 \
--hash=sha256:e1cd1c6bb097e774d68402499ff66185190baaa2629ae2f18515a2c50b93db0c \ --hash=sha256:e3d24248221bd7151dfff0d88b1b5da02dccd7134bd576ce8888199827bbaa19 \
--hash=sha256:e8ff7d19a6804bfd561cfcec9b4200dd1788e28f7de4be70189801530c47c1b3 \ --hash=sha256:e50f794d09df0675da8d9dbd7c66bfcab2f74a708343aabcad41936d26556891 \
--hash=sha256:eb01c49c8aa035d5346f46630209923d4927ed15c2493db38d31da9f811eb70d \ --hash=sha256:f22eb69996a0bd49f76bdefb30be54ce8dbb89a0d1246874d610f05c2aa2e69e \
--hash=sha256:f53526668beccdb3409c6055a4ffe50987a7f05af6436fa55d61f5e7bd450219 \ --hash=sha256:fb36e5f40191274a95938b40c0a1fa7f895e36935aea8709e1d6deff0b2d0d4f \
--hash=sha256:f611c97678604e302b725f71626edea113a5745a7fb557c958b39edb6add87d5 --hash=sha256:ff6a698bdd435d24c379f6e8a54908cd9bb7dda23719084d56bf8c87709bf3bd
# via matplotlib # via matplotlib
geographiclib==2.0 \ geographiclib==2.0 \
--hash=sha256:6b7225248e45ff7edcee32becc4e0a1504c606ac5ee163a5656d482e0cd38734 \ --hash=sha256:6b7225248e45ff7edcee32becc4e0a1504c606ac5ee163a5656d482e0cd38734 \
--hash=sha256:f7f41c85dc3e1c2d3d935ec86660dc3b2c848c83e17f9a9e51ba9d5146a15859 --hash=sha256:f7f41c85dc3e1c2d3d935ec86660dc3b2c848c83e17f9a9e51ba9d5146a15859
# via geopy # via geopy
geopy==2.4.0 \ geopy==2.4.1 \
--hash=sha256:a59392bf17adb486b25dbdd71fbed27733bdf24a2dac588047a619de56695e36 \ --hash=sha256:50283d8e7ad07d89be5cb027338c6365a32044df3ae2556ad3f52f4840b3d0d1 \
--hash=sha256:d2639a46d0ce4c091e9688b750ba94348a14b898a1e55c68f4b4a07e7d1afa20 --hash=sha256:ae8b4bc5c1131820f4d75fce9d4aaaca0c85189b3aa5d64c3dcaf5e3b7b882a7
# via django-for-runners # via django-for-runners
gpxpy==1.6.1 \ gpxpy==1.6.1 \
--hash=sha256:473ff2fa17af6913a9879599cb6fe9c7a30fa1698898feff21a825447ee52fba \ --hash=sha256:473ff2fa17af6913a9879599cb6fe9c7a30fa1698898feff21a825447ee52fba \
@ -337,9 +337,9 @@ icdiff==2.0.7 \
--hash=sha256:f05d1b3623223dd1c70f7848da7d699de3d9a2550b902a8234d9026292fb5762 \ --hash=sha256:f05d1b3623223dd1c70f7848da7d699de3d9a2550b902a8234d9026292fb5762 \
--hash=sha256:f79a318891adbf59a45e3a7694f5e1f18c5407065264637072ac8363b759866f --hash=sha256:f79a318891adbf59a45e3a7694f5e1f18c5407065264637072ac8363b759866f
# via django-tools # via django-tools
idna==3.4 \ idna==3.6 \
--hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ --hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \
--hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 --hash=sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f
# via requests # via requests
importlib-resources==6.1.1 \ importlib-resources==6.1.1 \
--hash=sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a \ --hash=sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a \
@ -552,73 +552,77 @@ markdown-it-py==3.0.0 \
markuppy==1.14 \ markuppy==1.14 \
--hash=sha256:1adee2c0a542af378fe84548ff6f6b0168f3cb7f426b46961038a2bcfaad0d5f --hash=sha256:1adee2c0a542af378fe84548ff6f6b0168f3cb7f426b46961038a2bcfaad0d5f
# via tablib # via tablib
matplotlib==3.8.1 \ matplotlib==3.8.2 \
--hash=sha256:044df81c1f6f3a8e52d70c4cfcb44e77ea9632a10929932870dfaa90de94365d \ --hash=sha256:01a978b871b881ee76017152f1f1a0cbf6bd5f7b8ff8c96df0df1bd57d8755a1 \
--hash=sha256:0d24c47a1bb47e392fbcd26fe322e4ff3431653ac1e8718e4e147d450ae97a44 \ --hash=sha256:03f9d160a29e0b65c0790bb07f4f45d6a181b1ac33eb1bb0dd225986450148f0 \
--hash=sha256:1fcb49b6baf0375281979cbf26695ec10bd1cada1e311893e89533b3b70143e7 \ --hash=sha256:091275d18d942cf1ee9609c830a1bc36610607d8223b1b981c37d5c9fc3e46a4 \
--hash=sha256:20a0fdfd3ee836179047f3782be060057b878ad37f5abe29edf006a1ff3ecd73 \ --hash=sha256:09796f89fb71a0c0e1e2f4bdaf63fb2cefc84446bb963ecdeb40dfee7dfa98c7 \
--hash=sha256:27502d2452208ae784c19504644f09f83742809143bbeae147617640930aa344 \ --hash=sha256:0f4fc5d72b75e2c18e55eb32292659cf731d9d5b312a6eb036506304f4675630 \
--hash=sha256:2afe7d2f8c9e35e94fbcfcfd9b28f29cb32f0a9068cba469cf907428379c8db9 \ --hash=sha256:172f4d0fbac3383d39164c6caafd3255ce6fa58f08fc392513a0b1d3b89c4f89 \
--hash=sha256:43a9d40feb63c9e31a0b8b069dcbd74a912f59bdc0095d187126694cd26977e4 \ --hash=sha256:1b0f3b8ea0e99e233a4bcc44590f01604840d833c280ebb8fe5554fd3e6cfe8d \
--hash=sha256:43cf368a4a1d8cbc426944806e5e183cead746647a64d2cdb786441546235967 \ --hash=sha256:3773002da767f0a9323ba1a9b9b5d00d6257dbd2a93107233167cfb581f64717 \
--hash=sha256:608ea2951838d391e45dec2e644888db6899c752d3c29e157af9dcefb3d7d8d5 \ --hash=sha256:46a569130ff53798ea5f50afce7406e91fdc471ca1e0e26ba976a8c734c9427a \
--hash=sha256:7658b7073c1d6a2922ecc0ed41602410fae88586cb8a54f7a2063d537b6beaf7 \ --hash=sha256:4c318c1e95e2f5926fba326f68177dee364aa791d6df022ceb91b8221bd0a627 \
--hash=sha256:7f99d07c0e753717775be7be39ab383453b4d8b629c9fa174596b970c6555890 \ --hash=sha256:4e208f46cf6576a7624195aa047cb344a7f802e113bb1a06cfd4bee431de5e31 \
--hash=sha256:82ec95b02e894561c21e066bd0c716e4b410df141ce9441aa5af6cd937e4ade2 \ --hash=sha256:533b0e3b0c6768eef8cbe4b583731ce25a91ab54a22f830db2b031e83cca9213 \
--hash=sha256:afb72822ae410d62aa1a2920c6563cb5680de9078358f0e9474396c6c3e06be2 \ --hash=sha256:5864bdd7da445e4e5e011b199bb67168cdad10b501750367c496420f2ad00843 \
--hash=sha256:bf6889643d4560fcc56f9f0941f078e4df0d72a6c3e4ca548841fc13c5642664 \ --hash=sha256:5ba9cbd8ac6cf422f3102622b20f8552d601bf8837e49a3afed188d560152788 \
--hash=sha256:c1b0ecaa0d1f4fe1e30f625a2347f0034a89a7d17c39efbb502e554d92ee2f61 \ --hash=sha256:6f9c6976748a25e8b9be51ea028df49b8e561eed7809146da7a47dbecebab367 \
--hash=sha256:c54c55457c7f5ea4dfdba0020004fc7667f5c10c8d9b8010d735345acc06c9b8 \ --hash=sha256:7c48d9e221b637c017232e3760ed30b4e8d5dfd081daf327e829bf2a72c731b4 \
--hash=sha256:ca84deaa38cb64b7dd160ca2046b45f7b5dbff2b0179642e1339fadc337446c9 \ --hash=sha256:830f00640c965c5b7f6bc32f0d4ce0c36dfe0379f7dd65b07a00c801713ec40a \
--hash=sha256:cd54bbf089953140905768ed4626d7223e1ad1d7e2a138410a9c4d3b865ccd80 \ --hash=sha256:9a5430836811b7652991939012f43d2808a2db9b64ee240387e8c43e2e5578c8 \
--hash=sha256:d921c0270647ab11c3ef283efaaa3d46fd005ba233bfb3aea75231cdf3656de8 \ --hash=sha256:aa11b3c6928a1e496c1a79917d51d4cd5d04f8a2e75f21df4949eeefdf697f4b \
--hash=sha256:e11ab864323fa73ac1b7849688d9671c47a2665242e899785b4db1a375b547e1 \ --hash=sha256:b78e4f2cedf303869b782071b55fdde5987fda3038e9d09e58c91cc261b5ad18 \
--hash=sha256:e17674ee127f78f26fea237e7f4d5cf910a8be82beb6260fedf358b88075b823 \ --hash=sha256:b9576723858a78751d5aacd2497b8aef29ffea6d1c95981505877f7ac28215c6 \
--hash=sha256:e3ad1759ad4a5245172c6d32b8ada603a6020d03211524c39d78d25c9a7dc0d2 \ --hash=sha256:bddfb1db89bfaa855912261c805bd0e10218923cc262b9159a49c29a7a1c1afa \
--hash=sha256:e3bb809b743653b5aab5d72ee45c8c937c28e147b0846b0826a54bece898608c \ --hash=sha256:c7d36c2209d9136cd8e02fab1c0ddc185ce79bc914c45054a9f514e44c787917 \
--hash=sha256:e5a504ff40f81d6233603475a45497a6dca37a873393fa20ae6f7dd6596ef72b \ --hash=sha256:d1095fecf99eeb7384dabad4bf44b965f929a5f6079654b681193edf7169ec20 \
--hash=sha256:ed3b29f54f6bbf3eaca4cbd23bc260155153ace63b7f597c474fa6fc6f386530 \ --hash=sha256:d7b1704a530395aaf73912be741c04d181f82ca78084fbd80bc737be04848331 \
--hash=sha256:f34b46dbb1db1f09bfa937cd5853e5f2af232caeeff509c3ab6e43fd33780eae \ --hash=sha256:d86593ccf546223eb75a39b44c32788e6f6440d13cfc4750c1c15d0fcb850b63 \
--hash=sha256:f55fb5ff02d999a100be28bf6ffe826e1867a54c7b465409685332c9dd48ffa5 \ --hash=sha256:deaed9ad4da0b1aea77fe0aa0cebb9ef611c70b3177be936a95e5d01fa05094f \
--hash=sha256:ff842e27bc6a80de08c40e0bfdce460bd08080e8a94af131162b6a1b8948f2cc --hash=sha256:ef8345b48e95cee45ff25192ed1f4857273117917a4dcd48e3905619bcd9c9b8
# via django-for-runners # via django-for-runners
mdurl==0.1.2 \ mdurl==0.1.2 \
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
# via markdown-it-py # via markdown-it-py
numpy==1.26.1 \ numpy==1.26.2 \
--hash=sha256:06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668 \ --hash=sha256:06fa1ed84aa60ea6ef9f91ba57b5ed963c3729534e6e54055fc151fad0423f0a \
--hash=sha256:1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9 \ --hash=sha256:174a8880739c16c925799c018f3f55b8130c1f7c8e75ab0a6fa9d41cab092fd6 \
--hash=sha256:1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f \ --hash=sha256:1a13860fdcd95de7cf58bd6f8bc5a5ef81c0b0625eb2c9a783948847abbef2c2 \
--hash=sha256:1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5 \ --hash=sha256:1cc3d5029a30fb5f06704ad6b23b35e11309491c999838c31f124fee32107c79 \
--hash=sha256:3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53 \ --hash=sha256:22f8fc02fdbc829e7a8c578dd8d2e15a9074b630d4da29cda483337e300e3ee9 \
--hash=sha256:59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2 \ --hash=sha256:26c9d33f8e8b846d5a65dd068c14e04018d05533b348d9eaeef6c1bd787f9919 \
--hash=sha256:6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974 \ --hash=sha256:2b3fca8a5b00184828d12b073af4d0fc5fdd94b1632c2477526f6bd7842d700d \
--hash=sha256:6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f \ --hash=sha256:2beef57fb031dcc0dc8fa4fe297a742027b954949cabb52a2a376c144e5e6060 \
--hash=sha256:76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42 \ --hash=sha256:36340109af8da8805d8851ef1d74761b3b88e81a9bd80b290bbfed61bd2b4f75 \
--hash=sha256:78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2 \ --hash=sha256:3703fc9258a4a122d17043e57b35e5ef1c5a5837c3db8be396c82e04c1cf9b0f \
--hash=sha256:82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af \ --hash=sha256:3ced40d4e9e18242f70dd02d739e44698df3dcb010d31f495ff00a31ef6014fe \
--hash=sha256:8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67 \ --hash=sha256:4a06263321dfd3598cacb252f51e521a8cb4b6df471bb12a7ee5cbab20ea9167 \
--hash=sha256:9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e \ --hash=sha256:4eb8df4bf8d3d90d091e0146f6c28492b0be84da3e409ebef54349f71ed271ef \
--hash=sha256:97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c \ --hash=sha256:5d5244aabd6ed7f312268b9247be47343a654ebea52a60f002dc70c769048e75 \
--hash=sha256:9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7 \ --hash=sha256:64308ebc366a8ed63fd0bf426b6a9468060962f1a4339ab1074c228fa6ade8e3 \
--hash=sha256:a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e \ --hash=sha256:6a3cdb4d9c70e6b8c0814239ead47da00934666f668426fc6e94cce869e13fd7 \
--hash=sha256:a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908 \ --hash=sha256:854ab91a2906ef29dc3925a064fcd365c7b4da743f84b123002f6139bcb3f8a7 \
--hash=sha256:af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66 \ --hash=sha256:94cc3c222bb9fb5a12e334d0479b97bb2df446fbe622b470928f5284ffca3f8d \
--hash=sha256:afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24 \ --hash=sha256:96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b \
--hash=sha256:b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b \ --hash=sha256:a2bbc29fcb1771cd7b7425f98b05307776a6baf43035d3b80c4b0f29e9545186 \
--hash=sha256:bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e \ --hash=sha256:a4cd6ed4a339c21f1d1b0fdf13426cb3b284555c27ac2f156dfdaaa7e16bfab0 \
--hash=sha256:c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe \ --hash=sha256:aa18428111fb9a591d7a9cc1b48150097ba6a7e8299fb56bdf574df650e7d1f1 \
--hash=sha256:cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a \ --hash=sha256:aa317b2325f7aa0a9471663e6093c210cb2ae9c0ad824732b307d2c51983d5b6 \
--hash=sha256:cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575 \ --hash=sha256:b04f5dc6b3efdaab541f7857351aac359e6ae3c126e2edb376929bd3b7f92d7e \
--hash=sha256:d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297 \ --hash=sha256:b272d4cecc32c9e19911891446b72e986157e6a1809b7b56518b4f3755267523 \
--hash=sha256:d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104 \ --hash=sha256:b361d369fc7e5e1714cf827b731ca32bff8d411212fccd29ad98ad622449cc36 \
--hash=sha256:d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab \ --hash=sha256:b96e7b9c624ef3ae2ae0e04fa9b460f6b9f17ad8b4bec6d7756510f1f6c0c841 \
--hash=sha256:d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3 \ --hash=sha256:baf8aab04a2c0e859da118f0b38617e5ee65d75b83795055fb66c0d5e9e9b818 \
--hash=sha256:d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244 \ --hash=sha256:bcc008217145b3d77abd3e4d5ef586e3bdfba8fe17940769f8aa09b99e856c00 \
--hash=sha256:dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124 \ --hash=sha256:bd3f0091e845164a20bd5a326860c840fe2af79fa12e0469a12768a3ec578d80 \
--hash=sha256:e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617 \ --hash=sha256:cc392fdcbd21d4be6ae1bb4475a03ce3b025cd49a9be5345d76d7585aea69440 \
--hash=sha256:e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c --hash=sha256:d73a3abcac238250091b11caef9ad12413dab01669511779bc9b29261dd50210 \
--hash=sha256:f43740ab089277d403aa07567be138fc2a89d4d9892d113b76153e0e412409f8 \
--hash=sha256:f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea \
--hash=sha256:f79b231bf5c16b1f39c7f4875e1ded36abee1591e98742b05d8a0fb55d8a3eec \
--hash=sha256:fe6b44fb8fcdf7eda4ef4461b97b3f63c466b27ab151bec2366db8b197387841
# via # via
# contourpy # contourpy
# matplotlib # matplotlib
@ -711,9 +715,9 @@ psycopg2==2.9.9 \
--hash=sha256:de80739447af31525feddeb8effd640782cf5998e1a4e9192ebdf829717e3913 \ --hash=sha256:de80739447af31525feddeb8effd640782cf5998e1a4e9192ebdf829717e3913 \
--hash=sha256:ff432630e510709564c01dafdbe996cb552e0b9f3f065eb89bdce5bd31fabf4c --hash=sha256:ff432630e510709564c01dafdbe996cb552e0b9f3f065eb89bdce5bd31fabf4c
# via django-yunohost-integration # via django-yunohost-integration
pygments==2.16.1 \ pygments==2.17.2 \
--hash=sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692 \ --hash=sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c \
--hash=sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29 --hash=sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367
# via rich # via rich
pyparsing==3.1.1 \ pyparsing==3.1.1 \
--hash=sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb \ --hash=sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb \
@ -793,9 +797,9 @@ requests==2.31.0 \
--hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \
--hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1
# via django-for-runners # via django-for-runners
rich==13.6.0 \ rich==13.7.0 \
--hash=sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245 \ --hash=sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa \
--hash=sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef --hash=sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235
# via # via
# cli-base-utilities # cli-base-utilities
# django-rich # django-rich
@ -826,9 +830,9 @@ tablib[html,ods,xls,xlsx,yaml]==3.5.0 \
# via # via
# django-import-export # django-import-export
# tablib # tablib
tomlkit==0.12.2 \ tomlkit==0.12.3 \
--hash=sha256:df32fab589a81f0d7dc525a4267b6d7a64ee99619cbd1eeb0fae32c1dd426977 \ --hash=sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4 \
--hash=sha256:eeea7ac7563faeab0a1ed8fe12c2e5a51c61f933f2502f7e9db0241a65163ad0 --hash=sha256:b0a645a9156dc7cb5d3a1f0d4bab66db287fcb8e0430bdd4664a095ea16414ba
# via cli-base-utilities # via cli-base-utilities
typing-extensions==4.8.0 \ typing-extensions==4.8.0 \
--hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \ --hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \
@ -836,9 +840,9 @@ typing-extensions==4.8.0 \
# via # via
# asgiref # asgiref
# rich-click # rich-click
urllib3==2.0.7 \ urllib3==2.1.0 \
--hash=sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84 \ --hash=sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3 \
--hash=sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e --hash=sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54
# via requests # via requests
webencodings==0.5.1 \ webencodings==0.5.1 \
--hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \
@ -854,7 +858,7 @@ xlwt==1.3.0 \
# via tablib # via tablib
# The following packages are considered to be unsafe in a requirements file: # The following packages are considered to be unsafe in a requirements file:
setuptools==68.2.2 \ setuptools==69.0.2 \
--hash=sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87 \ --hash=sha256:1e8fdff6797d3865f37397be788a4e3cba233608e9b509382a2777d25ebde7f2 \
--hash=sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a --hash=sha256:735896e78a4742605974de002ac60562d286fa8051a7e2299445e8e8fbb01aa6
# via django-axes # via django-axes

View file

@ -40,7 +40,7 @@ YNH_CURRENT_HOST = '__YNH_CURRENT_HOST__' # YunoHost main domain from: /etc/yun
# config_panel.toml settings: # config_panel.toml settings:
DEBUG_ENABLED = '__DEBUG_ENABLED__' DEBUG_ENABLED = '__DEBUG_ENABLED__'
DEBUG = DEBUG_ENABLED == 'YES' DEBUG = DEBUG_ENABLED == '1'
LOG_LEVEL = '__LOG_LEVEL__' LOG_LEVEL = '__LOG_LEVEL__'
ADMIN_EMAIL = '__ADMIN_EMAIL__' ADMIN_EMAIL = '__ADMIN_EMAIL__'

60
doc/ADMIN.md Normal file
View file

@ -0,0 +1,60 @@
## Settings and upgrades
Almost everything related to django-for-runners's configuration is handled in a `"../conf/settings.py"` file.
You can edit the file `/home/yunohost.app/django_example/local_settings.py` to enable or disable features.
Test sending emails, e.g.:
```bash
ssh admin@yourdomain.tld
root@yunohost:~# /home/yunohost.app/django_for_runners/manage.py sendtestemail --admins
```
How to debug a django YunoHost app, take a look into:
* https://github.com/YunoHost-Apps/django-for-runners_ynh#developer-info
## local test
For quicker developing of for_runners_ynh in the context of YunoHost app,
it's possible to run the Django developer server with the settings
and urls made for YunoHost installation.
e.g.:
```bash
~$ git clone https://github.com/YunoHost-Apps/django_example.git
~$ cd for_runners_ynh/
~/django_example$ ./dev-cli.py --help
```
The output will looks like:
[comment]: <> (✂✂✂ auto generated help start ✂✂✂)
```
Usage: ./dev-cli.py [OPTIONS] COMMAND [ARGS]...
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────╮
│ check-code-style Check code style by calling darker + flake8 │
│ coverage Run and show coverage. │
│ diffsettings Run "diffsettings" manage command against a "local_test" YunoHost │
│ installation. │
│ fix-code-style Fix code style of all for_runners_ynh source code files via darker │
│ install Run pip-sync and install 'for_runners_ynh' via pip as editable. │
│ local-test Build a "local_test" YunoHost installation and start the Django dev. │
│ server against it. │
│ mypy Run Mypy (configured in pyproject.toml) │
│ publish Build and upload this project to PyPi │
│ safety Run safety check against current requirements files │
│ test Compile YunoHost files and run Django unittests │
│ tox Run tox │
│ update Update "requirements*.txt" dependencies files │
│ update-test-snapshot-files Update all test snapshot files (by remove and recreate all snapshot │
│ files) │
│ version Print version and exit │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
```
[comment]: <> (✂✂✂ auto generated help end ✂✂✂)

View file

@ -1,14 +1,11 @@
![Logo](https://raw.githubusercontent.com/jedie/django-for-runners/main/for_runners/static/Django-ForRunners128.png) [![tests](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/tests.yml)
[![codecov](https://codecov.io/github/jedie/for_runners_ynh/branch/main/graph/badge.svg)](https://app.codecov.io/github/jedie/for_runners_ynh)
[![for_runners_ynh @ PyPi](https://img.shields.io/pypi/v/for_runners_ynh?label=for_runners_ynh%20%40%20PyPi)](https://pypi.org/project/for_runners_ynh/)
[![Python Versions](https://img.shields.io/pypi/pyversions/for_runners_ynh)](https://github.com/YunoHost-Apps/django-for-runners_ynh/blob/main/pyproject.toml)
[![License GPL-3.0-or-later](https://img.shields.io/pypi/l/for_runners_ynh)](https://github.com/YunoHost-Apps/django-for-runners_ynh/blob/main/LICENSE)
[django-for-runners](https://github.com/jedie/django-for-runners) is a libre web-based management for your GPX tracks of your running (or other sports activity). Used [Python](https://www.python.org/)/[Django](https://www.djangoproject.com/). [django-for-runners](https://github.com/jedie/django-for-runners) is a libre web-based management for your GPX tracks of your running (or other sports activity). Used [Python](https://www.python.org/)/[Django](https://www.djangoproject.com/).
[![pytest](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/pytest.yml/badge.svg?branch=master)](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/pytest.yml) [![YunoHost apps package linter](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/package_linter.yml/badge.svg)](https://github.com/YunoHost-Apps/django-for-runners_ynh/actions/workflows/package_linter.yml) [![Coverage Status on codecov.io](https://codecov.io/gh/YunoHost-Apps/django-for-runners_ynh/branch/master/graph/badge.svg)](https://codecov.io/gh/YunoHost-Apps/django-for-runners_ynh)
![django-for-runners @ PyPi](https://img.shields.io/pypi/v/django-for-runners?label=django-for-runners%20%40%20PyPi)
![Python Versions](https://img.shields.io/pypi/pyversions/django-for-runners)
![License GPL V3+](https://img.shields.io/pypi/l/django-for-runners)
Pull requests welcome ;) Pull requests welcome ;)
This package for YunoHost used [django-yunohost-integration](https://github.com/YunoHost-Apps/django_yunohost_integration) This package for YunoHost used [django-yunohost-integration](https://github.com/YunoHost-Apps/django_yunohost_integration)

View file

@ -1,153 +0,0 @@
## Settings and upgrades
Almost everything related to django-for-runners's configuration is handled in a `"../conf/settings.py"` file.
You can edit the file `/opt/yunohost/django-for-runners/local_settings.py` to enable or disable features.
Test sending emails:
```bash
ssh admin@yourdomain.tld
root@yunohost:~# cd /opt/yunohost/django-for-runners/
root@yunohost:/opt/yunohost/django-for-runners# source venv/bin/activate
(venv) root@yunohost:/opt/yunohost/django-for-runners# ./manage.py sendtestemail --admins
```
Background info: Error mails are send to all [settings.ADMINS](https://docs.djangoproject.com/en/2.2/ref/settings/#std:setting-ADMINS). By default the YunoHost admin is inserted here.
To check current ADMINS run:
```bash
(venv) root@yunohost:/opt/yunohost/django-for-runners# ./manage.py sendtestemail --admins
```
If you prefere to send error emails to a extrnal email address, just do something like this:
```bash
echo "ADMINS = (('Your Name', 'example@domain.tld'),)" >> /opt/yunohost/django-for-runners/local_settings.py
```
To check the effective settings, run this:
```bash
(venv) root@yunohost:/opt/yunohost/django-for-runners# ./manage.py diffsettings
```
# Miscellaneous
## SSO authentication
[SSOwat](https://github.com/YunoHost/SSOwat) is fully supported via [django_ynh](https://github.com/YunoHost-Apps/django_ynh):
* First user (`$YNH_APP_ARG_ADMIN`) will be created as Django's super user
* All new users will be created as normal users
* Login via SSO is fully supported
* User Email, First / Last name will be updated from SSO data
## Links
* Report a bug about this package: https://github.com/YunoHost-Apps/django-for-runners_ynh
* Report a bug about django-for-runners itself: https://github.com/jedie/django-for-runners
* YunoHost website: https://yunohost.org/
---
# Developer info
## package installation / debugging
Please send your pull request to https://github.com/YunoHost-Apps/django-for-runners_ynh
Try 'main' branch, e.g.:
```bash
sudo yunohost app install https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/master --debug
or
sudo yunohost app upgrade django-for-runners -u https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/master --debug
```
Try 'testing' branch, e.g.:
```bash
sudo yunohost app install https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/testing --debug
or
sudo yunohost app upgrade django-for-runners -u https://github.com/YunoHost-Apps/django-for-runners_ynh/tree/testing --debug
```
To remove call e.g.:
```bash
sudo yunohost app remove django-for-runners
```
Backup / remove / restore cycle, e.g.:
```bash
yunohost backup create --apps django-for-runners
yunohost backup list
archives:
- django-for-runners-pre-upgrade1
- 20201223-163434
yunohost app remove django-for-runners
yunohost backup restore 20201223-163434 --apps django-for-runners
```
Debug installation, e.g.:
```bash
root@yunohost:~# ls -la /var/www/django-for-runners/
total 18
drwxr-xr-x 4 root root 4 Dec 8 08:36 .
drwxr-xr-x 6 root root 6 Dec 8 08:36 ..
drwxr-xr-x 2 root root 2 Dec 8 08:36 media
drwxr-xr-x 7 root root 8 Dec 8 08:40 static
root@yunohost:~# ls -la /opt/yunohost/django-for-runners/
total 58
drwxr-xr-x 5 django-for-runners django-for-runners 11 Dec 8 08:39 .
drwxr-xr-x 3 root root 3 Dec 8 08:36 ..
-rw-r--r-- 1 django-for-runners django-for-runners 460 Dec 8 08:39 gunicorn.conf.py
-rw-r--r-- 1 django-for-runners django-for-runners 0 Dec 8 08:39 local_settings.py
-rwxr-xr-x 1 django-for-runners django-for-runners 274 Dec 8 08:39 manage.py
-rw-r--r-- 1 django-for-runners django-for-runners 171 Dec 8 08:39 secret.txt
drwxr-xr-x 6 django-for-runners django-for-runners 6 Dec 8 08:37 venv
-rw-r--r-- 1 django-for-runners django-for-runners 115 Dec 8 08:39 wsgi.py
-rw-r--r-- 1 django-for-runners django-for-runners 4737 Dec 8 08:39 settings.py
root@yunohost:~# cd /opt/yunohost/django-for-runners/
root@yunohost:/opt/yunohost/django-for-runners# source venv/bin/activate
(venv) root@yunohost:/opt/yunohost/django-for-runners# ./manage.py check
django-for-runners v0.8.2 (Django v2.2.17)
DJANGO_SETTINGS_MODULE='settings'
PROJECT_PATH:/opt/yunohost/django-for-runners/venv/lib/python3.7/site-packages
BASE_PATH:/opt/yunohost/django-for-runners
System check identified no issues (0 silenced).
root@yunohost:~# tail -f /var/log/django-for-runners/django-for-runners.log
root@yunohost:~# cat /etc/systemd/system/django-for-runners.service
root@yunohost:~# systemctl reload-or-restart django-for-runners
root@yunohost:~# systemctl status django-for-runners
root@yunohost:~# journalctl --unit=for_runners --follow
```
## local test
For quicker developing of django-for-runners in the context of YunoHost app,
it's possible to run the Django developer server with the settings
and urls made for YunoHost installation.
e.g.:
```bash
~$ git clone https://github.com/YunoHost-Apps/django-for-runners_ynh.git
~$ cd django-for-runners_ynh/
~/django-for-runners_ynh$ make
install-poetry install or update poetry
install install django-for-runners via poetry
update update the sources and installation
local-test Run local_test.py to run django-for-runners_ynh locally
~/django-for-runners_ynh$ make install-poetry
~/django-for-runners_ynh$ make install
~/django-for-runners_ynh$ make local-test
```
Notes:
* SQlite database will be used
* A super user with username `test` and password `test` is created
* The page is available under `http://127.0.0.1:8000/app_path/`

View file

@ -2,14 +2,17 @@
CLI for development CLI for development
""" """
import logging import logging
import os
import sys import sys
from pathlib import Path from pathlib import Path
import django
import rich_click as click import rich_click as click
from bx_py_utils.path import assert_is_file from bx_py_utils.path import assert_is_file
from cli_base.cli_tools.subprocess_utils import verbose_check_call from cli_base.cli_tools.subprocess_utils import verbose_check_call
from cli_base.cli_tools.version_info import print_version from cli_base.cli_tools.version_info import print_version
from django_yunohost_integration.local_test import create_local_test from django.core.management.commands.test import Command as DjangoTestCommand
from django_yunohost_integration.local_test import CreateResults, create_local_test
from manageprojects.utilities import code_style from manageprojects.utilities import code_style
from manageprojects.utilities.publish import publish_package from manageprojects.utilities.publish import publish_package
from rich import print # noqa; noqa from rich import print # noqa; noqa
@ -42,6 +45,7 @@ ARGUMENT_NOT_EXISTING_DIR = dict(
ARGUMENT_EXISTING_FILE = dict( ARGUMENT_EXISTING_FILE = dict(
type=click.Path(exists=True, file_okay=True, dir_okay=False, readable=True, path_type=Path) type=click.Path(exists=True, file_okay=True, dir_okay=False, readable=True, path_type=Path)
) )
CLI_EPILOG = 'Project Homepage: https://github.com/YunoHost-Apps/django-for-runners_ynh'
class ClickGroup(RichGroup): # FIXME: How to set the "info_name" easier? class ClickGroup(RichGroup): # FIXME: How to set the "info_name" easier?
@ -50,10 +54,7 @@ class ClickGroup(RichGroup): # FIXME: How to set the "info_name" easier?
return super().make_context(info_name, *args, **kwargs) return super().make_context(info_name, *args, **kwargs)
@click.group( @click.group(cls=ClickGroup, epilog=CLI_EPILOG)
cls=ClickGroup,
epilog='Project Homepage: https://github.com/YunoHost-Apps/django-for-runners_ynh',
)
def cli(): def cli():
pass pass
@ -76,7 +77,7 @@ def coverage(verbose: bool = True):
""" """
verbose_check_call('coverage', 'run', verbose=verbose, exit_on_error=True) verbose_check_call('coverage', 'run', verbose=verbose, exit_on_error=True)
verbose_check_call('coverage', 'combine', '--append', verbose=verbose, exit_on_error=True) verbose_check_call('coverage', 'combine', '--append', verbose=verbose, exit_on_error=True)
verbose_check_call('coverage', 'report', '--fail-under=30', verbose=verbose, exit_on_error=True) verbose_check_call('coverage', 'report', '--fail-under=10', verbose=verbose, exit_on_error=True)
verbose_check_call('coverage', 'xml', verbose=verbose, exit_on_error=True) verbose_check_call('coverage', 'xml', verbose=verbose, exit_on_error=True)
verbose_check_call('coverage', 'json', verbose=verbose, exit_on_error=True) verbose_check_call('coverage', 'json', verbose=verbose, exit_on_error=True)
@ -163,7 +164,10 @@ def publish():
""" """
Build and upload this project to PyPi Build and upload this project to PyPi
""" """
_run_unittest_cli(verbose=False, exit_after_run=False) # Don't publish a broken state try:
_run_django_test_cli() # Don't publish a broken state
except SystemExit as err:
assert err.code == 0, f'Exit code is not 0: {err.code}'
publish_package( publish_package(
module=for_runners_ynh, module=for_runners_ynh,
@ -217,14 +221,10 @@ def update_test_snapshot_files():
print(f'{removed_file_count} test snapshot files removed... run tests...') print(f'{removed_file_count} test snapshot files removed... run tests...')
# Just recreate them by running tests: # Just recreate them by running tests:
_run_unittest_cli( os.environ['RAISE_SNAPSHOT_ERRORS'] = '0' # Recreate snapshot files without error
extra_env=dict( try:
RAISE_SNAPSHOT_ERRORS='0', # Recreate snapshot files without error _run_django_test_cli()
), finally:
verbose=False,
exit_after_run=False,
)
new_files = len(list(iter_snapshot_files())) new_files = len(list(iter_snapshot_files()))
print(f'{new_files} test snapshot files created, ok.\n') print(f'{new_files} test snapshot files created, ok.\n')
@ -232,49 +232,48 @@ def update_test_snapshot_files():
cli.add_command(update_test_snapshot_files) cli.add_command(update_test_snapshot_files)
def _run_unittest_cli(extra_env=None, verbose=True, exit_after_run=True): def _run_django_test_cli():
""" """
Call the origin unittest CLI and pass all args to it. Call the origin Django test manage command CLI and pass all args to it.
""" """
if extra_env is None: os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
extra_env = dict()
extra_env.update( print('Compile YunoHost files...')
dict( result: CreateResults = create_local_test(
PYTHONUNBUFFERED='1', django_settings_path=PACKAGE_ROOT / 'conf' / 'settings.py',
PYTHONWARNINGS='always', destination=PACKAGE_ROOT / 'local_test',
) runserver=False,
extra_replacements={
'__DEBUG_ENABLED__': '0', # "1" or "0" string
'__LOG_LEVEL__': 'INFO',
'__ADMIN_EMAIL__': 'foo-bar@test.tld',
'__DEFAULT_FROM_EMAIL__': 'django_app@test.tld',
},
) )
print('Local test files created:')
print(result)
args = sys.argv[2:] data_dir = str(result.data_dir_path)
if not args: if data_dir not in sys.path:
if verbose: sys.path.insert(0, data_dir)
args = ('--verbose', '--locals', '--buffer')
else:
args = ('--locals', '--buffer')
verbose_check_call( django.setup()
sys.executable,
'-m', os.chdir(Path(for_runners_ynh.__file__).parent)
'unittest',
*args, test_command = DjangoTestCommand()
timeout=15 * 60, test_command.run_from_argv(sys.argv)
extra_env=extra_env,
)
if exit_after_run:
sys.exit(0)
@click.command() # Dummy command @click.command() # Dummy command
def test(): def test():
""" """
Run unittests Compile YunoHost files and run Django unittests
""" """
_run_unittest_cli() _run_django_test_cli()
# TODO: Replace pytest with normal Django unittests: cli.add_command(test)
# cli.add_command(test)
def _run_tox(): def _run_tox():
@ -290,7 +289,7 @@ def tox():
_run_tox() _run_tox()
# TODO: cli.add_command(tox) cli.add_command(tox)
@click.command() @click.command()
@ -336,33 +335,30 @@ def diffsettings():
}, },
) )
app_path = destination / 'opt_yunohost' app_path = destination / 'opt_yunohost'
verbose_check_call(sys.executable, app_path / 'manage.py', 'diffsettings', cwd=app_path) verbose_check_call(
sys.executable,
app_path / 'manage.py',
'diffsettings',
cwd=app_path,
)
cli.add_command(diffsettings) cli.add_command(diffsettings)
@click.command()
def pytest():
"""
Run tests via "pytest"
"""
verbose_check_call(sys.executable, '-m', 'pytest', *sys.argv[2:], cwd=PACKAGE_ROOT)
cli.add_command(pytest)
def main(): def main():
print_version(for_runners_ynh) print_version(for_runners_ynh)
print(f'{sys.argv=}')
if len(sys.argv) >= 2: if len(sys.argv) >= 2:
# Check if we just pass a command call # Check if we just pass a command call
command = sys.argv[1] command = sys.argv[1]
if command == 'test': if command == 'test':
_run_unittest_cli() _run_django_test_cli()
sys.exit(0)
elif command == 'tox': elif command == 'tox':
_run_tox() _run_tox()
sys.exit(0)
# Execute Click CLI: print('Execute Click CLI')
cli() cli()

View file

@ -0,0 +1,170 @@
from unittest.mock import patch
from axes.models import AccessLog
from bx_django_utils.test_utils.html_assertion import HtmlAssertionMixin, assert_html_response_snapshot
from django.conf import LazySettings, settings
from django.contrib.auth.models import User
from django.template.defaulttags import CsrfTokenNode
from django.test import override_settings
from django.test.testcases import TestCase
from django.urls.base import reverse
from django_yunohost_integration.test_utils import generate_basic_auth
from for_runners import __version__ as upstream_version
@override_settings(DEBUG=False)
class DjangoYnhTestCase(HtmlAssertionMixin, TestCase):
def setUp(self):
super().setUp()
# Always start a fresh session:
self.client = self.client_class()
def test_settings(self):
assert isinstance(settings, LazySettings)
assert settings.configured is True
assert settings.PATH_URL == 'app_path'
assert str(settings.DATA_DIR_PATH).endswith('/local_test/opt_yunohost')
assert str(settings.INSTALL_DIR_PATH).endswith('/local_test/var_www')
assert str(settings.LOG_FILE_PATH).endswith(
'/local_test/var_log_django-for-runners.log'
), f'{settings.LOG_FILE_PATH=}'
assert settings.ROOT_URLCONF == 'urls'
def test_config_panel_settings(self):
# config_panel.toml settings, set via tests.conftest.pytest_configure():
assert settings.DEBUG_ENABLED == '0' and settings.DEBUG is False
assert settings.LOG_LEVEL == 'INFO'
assert settings.ADMIN_EMAIL == 'foo-bar@test.tld'
assert settings.DEFAULT_FROM_EMAIL == 'django_app@test.tld'
def test_auth(self):
assert settings.PATH_URL == 'app_path'
self.assertEqual(reverse('admin:index'), '/app_path/')
# SecurityMiddleware should redirects all non-HTTPS requests to HTTPS:
assert settings.SECURE_SSL_REDIRECT is True
response = self.client.get('/app_path/', secure=False)
self.assertRedirects(
response,
status_code=301, # permanent redirect
expected_url='https://testserver/app_path/',
fetch_redirect_response=False,
)
response = self.client.get('/app_path/', secure=True)
self.assertRedirects(
response,
expected_url='/app_path/login/?next=%2Fapp_path%2F',
fetch_redirect_response=False,
)
def test_create_unknown_user(self):
assert User.objects.count() == 0
self.client.cookies['SSOwAuthUser'] = 'test'
with patch.object(CsrfTokenNode, 'render', return_value='MockedCsrfTokenNode'):
response = self.client.get(
path='/app_path/',
HTTP_REMOTE_USER='test',
HTTP_AUTH_USER='test',
HTTP_AUTHORIZATION='basic dGVzdDp0ZXN0MTIz',
secure=True,
)
assert User.objects.count() == 1
user = User.objects.first()
assert user.username == 'test'
assert user.is_active is True
assert user.is_staff is True # Set by: conf.setup_user.setup_project_user
assert user.is_superuser is False
self.assert_html_parts(
response,
parts=(
f'<title>Site administration | Django-ForRunners v{upstream_version}</title>',
'<strong>test</strong>',
),
)
assert_html_response_snapshot(response, query_selector='#main', validate=False)
def test_wrong_auth_user(self):
assert User.objects.count() == 0
assert AccessLog.objects.count() == 0
self.client.cookies['SSOwAuthUser'] = 'test'
response = self.client.get(
path='/app_path/admin/',
HTTP_REMOTE_USER='test',
HTTP_AUTH_USER='foobar', # <<< wrong user name
HTTP_AUTHORIZATION='basic dGVzdDp0ZXN0MTIz',
secure=True,
)
assert User.objects.count() == 1
user = User.objects.first()
assert user.username == 'test'
assert user.is_active is True
assert user.is_staff is True # Set by: conf.setup_user.setup_project_user
assert user.is_superuser is False
assert AccessLog.objects.count() == 1
assert response.status_code == 403 # Forbidden
def test_wrong_cookie(self):
assert User.objects.count() == 0
assert AccessLog.objects.count() == 0
self.client.cookies['SSOwAuthUser'] = 'foobar' # <<< wrong user name
response = self.client.get(
path='/app_path/',
HTTP_REMOTE_USER='test',
HTTP_AUTH_USER='test',
HTTP_AUTHORIZATION='basic dGVzdDp0ZXN0MTIz',
secure=True,
)
assert User.objects.count() == 1
user = User.objects.first()
assert user.username == 'test'
assert user.is_active is True
assert user.is_staff is True # Set by: conf.setup_user.setup_project_user
assert user.is_superuser is False
assert AccessLog.objects.count() == 1
assert response.status_code == 403 # Forbidden
def test_wrong_authorization_user(self):
assert User.objects.count() == 0
self.client.cookies['SSOwAuthUser'] = 'test'
response = self.client.get(
path='/app_path/',
HTTP_REMOTE_USER='test',
HTTP_AUTH_USER='test',
HTTP_AUTHORIZATION=generate_basic_auth(
username='foobar', # <<< wrong user name
password='test123',
),
secure=True,
)
assert User.objects.count() == 1
user = User.objects.first()
assert user.username == 'test'
assert user.is_active is True
assert user.is_staff is True # Set by: conf.setup_user.setup_project_user
assert user.is_superuser is False
assert AccessLog.objects.count() == 1
assert response.status_code == 403 # Forbidden

View file

@ -0,0 +1,32 @@
<div class="main" id="main">
<div class="content" id="content-start" tabindex="-1">
<!-- Content -->
<div class="colMS" id="content">
<h1>
Site administration
</h1>
<div id="content-main">
<p>
You dont have permission to view or edit anything.
</p>
</div>
<div id="content-related">
<div class="module" id="recent-actions-module">
<h2>
Recent actions
</h2>
<h3>
My actions
</h3>
<p>
None available
</p>
</div>
</div>
<br class="clear"/>
</div>
<!-- END Content -->
<div id="footer">
</div>
</div>
</div>

View file

@ -1,68 +1,104 @@
import subprocess import os
from unittest import TestCase
from bx_py_utils.path import assert_is_file
from manageprojects.test_utils.click_cli_utils import subprocess_cli
from manageprojects.test_utils.project_setup import check_editor_config, get_py_max_line_length
from manageprojects.utilities import code_style
from packaging.version import Version
from for_runners_ynh import __version__
from for_runners_ynh.cli.dev import PACKAGE_ROOT from for_runners_ynh.cli.dev import PACKAGE_ROOT
try:
import tomllib # New in Python 3.11
except ImportError:
import tomli as tomllib
from bx_django_utils.filename import clean_filename
from bx_py_utils.path import assert_is_dir, assert_is_file
from django.test.testcases import TestCase
from django_tools.unittest_utils.project_setup import check_editor_config
from django_yunohost_integration.test_utils import assert_project_version
from for_runners import __version__ as upstream_version
from for_runners_ynh import __version__ as ynh_pkg_version
def assert_file_contains_string(file_path, string):
with file_path.open('r') as f:
for line in f:
if string in line:
return
raise AssertionError(f'File {file_path} does not contain {string!r} !')
class ProjectSetupTestCase(TestCase): class ProjectSetupTestCase(TestCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
manifest_path = PACKAGE_ROOT / 'manifest.toml'
assert_is_file(manifest_path)
cls.manifest_cfg = tomllib.loads(manifest_path.read_text(encoding='UTF-8'))
def test_version(self): def test_version(self):
self.assertIsNotNone(__version__) assert ynh_pkg_version.startswith(
upstream_version
), f'{ynh_pkg_version=} does not start with {upstream_version=}'
self.assertIn('+ynh', ynh_pkg_version)
version = Version(__version__) # Will raise InvalidVersion() if wrong formatted # pyproject.toml needs a PEP 440 conform version and used "+ynh"
self.assertEqual(str(version), __version__) # the YunoHost syntax is: "~ynh", just "convert this:
manifest_version = ynh_pkg_version.replace('+', '~')
self.assertEqual(self.manifest_cfg['version'], manifest_version)
dev_cli_bin = PACKAGE_ROOT / 'dev-cli.py' if 'GITHUB_ACTION' not in os.environ:
assert_is_file(dev_cli_bin) # Github has a rate-limiting... So don't fetch the API if we run as GitHub action
assert_project_version(
output = subprocess.check_output([dev_cli_bin, 'version'], text=True) current_version=ynh_pkg_version,
self.assertIn(f'for_runners_ynh v{__version__}', output) github_project_url='https://github.com/jedie/django-for-runners',
def test_code_style(self):
dev_cli_bin = PACKAGE_ROOT / 'dev-cli.py'
assert_is_file(dev_cli_bin)
try:
output = subprocess_cli(
cli_bin=dev_cli_bin,
args=('check-code-style',),
exit_on_error=False,
) )
except subprocess.CalledProcessError as err:
self.assertIn('.venv/bin/darker', err.stdout) # darker was called?
else:
if 'Code style: OK' in output:
self.assertIn('.venv/bin/darker', output) # darker was called?
return # Nothing to fix -> OK
# Try to "auto" fix code style: def test_screenshot_filenames(self):
"""
try: https://forum.yunohost.org/t/yunohost-bot-cant-handle-spaces-in-screenshots/19483
output = subprocess_cli( """
cli_bin=dev_cli_bin, screenshot_path = PACKAGE_ROOT / 'doc' / 'screenshots'
args=('fix-code-style',), assert_is_dir(screenshot_path)
exit_on_error=False, renamed = []
) for file_path in screenshot_path.iterdir():
except subprocess.CalledProcessError as err: file_name = file_path.name
output = err.stdout if file_name.startswith('.'):
continue
self.assertIn('.venv/bin/darker', output) # darker was called? cleaned_name = clean_filename(file_name)
if cleaned_name != file_name:
# Check again and display the output: new_path = file_path.with_name(cleaned_name)
file_path.rename(new_path)
try: renamed.append(f'{file_name!r} renamed to {cleaned_name!r}')
code_style.check(package_root=PACKAGE_ROOT) assert not renamed, f'Bad screenshots file names found: {", ".join(renamed)}'
except SystemExit as err:
self.assertEqual(err.code, 0, 'Code style error, see output above!')
def test_check_editor_config(self): def test_check_editor_config(self):
check_editor_config(package_root=PACKAGE_ROOT) check_editor_config(package_root=PACKAGE_ROOT)
max_line_length = get_py_max_line_length(package_root=PACKAGE_ROOT) def test_manifest_toml(self):
self.assertEqual(max_line_length, 119) self.assertEqual(self.manifest_cfg['packaging_format'], 2)
self.assertEqual(
set(self.manifest_cfg['install'].keys()),
{
'admin',
'admin_email',
'debug_enabled',
'default_from_email',
'domain',
'init_main_permission',
'log_level',
'path',
},
)
self.assertEqual(
set(self.manifest_cfg['resources'].keys()),
{
'apt',
'data_dir',
'database',
'install_dir',
'permissions',
'ports',
'system_user',
},
)

View file

@ -0,0 +1,36 @@
from pathlib import Path
from bx_py_utils.auto_doc import assert_readme_block
from manageprojects.test_utils.click_cli_utils import invoke_click
from manageprojects.tests.base import BaseTestCase
from for_runners_ynh.cli.dev import CLI_EPILOG, PACKAGE_ROOT, cli
def assert_cli_help_in_readme(text_block: str, marker: str, readme_path: Path):
text_block = text_block.replace(CLI_EPILOG, '')
text_block = f'```\n{text_block.strip()}\n```'
assert_readme_block(
readme_path=readme_path,
text_block=text_block,
start_marker_line=f'[comment]: <> (✂✂✂ auto generated {marker} start ✂✂✂)',
end_marker_line=f'[comment]: <> (✂✂✂ auto generated {marker} end ✂✂✂)',
)
class ReadmeTestCase(BaseTestCase):
def test_main_help(self):
stdout = invoke_click(cli, '--help')
self.assert_in_content(
got=stdout,
parts=(
'Usage: ./dev-cli.py [OPTIONS] COMMAND [ARGS]...',
' local-test ',
CLI_EPILOG,
),
)
assert_cli_help_in_readme(
text_block=stdout,
marker='help',
readme_path=PACKAGE_ROOT / 'doc' / 'ADMIN.md',
)

View file

@ -13,12 +13,12 @@ maintainers = ["Jens Diemer"]
[upstream] [upstream]
# https://yunohost.org/en/packaging_manifest#upstream-section # https://yunohost.org/en/packaging_manifest#upstream-section
license = "GPL-3.0-or-later" license = "GPL-3.0-or-later"
website = "https://github.com/YunoHost-Apps/django-for-runners_ynh"
admindoc = "https://github.com/YunoHost-Apps/django-for-runners_ynh" admindoc = "https://github.com/YunoHost-Apps/django-for-runners_ynh"
userdoc = "https://github.com/jedie/django-for-runners" userdoc = "https://github.com/jedie/django-for-runners"
code = "https://github.com/YunoHost-Apps/django-for-runners_ynh" code = "https://github.com/YunoHost-Apps/django-for-runners_ynh"
[integration] [integration]
# https://yunohost.org/en/packaging_manifest#integration-section # https://yunohost.org/en/packaging_manifest#integration-section
yunohost = ">=11" yunohost = ">=11"
@ -31,7 +31,10 @@ ram.build = "50M" # **estimate** minimum ram requirement. e.g. 50M, 400M, 1G, ..
ram.runtime = "50M" # **estimate** minimum ram requirement. e.g. 50M, 400M, 1G, ... ram.runtime = "50M" # **estimate** minimum ram requirement. e.g. 50M, 400M, 1G, ...
[install] [install]
# https://yunohost.org/en/packaging_manifest#install-questions
[install.domain] [install.domain]
# this is a generic question - ask strings are automatically handled by Yunohost's core # this is a generic question - ask strings are automatically handled by Yunohost's core
type = "domain" type = "domain"
@ -61,11 +64,9 @@ ram.runtime = "50M" # **estimate** minimum ram requirement. e.g. 50M, 400M, 1G,
type = "email" type = "email"
example = "admin@example.com" example = "admin@example.com"
[install.debug_enabled] # __DEBUG_ENABLED__ [install.debug_enabled] # __DEBUG_ENABLED__ will be set to "0" or "1" string
ask.en = "Should be never enabled in production!" ask.en = "Should be never enabled in production!"
type = "select" type = "boolean"
choices = ["YES", "NO"]
default = "NO"
[install.log_level] # __LOG_LEVEL__ [install.log_level] # __LOG_LEVEL__
ask.en = "Logging level" ask.en = "Logging level"

View file

@ -24,15 +24,10 @@ dependencies = [
[project.optional-dependencies] [project.optional-dependencies]
dev = [ dev = [
"bx_django_utils", # https://github.com/boxine/bx_django_utils "bx_django_utils", # https://github.com/boxine/bx_django_utils
"beautifulsoup4", "beautifulsoup4", # https://pypi.org/project/beautifulsoup4/
#
# TODO: Remove "pytest" and use normal unittests ;)
"pytest",
"pytest-cov",
"pytest-django",
#
"manageprojects>=0.15.0", # https://github.com/jedie/manageprojects "manageprojects>=0.15.0", # https://github.com/jedie/manageprojects
"pip-tools", # https://github.com/jazzband/pip-tools/ "pip-tools", # https://github.com/jazzband/pip-tools/
"tblib", # https://github.com/ionelmc/python-tblib
"tox", # https://github.com/tox-dev/tox "tox", # https://github.com/tox-dev/tox
"coverage", # https://github.com/nedbat/coveragepy "coverage", # https://github.com/nedbat/coveragepy
"autopep8", # https://github.com/hhatto/autopep8 "autopep8", # https://github.com/hhatto/autopep8
@ -56,7 +51,6 @@ dev = [
# to avoid errors like: # to avoid errors like:
# In --require-hashes mode, all requirements must have their versions pinned with ==. These do not: ... # In --require-hashes mode, all requirements must have their versions pinned with ==. These do not: ...
"tomli", # Only needed for Python <3.11 "tomli", # Only needed for Python <3.11
"exceptiongroup", # needed by pytest
] ]
[project.urls] [project.urls]
@ -108,47 +102,18 @@ line_length=119
lines_after_imports=2 lines_after_imports=2
[tool.pytest.ini_options]
# https://docs.pytest.org/en/latest/customize.html#pyproject-toml
minversion = "6.0"
norecursedirs = ".* .git __pycache__ conf local_test coverage* dist htmlcov"
# sometimes helpfull "addopts" arguments:
# -vv
# --verbose
# --capture=no
# --trace-config
# --full-trace
# -p no:warnings
addopts = """
--reuse-db
--nomigrations
--cov=.
--cov-config=pyproject.toml
--cov-report term-missing
--cov-report html
--cov-report xml
--no-cov-on-fail
--showlocals
--doctest-modules
--failed-first
--new-first
"""
[tool.coverage.run] [tool.coverage.run]
branch = true branch = true
parallel = true parallel = true
concurrency = ["multiprocessing"] concurrency = ["multiprocessing"]
source = ['.'] source = ['.']
# TODO: pytest -> Django unitests: command_line = './dev-cli.py test'
#command_line = '-m unittest --verbose --locals --buffer'
command_line = '-m pytest'
disable_warnings = ["couldnt-parse"] disable_warnings = ["couldnt-parse"]
[tool.coverage.report] [tool.coverage.report]
omit = ['.*', '*/tests/*'] omit = ['.*', '*/tests/*']
skip_empty = true skip_empty = true
fail_under = 30 fail_under = 10
show_missing = true show_missing = true
exclude_lines = [ exclude_lines = [
'if self.debug:', 'if self.debug:',
@ -196,6 +161,8 @@ cookiecutter_directory = "yunohost_django_package"
applied_migrations = [ applied_migrations = [
"183124a", # 2023-04-04T12:26:15+02:00 "183124a", # 2023-04-04T12:26:15+02:00
"3383cb0", # 2023-11-09T20:14:05+01:00 "3383cb0", # 2023-11-09T20:14:05+01:00
"4abd4c0", # 2023-11-25T15:59:31+01:00
"2f9fd7b", # 2023-11-26T20:13:32+01:00
] ]
[manageprojects.cookiecutter_context.cookiecutter] [manageprojects.cookiecutter_context.cookiecutter]

View file

@ -71,9 +71,9 @@ build==1.0.3 \
--hash=sha256:538aab1b64f9828977f84bc63ae570b060a8ed1be419e7870b8b4fc5e6ea553b \ --hash=sha256:538aab1b64f9828977f84bc63ae570b060a8ed1be419e7870b8b4fc5e6ea553b \
--hash=sha256:589bf99a67df7c9cf07ec0ac0e5e2ea5d4b37ac63301c4986d1acb126aa83f8f --hash=sha256:589bf99a67df7c9cf07ec0ac0e5e2ea5d4b37ac63301c4986d1acb126aa83f8f
# via pip-tools # via pip-tools
bx-django-utils==67 \ bx-django-utils==69 \
--hash=sha256:8740fdaf98ed68a8ddb3af025d9b4f87c99101405898ddca86810b0c384b215a \ --hash=sha256:39e96b8ad47bcf36d6713e4e42c8d09deb21e413160dc2944f17b7d2e2244713 \
--hash=sha256:aca0ae5c91a62e4f594172b8c43468c701516f99ae50d99412d5299ba375df03 --hash=sha256:59b806aa36b50184f14bd0f7a61fb66c478fa231a44f92472360ce0cf1616013
# via # via
# django-for-runners # django-for-runners
# for-runners-ynh (pyproject.toml) # for-runners-ynh (pyproject.toml)
@ -89,9 +89,9 @@ cachetools==5.3.2 \
--hash=sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2 \ --hash=sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2 \
--hash=sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1 --hash=sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1
# via tox # via tox
certifi==2023.7.22 \ certifi==2023.11.17 \
--hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ --hash=sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1 \
--hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 --hash=sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474
# via requests # via requests
cffi==1.16.0 \ cffi==1.16.0 \
--hash=sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc \ --hash=sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc \
@ -324,11 +324,11 @@ contourpy==1.2.0 \
--hash=sha256:dd10c26b4eadae44783c45ad6655220426f971c61d9b239e6f7b16d5cdaaa727 \ --hash=sha256:dd10c26b4eadae44783c45ad6655220426f971c61d9b239e6f7b16d5cdaaa727 \
--hash=sha256:ebeac59e9e1eb4b84940d076d9f9a6cec0064e241818bcb6e32124cc5c3e377a --hash=sha256:ebeac59e9e1eb4b84940d076d9f9a6cec0064e241818bcb6e32124cc5c3e377a
# via matplotlib # via matplotlib
cookiecutter==2.4.0 \ cookiecutter==2.5.0 \
--hash=sha256:6d1494e66a784f23324df9d593f3e43af3db4f4b926b9e49e6ff060169fc042a \ --hash=sha256:8aa2f12ed11bc05628651e9dc4353a10571dd9908aaaaeec959a2b9ea465a5d2 \
--hash=sha256:8344663028abc08ec09b912e663636a97e1775bffe973425ec0107431acd390e --hash=sha256:e61e9034748e3f41b8bd2c11f00d030784b48711c4d5c42363c50989a65331ec
# via manageprojects # via manageprojects
coverage[toml]==7.3.2 \ coverage==7.3.2 \
--hash=sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1 \ --hash=sha256:0cbf38419fb1a347aaf63481c00f0bdc86889d9fbf3f25109cf96c26b403fda1 \
--hash=sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63 \ --hash=sha256:12d15ab5833a997716d76f2ac1e4b4d536814fc213c85ca72756c19e5a6b3d63 \
--hash=sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9 \ --hash=sha256:149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9 \
@ -381,9 +381,7 @@ coverage[toml]==7.3.2 \
--hash=sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738 \ --hash=sha256:f94b734214ea6a36fe16e96a70d941af80ff3bfd716c141300d95ebc85339738 \
--hash=sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a \ --hash=sha256:fa28e909776dc69efb6ed975a63691bc8172b64ff357e663a1bb06ff3c9b589a \
--hash=sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4 --hash=sha256:fe494faa90ce6381770746077243231e0b83ff3f17069d748f645617cefe19d4
# via # via for-runners-ynh (pyproject.toml)
# for-runners-ynh (pyproject.toml)
# pytest-cov
cryptography==41.0.5 \ cryptography==41.0.5 \
--hash=sha256:0c327cac00f082013c7c9fb6c46b7cc9fa3c288ca702c74773968173bda421bf \ --hash=sha256:0c327cac00f082013c7c9fb6c46b7cc9fa3c288ca702c74773968173bda421bf \
--hash=sha256:0d2a6a598847c46e3e321a7aef8af1436f11c27f1254933746304ff014664d84 \ --hash=sha256:0d2a6a598847c46e3e321a7aef8af1436f11c27f1254933746304ff014664d84 \
@ -469,9 +467,9 @@ django-for-runners==0.17.4 \
--hash=sha256:ceecf3ed00e372cb012e1635fb6388675ecf92e2125c6782a4c41fd5b4c3d96a \ --hash=sha256:ceecf3ed00e372cb012e1635fb6388675ecf92e2125c6782a4c41fd5b4c3d96a \
--hash=sha256:fbf2498ddac8a18b241f8b05a1d03288984a11714009d1312cf17b48517f08de --hash=sha256:fbf2498ddac8a18b241f8b05a1d03288984a11714009d1312cf17b48517f08de
# via for-runners-ynh (pyproject.toml) # via for-runners-ynh (pyproject.toml)
django-import-export==3.3.2 \ django-import-export==3.3.3 \
--hash=sha256:9a5c7c191014e4defb01573ee94864b60724a203f1b8a7e5e67a03f06b27b62d \ --hash=sha256:2c1b16e1cf2ea5f62a165d8867e7c6dcff25673ab7201fd18aaf67c9ee90367e \
--hash=sha256:d13e7508190f46442280bd7d04efcf49af6521350a70a6f9e06447ef28d6a41d --hash=sha256:78973202e93897326ab0411d64eaf89b72779fcb21ee9e5f64f3fb96571a5978
# via django-for-runners # via django-for-runners
django-processinfo==1.1.0 \ django-processinfo==1.1.0 \
--hash=sha256:c7d1fe2203655925294c860878509fe2a6eb1a5390a170c848023e4619b903da \ --hash=sha256:c7d1fe2203655925294c860878509fe2a6eb1a5390a170c848023e4619b903da \
@ -513,12 +511,6 @@ et-xmlfile==1.1.0 \
--hash=sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c \ --hash=sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c \
--hash=sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada --hash=sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada
# via openpyxl # via openpyxl
exceptiongroup==1.1.3 \
--hash=sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9 \
--hash=sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3
# via
# for-runners-ynh (pyproject.toml)
# pytest
filelock==3.13.1 \ filelock==3.13.1 \
--hash=sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e \ --hash=sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e \
--hash=sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c --hash=sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c
@ -535,57 +527,57 @@ flynt==0.77 \
--hash=sha256:2863ac8ec19d6ec8d29e760546e6ced644baf6dff3c7cdc77e03abbd29b80f14 \ --hash=sha256:2863ac8ec19d6ec8d29e760546e6ced644baf6dff3c7cdc77e03abbd29b80f14 \
--hash=sha256:2bd1b37043ad88a3f3c3c34a76fc0b64d24e5f03d36ea6b48cb69cc642bff17e --hash=sha256:2bd1b37043ad88a3f3c3c34a76fc0b64d24e5f03d36ea6b48cb69cc642bff17e
# via darker # via darker
fonttools==4.44.0 \ fonttools==4.45.1 \
--hash=sha256:05d7c4d2c95b9490e669f3cb83918799bf1c838619ac6d3bad9ea017cfc63f2e \ --hash=sha256:03ed3bda541e86725f6b4e1b94213f13ed1ae51a5a1f167028534cedea38c010 \
--hash=sha256:0f412954275e594f7a51c16f3b3edd850acb0d842fefc33856b63a17e18499a5 \ --hash=sha256:0dc7617d96b1e668eea9250e1c1fe62d0c78c3f69573ce7e3332cc40e6d84356 \
--hash=sha256:22ea8aa7b3712450b42b044702bd3a64fd118006bad09a6f94bd1b227088492e \ --hash=sha256:105099968b58a5b4cef6f3eb409db8ea8578b302a9d05e23fecba1b8b0177b5f \
--hash=sha256:2db63941fee3122e31a21dd0f5b2138ce9906b661a85b63622421d3654a74ae2 \ --hash=sha256:1b9e9ad2bcded9a1431afaa57c8d3c39143ac1f050862d66bddd863c515464a2 \
--hash=sha256:2e91e19b583961979e2e5a701269d3cfc07418963bee717f8160b0a24332826b \ --hash=sha256:1f53a19dcdd5737440839b8394eeebb35da9ec8109f7926cb6456639b5b58e47 \
--hash=sha256:31b38528f25bc662401e6ffae14b3eb7f1e820892fd80369a37155e3b636a2f4 \ --hash=sha256:21e96b99878348c74aa58059b8578d7586f9519cbcdadacf56486737038aa043 \
--hash=sha256:3d29509f6e05e8d725db59c2d8c076223d793e4e35773040be6632a0349f2f97 \ --hash=sha256:2c980d60cd6ec1376206fe55013d166e5627ad0b149b5c81e74eaa913ab6134f \
--hash=sha256:46c79af80a835410874683b5779b6c1ec1d5a285e11c45b5193e79dd691eb111 \ --hash=sha256:316cec50581e844c3ab69d7c82455b54c7cf18236b2f09e722faf665fbfcac58 \
--hash=sha256:4e90dd81b6e0d97ebfe52c0d12a17a9ef7f305d6bfbb93081265057d6092f252 \ --hash=sha256:37cd1ced6efb3dd6fe82e9f9bf92fd74ac58a5aefc284045f59ecd517a5fb9ab \
--hash=sha256:50d25893885e80a5955186791eed5579f1e75921751539cc1dc3ffd1160b48cf \ --hash=sha256:392d0e3cc23daee910193625f7cf1b387aff9dd5b6f1a5f4a925680acb6dcbc2 \
--hash=sha256:518a945dbfe337744bfff31423c1430303b8813c5275dffb0f2577f0734a1189 \ --hash=sha256:3bdd7dfca8f6c9f4779384064027e8477ad6a037d6a327b09381f43e0247c6f3 \
--hash=sha256:54efed22b2799a85475e6840e907c402ba49892c614565dc770aa97a53621b2b \ --hash=sha256:43a3d267334109ff849c37cf3629476b5feb392ef1d2e464a167b83de8cd599c \
--hash=sha256:58af428746fa73a2edcbf26aff33ac4ef3c11c8d75bb200eaea2f7e888d2de4e \ --hash=sha256:45fa321c458ea29224067700954ec44493ae869b47e7c5485a350a149a19fb53 \
--hash=sha256:59b6ad83cce067d10f4790c037a5904424f45bebb5e7be2eb2db90402f288267 \ --hash=sha256:46eabddec12066829b8a1efe45ae552ba2f1796981ecf538d5f68284c354c589 \
--hash=sha256:63a3112f753baef8c6ac2f5f574bb9ac8001b86c8c0c0380039db47a7f512d20 \ --hash=sha256:4b9544b1346d99848ac0e9b05b5d45ee703d7562fc4c9c48cf4b781de9632e57 \
--hash=sha256:66bc6efd829382f7a7e6cf33c2fb32b13edc8a239eb15f32acbf197dce7a0165 \ --hash=sha256:4ba17822a6681d06849078daaf6e03eccc9f467efe7c4c60280e28a78e8e5df9 \
--hash=sha256:6999e80a125b0cd8e068d0210b63323f17338038c2ecd2e11b9209ec430fe7f2 \ --hash=sha256:5a17706b9cc24b27721613fe5773d93331ab7f0ecaca9955aead89c6b843d3a7 \
--hash=sha256:6d16d9634ff1e5cea2cf4a8cbda9026f766e4b5f30b48f8180f0e99133d3abfc \ --hash=sha256:5cbf02cda8465b69769d07385f5d11e7bba19954e7787792f46fe679ec755ebb \
--hash=sha256:84f308b7a8d28208d54315d11d35f9888d6d607673dd4d42d60b463682ee0400 \ --hash=sha256:6e441286d55fe7ec7c4fb36812bf914924813776ff514b744b510680fc2733f2 \
--hash=sha256:9ee8692e23028564c13d924004495f284df8ac016a19f17a87251210e1f1f928 \ --hash=sha256:6eb2c54f7a07c92108daabcf02caf31df97825738db02a28270633946bcda4d0 \
--hash=sha256:a3da036b016c975c2d8c69005bdc4d5d16266f948a7fab950244e0f58301996a \ --hash=sha256:777ba42b94a27bb7fb2b4082522fccfd345667c32a56011e1c3e105979af5b79 \
--hash=sha256:a7aec7f5d14dfcd71fb3ebc299b3f000c21fdc4043079101777ed2042ba5b7c5 \ --hash=sha256:794de93e83297db7b4943f2431e206d8b1ea69cb3ae14638a49cc50332bf0db8 \
--hash=sha256:a8a1fa9a718de0bc026979c93e1e9b55c5efde60d76f91561fd713387573817d \ --hash=sha256:800e354e0c3afaeb8d9552769773d02f228e98c37b8cb03041157c3d0687cffc \
--hash=sha256:a8b99713d3a0d0e876b6aecfaada5e7dc9fe979fcd90ef9fa0ba1d9b9aed03f2 \ --hash=sha256:847f3f49dd3423e5a678c098e2ba92c7f4955d4aab3044f6a507b0bb0ecb07e0 \
--hash=sha256:b63da598d9cbc52e2381f922da0e94d60c0429f92207bd3fb04d112fc82ea7cb \ --hash=sha256:8717db3e4895e4820ade64ea379187738827ee60748223cb0438ef044ee208c6 \
--hash=sha256:b6e6aa2d066f8dafd06d8d0799b4944b5d5a1f015dd52ac01bdf2895ebe169a0 \ --hash=sha256:8b07b857d4f9de3199a8c3d1b1bf2078c0f37447891ca1a8d9234106b9a27aff \
--hash=sha256:b99fe8ef4093f672d00841569d2d05691e50334d79f4d9c15c1265d76d5580d2 \ --hash=sha256:8e1aefc2bf3c43e0f33f995f828a7bbeff4adc9393a7760b11456dbcf14388f6 \
--hash=sha256:b9beb0fa6ff3ea808ad4a6962d68ac0f140ddab080957b20d9e268e4d67fb335 \ --hash=sha256:a12dee6523c02ca78aeedd0a5e12bfa9b7b29896350edd5241542897b072ae23 \
--hash=sha256:b9eab7f9837fdaa2a10a524fbcc2ec24bf60637c044b6e4a59c3f835b90f0fae \ --hash=sha256:a3c11d9687479f01eddef729aa737abcdea0a44fdaffb62a930a18892f186c9b \
--hash=sha256:bca49da868e8bde569ef36f0cc1b6de21d56bf9c3be185c503b629c19a185287 \ --hash=sha256:b6de2f0fcd3302fb82f94801002cb473959e998c14c24ec28234adb674aed345 \
--hash=sha256:c05064f95aacdfc06f21e55096c964b2228d942b8675fa26995a2551f6329d2d \ --hash=sha256:ba299f1fbaa2a1e33210aaaf6fa816d4059e4d3cfe2ae9871368d4ab548c1c6a \
--hash=sha256:c2de1fb18198acd400c45ffe2aef5420c8d55fde903e91cba705596099550f3b \ --hash=sha256:ba6c23591427844dfb0a13658f1718489de75de6a46b64234584c0d17573162d \
--hash=sha256:c794de4086f06ae609b71ac944ec7deb09f34ecf73316fddc041087dd24bba39 \ --hash=sha256:c4f4a5870e3b56788fb196da8cf30d0dfd51a76dc3b907861d018165f76ae4c2 \
--hash=sha256:d4fa4f4bc8fd86579b8cdbe5e948f35d82c0eda0091c399d009b2a5a6b61c040 \ --hash=sha256:cb472905da3049960e80fc1cf808231880d79727a8410e156bf3e5063a1c574f \
--hash=sha256:dab3d00d27b1a79ae4d4a240e8ceea8af0ff049fd45f05adb4f860d93744110d \ --hash=sha256:cebcddbe9351b67166292b4f71ffdbfcce01ba4b07d4267824eb46b277aeb19a \
--hash=sha256:dbac86d83d96099890e731cc2af97976ff2c98f4ba432fccde657c5653a32f1c \ --hash=sha256:e2277cba9f0b525e30de2a9ad3cb4219aa4bc697230c1645666b0deee9f914f0 \
--hash=sha256:df40daa6c03b98652ffe8110ae014fe695437f6e1cb5a07e16ea37f40e73ac86 \ --hash=sha256:e29d5f298d616a93a4c5963682dc6cc8cc09f6d89cad2c29019fc5fb3b4d9472 \
--hash=sha256:e1cd1c6bb097e774d68402499ff66185190baaa2629ae2f18515a2c50b93db0c \ --hash=sha256:e3d24248221bd7151dfff0d88b1b5da02dccd7134bd576ce8888199827bbaa19 \
--hash=sha256:e8ff7d19a6804bfd561cfcec9b4200dd1788e28f7de4be70189801530c47c1b3 \ --hash=sha256:e50f794d09df0675da8d9dbd7c66bfcab2f74a708343aabcad41936d26556891 \
--hash=sha256:eb01c49c8aa035d5346f46630209923d4927ed15c2493db38d31da9f811eb70d \ --hash=sha256:f22eb69996a0bd49f76bdefb30be54ce8dbb89a0d1246874d610f05c2aa2e69e \
--hash=sha256:f53526668beccdb3409c6055a4ffe50987a7f05af6436fa55d61f5e7bd450219 \ --hash=sha256:fb36e5f40191274a95938b40c0a1fa7f895e36935aea8709e1d6deff0b2d0d4f \
--hash=sha256:f611c97678604e302b725f71626edea113a5745a7fb557c958b39edb6add87d5 --hash=sha256:ff6a698bdd435d24c379f6e8a54908cd9bb7dda23719084d56bf8c87709bf3bd
# via matplotlib # via matplotlib
geographiclib==2.0 \ geographiclib==2.0 \
--hash=sha256:6b7225248e45ff7edcee32becc4e0a1504c606ac5ee163a5656d482e0cd38734 \ --hash=sha256:6b7225248e45ff7edcee32becc4e0a1504c606ac5ee163a5656d482e0cd38734 \
--hash=sha256:f7f41c85dc3e1c2d3d935ec86660dc3b2c848c83e17f9a9e51ba9d5146a15859 --hash=sha256:f7f41c85dc3e1c2d3d935ec86660dc3b2c848c83e17f9a9e51ba9d5146a15859
# via geopy # via geopy
geopy==2.4.0 \ geopy==2.4.1 \
--hash=sha256:a59392bf17adb486b25dbdd71fbed27733bdf24a2dac588047a619de56695e36 \ --hash=sha256:50283d8e7ad07d89be5cb027338c6365a32044df3ae2556ad3f52f4840b3d0d1 \
--hash=sha256:d2639a46d0ce4c091e9688b750ba94348a14b898a1e55c68f4b4a07e7d1afa20 --hash=sha256:ae8b4bc5c1131820f4d75fce9d4aaaca0c85189b3aa5d64c3dcaf5e3b7b882a7
# via django-for-runners # via django-for-runners
gpxpy==1.6.1 \ gpxpy==1.6.1 \
--hash=sha256:473ff2fa17af6913a9879599cb6fe9c7a30fa1698898feff21a825447ee52fba \ --hash=sha256:473ff2fa17af6913a9879599cb6fe9c7a30fa1698898feff21a825447ee52fba \
@ -601,9 +593,9 @@ icdiff==2.0.7 \
--hash=sha256:f05d1b3623223dd1c70f7848da7d699de3d9a2550b902a8234d9026292fb5762 \ --hash=sha256:f05d1b3623223dd1c70f7848da7d699de3d9a2550b902a8234d9026292fb5762 \
--hash=sha256:f79a318891adbf59a45e3a7694f5e1f18c5407065264637072ac8363b759866f --hash=sha256:f79a318891adbf59a45e3a7694f5e1f18c5407065264637072ac8363b759866f
# via django-tools # via django-tools
idna==3.4 \ idna==3.6 \
--hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ --hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \
--hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 --hash=sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f
# via requests # via requests
importlib-metadata==6.8.0 \ importlib-metadata==6.8.0 \
--hash=sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb \ --hash=sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb \
@ -615,10 +607,6 @@ importlib-resources==6.1.1 \
--hash=sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a \ --hash=sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a \
--hash=sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6 --hash=sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6
# via django-for-runners # via django-for-runners
iniconfig==2.0.0 \
--hash=sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3 \
--hash=sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374
# via pytest
isort==5.12.0 \ isort==5.12.0 \
--hash=sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504 \ --hash=sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504 \
--hash=sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6 --hash=sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6
@ -637,9 +625,9 @@ jinja2==3.1.2 \
--hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \
--hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61
# via cookiecutter # via cookiecutter
keyring==24.2.0 \ keyring==24.3.0 \
--hash=sha256:4901caaf597bfd3bbd78c9a0c7c4c29fcd8310dab2cffefe749e916b6527acd6 \ --hash=sha256:4446d35d636e6a10b8bce7caa66913dd9eca5fd222ca03a3d42c38608ac30836 \
--hash=sha256:ca0746a19ec421219f4d713f848fa297a661a8a8c1504867e55bfb5e09091509 --hash=sha256:e730ecffd309658a08ee82535a3b5ec4b4c8669a9be11efb66249d8e0aeb9a25
# via twine # via twine
kiwisolver==1.4.5 \ kiwisolver==1.4.5 \
--hash=sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf \ --hash=sha256:00bd361b903dc4bbf4eb165f24d1acbee754fce22ded24c3d56eec268658a5cf \
@ -914,35 +902,35 @@ markupsafe==2.1.3 \
--hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 \ --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 \
--hash=sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11 --hash=sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11
# via jinja2 # via jinja2
matplotlib==3.8.1 \ matplotlib==3.8.2 \
--hash=sha256:044df81c1f6f3a8e52d70c4cfcb44e77ea9632a10929932870dfaa90de94365d \ --hash=sha256:01a978b871b881ee76017152f1f1a0cbf6bd5f7b8ff8c96df0df1bd57d8755a1 \
--hash=sha256:0d24c47a1bb47e392fbcd26fe322e4ff3431653ac1e8718e4e147d450ae97a44 \ --hash=sha256:03f9d160a29e0b65c0790bb07f4f45d6a181b1ac33eb1bb0dd225986450148f0 \
--hash=sha256:1fcb49b6baf0375281979cbf26695ec10bd1cada1e311893e89533b3b70143e7 \ --hash=sha256:091275d18d942cf1ee9609c830a1bc36610607d8223b1b981c37d5c9fc3e46a4 \
--hash=sha256:20a0fdfd3ee836179047f3782be060057b878ad37f5abe29edf006a1ff3ecd73 \ --hash=sha256:09796f89fb71a0c0e1e2f4bdaf63fb2cefc84446bb963ecdeb40dfee7dfa98c7 \
--hash=sha256:27502d2452208ae784c19504644f09f83742809143bbeae147617640930aa344 \ --hash=sha256:0f4fc5d72b75e2c18e55eb32292659cf731d9d5b312a6eb036506304f4675630 \
--hash=sha256:2afe7d2f8c9e35e94fbcfcfd9b28f29cb32f0a9068cba469cf907428379c8db9 \ --hash=sha256:172f4d0fbac3383d39164c6caafd3255ce6fa58f08fc392513a0b1d3b89c4f89 \
--hash=sha256:43a9d40feb63c9e31a0b8b069dcbd74a912f59bdc0095d187126694cd26977e4 \ --hash=sha256:1b0f3b8ea0e99e233a4bcc44590f01604840d833c280ebb8fe5554fd3e6cfe8d \
--hash=sha256:43cf368a4a1d8cbc426944806e5e183cead746647a64d2cdb786441546235967 \ --hash=sha256:3773002da767f0a9323ba1a9b9b5d00d6257dbd2a93107233167cfb581f64717 \
--hash=sha256:608ea2951838d391e45dec2e644888db6899c752d3c29e157af9dcefb3d7d8d5 \ --hash=sha256:46a569130ff53798ea5f50afce7406e91fdc471ca1e0e26ba976a8c734c9427a \
--hash=sha256:7658b7073c1d6a2922ecc0ed41602410fae88586cb8a54f7a2063d537b6beaf7 \ --hash=sha256:4c318c1e95e2f5926fba326f68177dee364aa791d6df022ceb91b8221bd0a627 \
--hash=sha256:7f99d07c0e753717775be7be39ab383453b4d8b629c9fa174596b970c6555890 \ --hash=sha256:4e208f46cf6576a7624195aa047cb344a7f802e113bb1a06cfd4bee431de5e31 \
--hash=sha256:82ec95b02e894561c21e066bd0c716e4b410df141ce9441aa5af6cd937e4ade2 \ --hash=sha256:533b0e3b0c6768eef8cbe4b583731ce25a91ab54a22f830db2b031e83cca9213 \
--hash=sha256:afb72822ae410d62aa1a2920c6563cb5680de9078358f0e9474396c6c3e06be2 \ --hash=sha256:5864bdd7da445e4e5e011b199bb67168cdad10b501750367c496420f2ad00843 \
--hash=sha256:bf6889643d4560fcc56f9f0941f078e4df0d72a6c3e4ca548841fc13c5642664 \ --hash=sha256:5ba9cbd8ac6cf422f3102622b20f8552d601bf8837e49a3afed188d560152788 \
--hash=sha256:c1b0ecaa0d1f4fe1e30f625a2347f0034a89a7d17c39efbb502e554d92ee2f61 \ --hash=sha256:6f9c6976748a25e8b9be51ea028df49b8e561eed7809146da7a47dbecebab367 \
--hash=sha256:c54c55457c7f5ea4dfdba0020004fc7667f5c10c8d9b8010d735345acc06c9b8 \ --hash=sha256:7c48d9e221b637c017232e3760ed30b4e8d5dfd081daf327e829bf2a72c731b4 \
--hash=sha256:ca84deaa38cb64b7dd160ca2046b45f7b5dbff2b0179642e1339fadc337446c9 \ --hash=sha256:830f00640c965c5b7f6bc32f0d4ce0c36dfe0379f7dd65b07a00c801713ec40a \
--hash=sha256:cd54bbf089953140905768ed4626d7223e1ad1d7e2a138410a9c4d3b865ccd80 \ --hash=sha256:9a5430836811b7652991939012f43d2808a2db9b64ee240387e8c43e2e5578c8 \
--hash=sha256:d921c0270647ab11c3ef283efaaa3d46fd005ba233bfb3aea75231cdf3656de8 \ --hash=sha256:aa11b3c6928a1e496c1a79917d51d4cd5d04f8a2e75f21df4949eeefdf697f4b \
--hash=sha256:e11ab864323fa73ac1b7849688d9671c47a2665242e899785b4db1a375b547e1 \ --hash=sha256:b78e4f2cedf303869b782071b55fdde5987fda3038e9d09e58c91cc261b5ad18 \
--hash=sha256:e17674ee127f78f26fea237e7f4d5cf910a8be82beb6260fedf358b88075b823 \ --hash=sha256:b9576723858a78751d5aacd2497b8aef29ffea6d1c95981505877f7ac28215c6 \
--hash=sha256:e3ad1759ad4a5245172c6d32b8ada603a6020d03211524c39d78d25c9a7dc0d2 \ --hash=sha256:bddfb1db89bfaa855912261c805bd0e10218923cc262b9159a49c29a7a1c1afa \
--hash=sha256:e3bb809b743653b5aab5d72ee45c8c937c28e147b0846b0826a54bece898608c \ --hash=sha256:c7d36c2209d9136cd8e02fab1c0ddc185ce79bc914c45054a9f514e44c787917 \
--hash=sha256:e5a504ff40f81d6233603475a45497a6dca37a873393fa20ae6f7dd6596ef72b \ --hash=sha256:d1095fecf99eeb7384dabad4bf44b965f929a5f6079654b681193edf7169ec20 \
--hash=sha256:ed3b29f54f6bbf3eaca4cbd23bc260155153ace63b7f597c474fa6fc6f386530 \ --hash=sha256:d7b1704a530395aaf73912be741c04d181f82ca78084fbd80bc737be04848331 \
--hash=sha256:f34b46dbb1db1f09bfa937cd5853e5f2af232caeeff509c3ab6e43fd33780eae \ --hash=sha256:d86593ccf546223eb75a39b44c32788e6f6440d13cfc4750c1c15d0fcb850b63 \
--hash=sha256:f55fb5ff02d999a100be28bf6ffe826e1867a54c7b465409685332c9dd48ffa5 \ --hash=sha256:deaed9ad4da0b1aea77fe0aa0cebb9ef611c70b3177be936a95e5d01fa05094f \
--hash=sha256:ff842e27bc6a80de08c40e0bfdce460bd08080e8a94af131162b6a1b8948f2cc --hash=sha256:ef8345b48e95cee45ff25192ed1f4857273117917a4dcd48e3905619bcd9c9b8
# via django-for-runners # via django-for-runners
mccabe==0.7.0 \ mccabe==0.7.0 \
--hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \
@ -956,34 +944,34 @@ more-itertools==10.1.0 \
--hash=sha256:626c369fa0eb37bac0291bce8259b332fd59ac792fa5497b59837309cd5b114a \ --hash=sha256:626c369fa0eb37bac0291bce8259b332fd59ac792fa5497b59837309cd5b114a \
--hash=sha256:64e0735fcfdc6f3464ea133afe8ea4483b1c5fe3a3d69852e6503b43a0b222e6 --hash=sha256:64e0735fcfdc6f3464ea133afe8ea4483b1c5fe3a3d69852e6503b43a0b222e6
# via jaraco-classes # via jaraco-classes
mypy==1.6.1 \ mypy==1.7.1 \
--hash=sha256:19f905bcfd9e167159b3d63ecd8cb5e696151c3e59a1742e79bc3bcb540c42c7 \ --hash=sha256:12cce78e329838d70a204293e7b29af9faa3ab14899aec397798a4b41be7f340 \
--hash=sha256:21a1ad938fee7d2d96ca666c77b7c494c3c5bd88dff792220e1afbebb2925b5e \ --hash=sha256:1484b8fa2c10adf4474f016e09d7a159602f3239075c7bf9f1627f5acf40ad49 \
--hash=sha256:40b1844d2e8b232ed92e50a4bd11c48d2daa351f9deee6c194b83bf03e418b0c \ --hash=sha256:204e0d6de5fd2317394a4eff62065614c4892d5a4d1a7ee55b765d7a3d9e3f82 \
--hash=sha256:41697773aa0bf53ff917aa077e2cde7aa50254f28750f9b88884acea38a16169 \ --hash=sha256:2643d145af5292ee956aa0a83c2ce1038a3bdb26e033dadeb2f7066fb0c9abce \
--hash=sha256:49ae115da099dcc0922a7a895c1eec82c1518109ea5c162ed50e3b3594c71208 \ --hash=sha256:2c6e4464ed5f01dc44dc9821caf67b60a4e5c3b04278286a85c067010653a0eb \
--hash=sha256:4c46b51de523817a0045b150ed11b56f9fff55f12b9edd0f3ed35b15a2809de0 \ --hash=sha256:2f7f6985d05a4e3ce8255396df363046c28bea790e40617654e91ed580ca7c51 \
--hash=sha256:4cbe68ef919c28ea561165206a2dcb68591c50f3bcf777932323bc208d949cf1 \ --hash=sha256:31902408f4bf54108bbfb2e35369877c01c95adc6192958684473658c322c8a5 \
--hash=sha256:4d01c00d09a0be62a4ca3f933e315455bde83f37f892ba4b08ce92f3cf44bcc1 \ --hash=sha256:40716d1f821b89838589e5b3106ebbc23636ffdef5abc31f7cd0266db936067e \
--hash=sha256:59a0d7d24dfb26729e0a068639a6ce3500e31d6655df8557156c51c1cb874ce7 \ --hash=sha256:4b901927f16224d0d143b925ce9a4e6b3a758010673eeded9b748f250cf4e8f7 \
--hash=sha256:68351911e85145f582b5aa6cd9ad666c8958bcae897a1bfda8f4940472463c45 \ --hash=sha256:4fc3d14ee80cd22367caaaf6e014494415bf440980a3045bf5045b525680ac33 \
--hash=sha256:7274b0c57737bd3476d2229c6389b2ec9eefeb090bbaf77777e9d6b1b5a9d143 \ --hash=sha256:5cf3f0c5ac72139797953bd50bc6c95ac13075e62dbfcc923571180bebb662e9 \
--hash=sha256:81af8adaa5e3099469e7623436881eff6b3b06db5ef75e6f5b6d4871263547e5 \ --hash=sha256:6dbdec441c60699288adf051f51a5d512b0d818526d1dcfff5a41f8cd8b4aaf1 \
--hash=sha256:82e469518d3e9a321912955cc702d418773a2fd1e91c651280a1bda10622f02f \ --hash=sha256:72cf32ce7dd3562373f78bd751f73c96cfb441de147cc2448a92c1a308bd0ca6 \
--hash=sha256:8b27958f8c76bed8edaa63da0739d76e4e9ad4ed325c814f9b3851425582a3cd \ --hash=sha256:75aa828610b67462ffe3057d4d8a4112105ed211596b750b53cbfe182f44777a \
--hash=sha256:8c223fa57cb154c7eab5156856c231c3f5eace1e0bed9b32a24696b7ba3c3245 \ --hash=sha256:75c4d2a6effd015786c87774e04331b6da863fc3fc4e8adfc3b40aa55ab516fe \
--hash=sha256:8f57e6b6927a49550da3d122f0cb983d400f843a8a82e65b3b380d3d7259468f \ --hash=sha256:78e25b2fd6cbb55ddfb8058417df193f0129cad5f4ee75d1502248e588d9e0d7 \
--hash=sha256:925cd6a3b7b55dfba252b7c4561892311c5358c6b5a601847015a1ad4eb7d332 \ --hash=sha256:84860e06ba363d9c0eeabd45ac0fde4b903ad7aa4f93cd8b648385a888e23200 \
--hash=sha256:a43ef1c8ddfdb9575691720b6352761f3f53d85f1b57d7745701041053deff30 \ --hash=sha256:8c5091ebd294f7628eb25ea554852a52058ac81472c921150e3a61cdd68f75a7 \
--hash=sha256:a8032e00ce71c3ceb93eeba63963b864bf635a18f6c0c12da6c13c450eedb183 \ --hash=sha256:944bdc21ebd620eafefc090cdf83158393ec2b1391578359776c00de00e8907a \
--hash=sha256:b96ae2c1279d1065413965c607712006205a9ac541895004a1e0d4f281f2ff9f \ --hash=sha256:9c7ac372232c928fff0645d85f273a726970c014749b924ce5710d7d89763a28 \
--hash=sha256:bb8ccb4724f7d8601938571bf3f24da0da791fe2db7be3d9e79849cb64e0ae85 \ --hash=sha256:d9b338c19fa2412f76e17525c1b4f2c687a55b156320acb588df79f2e6fa9fea \
--hash=sha256:bbaf4662e498c8c2e352da5f5bca5ab29d378895fa2d980630656178bd607c46 \ --hash=sha256:ee5d62d28b854eb61889cde4e1dbc10fbaa5560cb39780c3995f6737f7e82120 \
--hash=sha256:cfd13d47b29ed3bbaafaff7d8b21e90d827631afda134836962011acb5904b71 \ --hash=sha256:f2c2521a8e4d6d769e3234350ba7b65ff5d527137cdcde13ff4d99114b0c8e7d \
--hash=sha256:d4473c22cc296425bbbce7e9429588e76e05bc7342da359d6520b6427bf76660 \ --hash=sha256:f6efc9bd72258f89a3816e3a98c09d36f079c223aa345c659622f056b760ab42 \
--hash=sha256:d8fbb68711905f8912e5af474ca8b78d077447d8f3918997fecbf26943ff3cbb \ --hash=sha256:f7c5d642db47376a0cc130f0de6d055056e010debdaf0707cd2b0fc7e7ef30ea \
--hash=sha256:e5012e5cc2ac628177eaac0e83d622b2dd499e28253d4107a08ecc59ede3fc2c \ --hash=sha256:fcb6d9afb1b6208b4c712af0dafdc650f518836065df0d4fb1d800f5d6773db2 \
--hash=sha256:eb4f18589d196a4cbe5290b435d135dee96567e07c2b2d43b5c4621b6501531a --hash=sha256:fcd2572dd4519e8a6642b733cd3a8cfc1ef94bafd0c1ceed9c94fe736cb65b6a
# via # via
# for-runners-ynh (pyproject.toml) # for-runners-ynh (pyproject.toml)
# manageprojects # manageprojects
@ -1011,39 +999,43 @@ nh3==0.2.14 \
--hash=sha256:e8986f1dd3221d1e741fda0a12eaa4a273f1d80a35e31a1ffe579e7c621d069e \ --hash=sha256:e8986f1dd3221d1e741fda0a12eaa4a273f1d80a35e31a1ffe579e7c621d069e \
--hash=sha256:f99212a81c62b5f22f9e7c3e347aa00491114a5647e1f13bbebd79c3e5f08d75 --hash=sha256:f99212a81c62b5f22f9e7c3e347aa00491114a5647e1f13bbebd79c3e5f08d75
# via readme-renderer # via readme-renderer
numpy==1.26.1 \ numpy==1.26.2 \
--hash=sha256:06934e1a22c54636a059215d6da99e23286424f316fddd979f5071093b648668 \ --hash=sha256:06fa1ed84aa60ea6ef9f91ba57b5ed963c3729534e6e54055fc151fad0423f0a \
--hash=sha256:1c59c046c31a43310ad0199d6299e59f57a289e22f0f36951ced1c9eac3665b9 \ --hash=sha256:174a8880739c16c925799c018f3f55b8130c1f7c8e75ab0a6fa9d41cab092fd6 \
--hash=sha256:1d1bd82d539607951cac963388534da3b7ea0e18b149a53cf883d8f699178c0f \ --hash=sha256:1a13860fdcd95de7cf58bd6f8bc5a5ef81c0b0625eb2c9a783948847abbef2c2 \
--hash=sha256:1e11668d6f756ca5ef534b5be8653d16c5352cbb210a5c2a79ff288e937010d5 \ --hash=sha256:1cc3d5029a30fb5f06704ad6b23b35e11309491c999838c31f124fee32107c79 \
--hash=sha256:3649d566e2fc067597125428db15d60eb42a4e0897fc48d28cb75dc2e0454e53 \ --hash=sha256:22f8fc02fdbc829e7a8c578dd8d2e15a9074b630d4da29cda483337e300e3ee9 \
--hash=sha256:59227c981d43425ca5e5c01094d59eb14e8772ce6975d4b2fc1e106a833d5ae2 \ --hash=sha256:26c9d33f8e8b846d5a65dd068c14e04018d05533b348d9eaeef6c1bd787f9919 \
--hash=sha256:6081aed64714a18c72b168a9276095ef9155dd7888b9e74b5987808f0dd0a974 \ --hash=sha256:2b3fca8a5b00184828d12b073af4d0fc5fdd94b1632c2477526f6bd7842d700d \
--hash=sha256:6965888d65d2848e8768824ca8288db0a81263c1efccec881cb35a0d805fcd2f \ --hash=sha256:2beef57fb031dcc0dc8fa4fe297a742027b954949cabb52a2a376c144e5e6060 \
--hash=sha256:76ff661a867d9272cd2a99eed002470f46dbe0943a5ffd140f49be84f68ffc42 \ --hash=sha256:36340109af8da8805d8851ef1d74761b3b88e81a9bd80b290bbfed61bd2b4f75 \
--hash=sha256:78ca54b2f9daffa5f323f34cdf21e1d9779a54073f0018a3094ab907938331a2 \ --hash=sha256:3703fc9258a4a122d17043e57b35e5ef1c5a5837c3db8be396c82e04c1cf9b0f \
--hash=sha256:82e871307a6331b5f09efda3c22e03c095d957f04bf6bc1804f30048d0e5e7af \ --hash=sha256:3ced40d4e9e18242f70dd02d739e44698df3dcb010d31f495ff00a31ef6014fe \
--hash=sha256:8ab9163ca8aeb7fd32fe93866490654d2f7dda4e61bc6297bf72ce07fdc02f67 \ --hash=sha256:4a06263321dfd3598cacb252f51e521a8cb4b6df471bb12a7ee5cbab20ea9167 \
--hash=sha256:9696aa2e35cc41e398a6d42d147cf326f8f9d81befcb399bc1ed7ffea339b64e \ --hash=sha256:4eb8df4bf8d3d90d091e0146f6c28492b0be84da3e409ebef54349f71ed271ef \
--hash=sha256:97e5d6a9f0702c2863aaabf19f0d1b6c2628fbe476438ce0b5ce06e83085064c \ --hash=sha256:5d5244aabd6ed7f312268b9247be47343a654ebea52a60f002dc70c769048e75 \
--hash=sha256:9f42284ebf91bdf32fafac29d29d4c07e5e9d1af862ea73686581773ef9e73a7 \ --hash=sha256:64308ebc366a8ed63fd0bf426b6a9468060962f1a4339ab1074c228fa6ade8e3 \
--hash=sha256:a03fb25610ef560a6201ff06df4f8105292ba56e7cdd196ea350d123fc32e24e \ --hash=sha256:6a3cdb4d9c70e6b8c0814239ead47da00934666f668426fc6e94cce869e13fd7 \
--hash=sha256:a5b411040beead47a228bde3b2241100454a6abde9df139ed087bd73fc0a4908 \ --hash=sha256:854ab91a2906ef29dc3925a064fcd365c7b4da743f84b123002f6139bcb3f8a7 \
--hash=sha256:af22f3d8e228d84d1c0c44c1fbdeb80f97a15a0abe4f080960393a00db733b66 \ --hash=sha256:94cc3c222bb9fb5a12e334d0479b97bb2df446fbe622b470928f5284ffca3f8d \
--hash=sha256:afd5ced4e5a96dac6725daeb5242a35494243f2239244fad10a90ce58b071d24 \ --hash=sha256:96ca5482c3dbdd051bcd1fce8034603d6ebfc125a7bd59f55b40d8f5d246832b \
--hash=sha256:b9d45d1dbb9de84894cc50efece5b09939752a2d75aab3a8b0cef6f3a35ecd6b \ --hash=sha256:a2bbc29fcb1771cd7b7425f98b05307776a6baf43035d3b80c4b0f29e9545186 \
--hash=sha256:bb894accfd16b867d8643fc2ba6c8617c78ba2828051e9a69511644ce86ce83e \ --hash=sha256:a4cd6ed4a339c21f1d1b0fdf13426cb3b284555c27ac2f156dfdaaa7e16bfab0 \
--hash=sha256:c8c6c72d4a9f831f328efb1312642a1cafafaa88981d9ab76368d50d07d93cbe \ --hash=sha256:aa18428111fb9a591d7a9cc1b48150097ba6a7e8299fb56bdf574df650e7d1f1 \
--hash=sha256:cd7837b2b734ca72959a1caf3309457a318c934abef7a43a14bb984e574bbb9a \ --hash=sha256:aa317b2325f7aa0a9471663e6093c210cb2ae9c0ad824732b307d2c51983d5b6 \
--hash=sha256:cdd9ec98f0063d93baeb01aad472a1a0840dee302842a2746a7a8e92968f9575 \ --hash=sha256:b04f5dc6b3efdaab541f7857351aac359e6ae3c126e2edb376929bd3b7f92d7e \
--hash=sha256:d1cfc92db6af1fd37a7bb58e55c8383b4aa1ba23d012bdbba26b4bcca45ac297 \ --hash=sha256:b272d4cecc32c9e19911891446b72e986157e6a1809b7b56518b4f3755267523 \
--hash=sha256:d1d2c6b7dd618c41e202c59c1413ef9b2c8e8a15f5039e344af64195459e3104 \ --hash=sha256:b361d369fc7e5e1714cf827b731ca32bff8d411212fccd29ad98ad622449cc36 \
--hash=sha256:d2984cb6caaf05294b8466966627e80bf6c7afd273279077679cb010acb0e5ab \ --hash=sha256:b96e7b9c624ef3ae2ae0e04fa9b460f6b9f17ad8b4bec6d7756510f1f6c0c841 \
--hash=sha256:d58e8c51a7cf43090d124d5073bc29ab2755822181fcad978b12e144e5e5a4b3 \ --hash=sha256:baf8aab04a2c0e859da118f0b38617e5ee65d75b83795055fb66c0d5e9e9b818 \
--hash=sha256:d78f269e0c4fd365fc2992c00353e4530d274ba68f15e968d8bc3c69ce5f5244 \ --hash=sha256:bcc008217145b3d77abd3e4d5ef586e3bdfba8fe17940769f8aa09b99e856c00 \
--hash=sha256:dcfaf015b79d1f9f9c9fd0731a907407dc3e45769262d657d754c3a028586124 \ --hash=sha256:bd3f0091e845164a20bd5a326860c840fe2af79fa12e0469a12768a3ec578d80 \
--hash=sha256:e44ccb93f30c75dfc0c3aa3ce38f33486a75ec9abadabd4e59f114994a9c4617 \ --hash=sha256:cc392fdcbd21d4be6ae1bb4475a03ce3b025cd49a9be5345d76d7585aea69440 \
--hash=sha256:e509cbc488c735b43b5ffea175235cec24bbc57b227ef1acc691725beb230d1c --hash=sha256:d73a3abcac238250091b11caef9ad12413dab01669511779bc9b29261dd50210 \
--hash=sha256:f43740ab089277d403aa07567be138fc2a89d4d9892d113b76153e0e412409f8 \
--hash=sha256:f65738447676ab5777f11e6bbbdb8ce11b785e105f690bc45966574816b6d3ea \
--hash=sha256:f79b231bf5c16b1f39c7f4875e1ded36abee1591e98742b05d8a0fb55d8a3eec \
--hash=sha256:fe6b44fb8fcdf7eda4ef4461b97b3f63c466b27ab151bec2366db8b197387841
# via # via
# contourpy # contourpy
# matplotlib # matplotlib
@ -1065,7 +1057,6 @@ packaging==23.2 \
# gunicorn # gunicorn
# matplotlib # matplotlib
# pyproject-api # pyproject-api
# pytest
# safety # safety
# tox # tox
pathspec==0.11.2 \ pathspec==0.11.2 \
@ -1136,9 +1127,9 @@ pkginfo==1.9.6 \
--hash=sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546 \ --hash=sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546 \
--hash=sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046 --hash=sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046
# via twine # via twine
platformdirs==3.11.0 \ platformdirs==4.0.0 \
--hash=sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3 \ --hash=sha256:118c954d7e949b35437270383a3f2531e99dd93cf7ce4dc8340d3356d30f173b \
--hash=sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e --hash=sha256:cb633b2bcf10c51af60beb0ab06d2f1d69064b43abf4c185ca6b28865f3f9731
# via # via
# black # black
# tox # tox
@ -1146,9 +1137,7 @@ platformdirs==3.11.0 \
pluggy==1.3.0 \ pluggy==1.3.0 \
--hash=sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12 \ --hash=sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12 \
--hash=sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7 --hash=sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7
# via # via tox
# pytest
# tox
pprintpp==0.4.0 \ pprintpp==0.4.0 \
--hash=sha256:b6b4dcdd0c0c0d75e4d7b2f21a9e933e5b2ce62b26e1a54537f9651ae5a5c01d \ --hash=sha256:b6b4dcdd0c0c0d75e4d7b2f21a9e933e5b2ce62b26e1a54537f9651ae5a5c01d \
--hash=sha256:ea826108e2c7f49dc6d66c752973c3fc9749142a798d6b254e1e301cfdbc6403 --hash=sha256:ea826108e2c7f49dc6d66c752973c3fc9749142a798d6b254e1e301cfdbc6403
@ -1186,9 +1175,9 @@ pyflakes==3.1.0 \
# flake8 # flake8
# for-runners-ynh (pyproject.toml) # for-runners-ynh (pyproject.toml)
# manageprojects # manageprojects
pygments==2.16.1 \ pygments==2.17.2 \
--hash=sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692 \ --hash=sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c \
--hash=sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29 --hash=sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367
# via # via
# darker # darker
# readme-renderer # readme-renderer
@ -1205,21 +1194,6 @@ pyproject-hooks==1.0.0 \
--hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \ --hash=sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8 \
--hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5 --hash=sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5
# via build # via build
pytest==7.4.3 \
--hash=sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac \
--hash=sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5
# via
# for-runners-ynh (pyproject.toml)
# pytest-cov
# pytest-django
pytest-cov==4.1.0 \
--hash=sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6 \
--hash=sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a
# via for-runners-ynh (pyproject.toml)
pytest-django==4.7.0 \
--hash=sha256:4e1c79d5261ade2dd58d91208017cd8f62cb4710b56e012ecd361d15d5d662a2 \
--hash=sha256:92d6fd46b1d79b54fb6b060bbb39428073396cec717d5f2e122a990d4b6aa5e8
# via for-runners-ynh (pyproject.toml)
python-dateutil==2.8.2 \ python-dateutil==2.8.2 \
--hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \ --hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \
--hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9
@ -1324,9 +1298,9 @@ rfc3986==2.0.0 \
--hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \ --hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \
--hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c --hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c
# via twine # via twine
rich==13.6.0 \ rich==13.7.0 \
--hash=sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245 \ --hash=sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa \
--hash=sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef --hash=sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235
# via # via
# cli-base-utilities # cli-base-utilities
# cookiecutter # cookiecutter
@ -1430,6 +1404,10 @@ tablib[html,ods,xls,xlsx,yaml]==3.5.0 \
# via # via
# django-import-export # django-import-export
# tablib # tablib
tblib==3.0.0 \
--hash=sha256:80a6c77e59b55e83911e1e607c649836a69c103963c5f28a46cbeef44acf8129 \
--hash=sha256:93622790a0a29e04f0346458face1e144dc4d32f493714c6c3dff82a4adb77e6
# via for-runners-ynh (pyproject.toml)
text-unidecode==1.3 \ text-unidecode==1.3 \
--hash=sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8 \ --hash=sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8 \
--hash=sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93 --hash=sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93
@ -1450,7 +1428,6 @@ tomli==2.0.1 \
# autopep8 # autopep8
# black # black
# build # build
# coverage
# dparse # dparse
# flynt # flynt
# for-runners-ynh (pyproject.toml) # for-runners-ynh (pyproject.toml)
@ -1458,11 +1435,10 @@ tomli==2.0.1 \
# pip-tools # pip-tools
# pyproject-api # pyproject-api
# pyproject-hooks # pyproject-hooks
# pytest
# tox # tox
tomlkit==0.12.2 \ tomlkit==0.12.3 \
--hash=sha256:df32fab589a81f0d7dc525a4267b6d7a64ee99619cbd1eeb0fae32c1dd426977 \ --hash=sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4 \
--hash=sha256:eeea7ac7563faeab0a1ed8fe12c2e5a51c61f933f2502f7e9db0241a65163ad0 --hash=sha256:b0a645a9156dc7cb5d3a1f0d4bab66db287fcb8e0430bdd4664a095ea16414ba
# via # via
# cli-base-utilities # cli-base-utilities
# manageprojects # manageprojects
@ -1486,23 +1462,23 @@ typing-extensions==4.8.0 \
# black # black
# mypy # mypy
# rich-click # rich-click
urllib3==2.0.7 \ urllib3==2.1.0 \
--hash=sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84 \ --hash=sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3 \
--hash=sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e --hash=sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54
# via # via
# requests # requests
# twine # twine
virtualenv==20.24.6 \ virtualenv==20.24.7 \
--hash=sha256:02ece4f56fbf939dbbc33c0715159951d6bf14aaf5457b092e4548e1382455af \ --hash=sha256:69050ffb42419c91f6c1284a7b24e0475d793447e35929b488bf6a0aade39353 \
--hash=sha256:520d056652454c5098a00c0f073611ccbea4c79089331f60bf9d7ba247bb7381 --hash=sha256:a18b3fd0314ca59a2e9f4b556819ed07183b3e9a3702ecfe213f593d44f7b3fd
# via tox # via tox
webencodings==0.5.1 \ webencodings==0.5.1 \
--hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \
--hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923 --hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923
# via bleach # via bleach
wheel==0.41.3 \ wheel==0.42.0 \
--hash=sha256:488609bc63a29322326e05560731bf7bfea8e48ad646e1f5e40d366607de0942 \ --hash=sha256:177f9c9b0d45c47873b619f5b650346d632cdc35fb5e4d25058e09c9e581433d \
--hash=sha256:4d4987ce51a49370ea65c0bfd2234e8ce80a12780820d9dc462597a6e60d0841 --hash=sha256:c45be39f7882c9d34243236f2d63cbd58039e360f85d0913425fbd7ceea617a8
# via pip-tools # via pip-tools
xlrd==2.0.1 \ xlrd==2.0.1 \
--hash=sha256:6a33ee89877bd9abc1158129f6e94be74e2679636b8a205b43b85206c3f0bbdd \ --hash=sha256:6a33ee89877bd9abc1158129f6e94be74e2679636b8a205b43b85206c3f0bbdd \
@ -1522,9 +1498,9 @@ pip==23.3.1 \
--hash=sha256:1fcaa041308d01f14575f6d0d2ea4b75a3e2871fe4f9c694976f908768e14174 \ --hash=sha256:1fcaa041308d01f14575f6d0d2ea4b75a3e2871fe4f9c694976f908768e14174 \
--hash=sha256:55eb67bb6171d37447e82213be585b75fe2b12b359e993773aca4de9247a052b --hash=sha256:55eb67bb6171d37447e82213be585b75fe2b12b359e993773aca4de9247a052b
# via pip-tools # via pip-tools
setuptools==68.2.2 \ setuptools==69.0.2 \
--hash=sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87 \ --hash=sha256:1e8fdff6797d3865f37397be788a4e3cba233608e9b509382a2777d25ebde7f2 \
--hash=sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a --hash=sha256:735896e78a4742605974de002ac60562d286fa8051a7e2299445e8e8fbb01aa6
# via # via
# django-axes # django-axes
# pip-tools # pip-tools

View file

@ -13,7 +13,7 @@ __YNH_CURRENT_HOST__=${ynh_current_host}
#================================================= #=================================================
# 'debug_enabled' -> '__DEBUG_ENABLED__' -> settings.DEBUG # 'debug_enabled' -> '__DEBUG_ENABLED__' -> settings.DEBUG
debug_enabled="NO" # "YES" or "NO" string debug_enabled="0" # "1" or "0" string
# 'log_level' -> '__LOG_LEVEL__' -> settings.LOG_LEVEL # 'log_level' -> '__LOG_LEVEL__' -> settings.LOG_LEVEL
log_level="WARNING" log_level="WARNING"

View file

@ -26,7 +26,7 @@ def pytest_configure():
destination=BASE_PATH / 'local_test', destination=BASE_PATH / 'local_test',
runserver=False, runserver=False,
extra_replacements={ extra_replacements={
'__DEBUG_ENABLED__': 'NO', # "YES" or "NO" string '__DEBUG_ENABLED__': '0', # "1" or "0" string
'__LOG_LEVEL__': 'INFO', '__LOG_LEVEL__': 'INFO',
'__ADMIN_EMAIL__': 'foo-bar@test.tld', '__ADMIN_EMAIL__': 'foo-bar@test.tld',
'__DEFAULT_FROM_EMAIL__': 'django_app@test.tld', '__DEFAULT_FROM_EMAIL__': 'django_app@test.tld',

View file

@ -34,7 +34,7 @@ class DjangoYnhTestCase(HtmlAssertionMixin, TestCase):
def test_config_panel_settings(self): def test_config_panel_settings(self):
# config_panel.toml settings, set via tests.conftest.pytest_configure(): # config_panel.toml settings, set via tests.conftest.pytest_configure():
assert settings.DEBUG_ENABLED == 'NO' and settings.DEBUG is False assert settings.DEBUG_ENABLED == '0' and settings.DEBUG is False
assert settings.LOG_LEVEL == 'INFO' assert settings.LOG_LEVEL == 'INFO'
assert settings.ADMIN_EMAIL == 'foo-bar@test.tld' assert settings.ADMIN_EMAIL == 'foo-bar@test.tld'
assert settings.DEFAULT_FROM_EMAIL == 'django_app@test.tld' assert settings.DEFAULT_FROM_EMAIL == 'django_app@test.tld'