Glue code to package django projects as yunohost apps.

django, python, yunohost, yunohost-api
pip install django-yunohost-integration==0.2.4



pytest Coverage Status on

django_yunohost_integration @ PyPi Python Versions License GPL

Python package django_yunohost_integration with helpers for integrate a Django project as YunoHost package.

A example usage of this package is here:

Pull requests welcome ;)

These projects used django_yunohost_integration:


  • SSOwat integration (see below)
  • Helper to create first super user for scripts/install
  • Run Django development server with a local generated YunoHost package installation (called local_test)
  • Helper to run pytest against local_test "installation"

SSO authentication

SSOwat is fully supported:

  • 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


To create/update the first user in install/upgrade, e.g.:

./ create_superuser --username="$admin" --email="$admin_mail"

This Create/update Django superuser and set a unusable password. A password is not needed, because auth done via SSOwat ;)

Main parts in

from pathlib import Path as __Path

from django_yunohost_integration.base_settings import *  # noqa
from django_yunohost_integration.secret_key import get_or_create_secret as __get_or_create_secret

DEBUG = bool(int('__DEBUG_ENABLED__'))  # Set via config_panel.toml

# -----------------------------------------------------------------------------

FINALPATH = __Path('__FINALPATH__')  # /opt/yunohost/$app
assert FINALPATH.is_dir(), f'Directory not exists: {FINALPATH}'

PUBLIC_PATH = __Path('__PUBLIC_PATH__')  # /var/www/$app
assert PUBLIC_PATH.is_dir(), f'Directory not exists: {PUBLIC_PATH}'

LOG_FILE = __Path('__LOG_FILE__')  # /var/log/$app/$app.log
assert LOG_FILE.is_file(), f'File not exists: {LOG_FILE}'

PATH_URL = PATH_URL.strip('/')

# -----------------------------------------------------------------------------

# Function that will be called to finalize a user profile:
YNH_SETUP_USER = 'setup_user.setup_project_user'

SECRET_KEY = __get_or_create_secret(FINALPATH / 'secret.txt')  # /opt/yunohost/$app/secret.txt

# INSTALLED_APPS.append('<insert-your-app-here>')

# -----------------------------------------------------------------------------

local test

Build prerequisites

We install psycopg2 (a PostgreSQL adapter for the Python) that needs some build prerequisites, e.g.:

~$ sudo apt install build-essential python3-dev libpq-dev

For quicker developing of django_yunohost_integration in the context of YunoHost app, it's possible to run the Django developer server with the settings and urls made for YunoHost installation.


~$ git clone
~$ cd django_yunohost_integration/
~/django_yunohost_integration$ ./

+ .venv/bin/python .venv/bin/devshell

Developer shell - django_yunohost_integration - v0.2.0

Documented commands (use 'help -v' for verbose/'help <topic>' for details):

dev-shell commands
fix_code_style  linting  list_venv_packages  publish  pytest  update

Django-YunoHost-Integration commands

alias  help     macro  run_pyscript  set    shortcuts
edit   history  quit   run_script    shell


For quicker developing of django_yunohost_integration in the context of YunoHost app, it's possible to run the Django developer server with the settings and urls made for YunoHost installation.


~/django_yunohost_integration$ ./
(django_yunohost_integration) local_test
  • SQlite database will be used
  • A super user with username test and password test is created
  • The page is available under


  • dev
    • tbc
  • v0.3.0 - 14.08.2022
    • Add extra_replacements:dict argument to create_local_test() to pass own __YNH_VARIABLE__ replacements
    • Remove pytest_helper.run_pytest() because every project should used a own with create_local_test() usage.
  • v0.2.5 - 12.08.2022
    • Support new variable names, for ynh_add_config usage in local test helper.
    • Run tests with Python v3.10, too.
    • Update project setup.
  • v0.2.4 - 30.01.2022
    • Rename git "master" branch to "main"
    • Use darker and pytest-darker as code formatter + update requirements
  • v0.2.3 - 07.01.2022
    • Bugfix Fix local test by set "SECURE_SSL_REDIRECT = False"
  • v0.2.2 - 10.10.2021
    • Read YunoHost App Id from "manifest.json" and check root directory name
  • v0.2.1 - 16.09.2021
    • Bugfix endless redirect loop, by adding SECURE_PROXY_SSL_HEADER to settings
  • v0.2.0 - 15.09.2021
    • rename/split django_ynh into:
    • Replace psycopg2-binary with psycopg2 (needs some prerequisites packages, see above)
  • v0.1.5 - 19.01.2021
    • Make some deps gunicorn, psycopg2-binary, django-redis, django-axes optional
  • v0.1.4 - 08.01.2021
    • Bugfix: CSRF verification failed on POST requests
  • v0.1.3 - 08.01.2021
    • set "DEBUG = True" in local_test (so static files are served and auth works)
    • Bugfixes and cleanups
  • v0.1.2 - 29.12.2020
    • Bugfixes
  • v0.1.1 - 29.12.2020
    • Refactor "create_superuser" to a manage command, useable via "django_yunohost_integration" in INSTALLED_APPS
    • Generate "conf/requirements.txt" and use this file for install
    • rename own settings and urls (in /conf/)
  • v0.1.0 - 28.12.2020
    • first working state
  • 23.12.2020
    • init the project