Glue code to package django projects as yunohost apps.
Project description
django_yunohost_integration
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
:
- https://github.com/YunoHost-Apps/pyinventory_ynh
- https://github.com/YunoHost-Apps/django-for-runners_ynh
- https://github.com/YunoHost-Apps/django-fmd_ynh
Features
- 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
againstlocal_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
usage
To create/update the first user in install
/upgrade
, e.g.:
./manage.py 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 settings.py
:
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__' # $YNH_APP_ARG_PATH
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>')
# -----------------------------------------------------------------------------
At least you have to set these settings:
from django_yunohost_integration.base_settings import * # noqa
INSTALLED_APPS.append('django_yunohost_integration')
MIDDLEWARE.insert(
MIDDLEWARE.index('django.contrib.auth.middleware.AuthenticationMiddleware') + 1,
# login a user via HTTP_REMOTE_USER header from SSOwat:
'django_yunohost_integration.sso_auth.auth_middleware.SSOwatRemoteUserMiddleware',
)
# Keep ModelBackend around for per-user permissions and superuser
AUTHENTICATION_BACKENDS = (
'axes.backends.AxesBackend', # AxesBackend should be the first backend!
#
# Authenticate via SSO and nginx 'HTTP_REMOTE_USER' header:
'django_yunohost_integration.sso_auth.auth_backend.SSOwatUserBackend',
#
# Fallback to normal Django model backend:
'django.contrib.auth.backends.ModelBackend',
)
LOGIN_REDIRECT_URL = None
LOGIN_URL = '/yunohost/sso/'
LOGOUT_REDIRECT_URL = '/yunohost/sso/'
# /yunohost/sso/?action=logout
ROOT_URLCONF = 'urls' # .../conf/urls.py
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.
e.g.:
~$ git clone https://github.com/YunoHost-Apps/django_yunohost_integration.git
~$ cd django_yunohost_integration/
~/django_yunohost_integration$ ./devshell.py
+ .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
====================================
local_test
Uncategorized
=============
alias help macro run_pyscript set shortcuts
edit history quit run_script shell
(django_yunohost_integration)
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.
e.g.:
~/django_yunohost_integration$ ./devshell.py
(django_yunohost_integration) local_test
- SQlite database will be used
- A super user with username
test
and passwordtest
is created - The page is available under
http://127.0.0.1:8000/app_path/
history
- dev
- tbc
- v0.5.2 - 19.02.2023
- Update the projec setup a little bit via manageprojects
- Support Django 4.0 and 4.1 (backport
RedirectURLMixin
for 4.0 from 4.1)
- v0.5.1 - 21.12.2022
- Skip versions check in Github actions to avoid the rate limit in pipelines ;)
- v0.5.0 - 21.12.2022
- Add
SSOwatLoginRedirectView
- Set min. Python version from 3.7 to 3.9 (Needs YunoHost 11!)
- Display logs in local tests and use
colorlog.StreamHandler
- Bugfix example url pattern
- Code cleanup: Remove
request_media_debug_view
- Add
- v0.4.1 - 04.10.2022
- Add
assert_project_version
andget_github_version_tag
intest_utils
- Add
- v0.4.0 - 15.09.2022
- Add
SyslogHandler
to logging settings and enhance logging example settings. - rename replacements (but still support the old ones):
__FINAL_HOME_PATH__
->__FINALPATH__
__FINAL_WWW_PATH__
->__PUBLIC_PATH__
- Add system checks to verify all "EMAIL" in
settings
andsettings.LOG_LEVEL
- Bugfix dev shell and exit if it's called as CLI
- Run "saftey" check in CI
- Add
- v0.3.0 - 14.08.2022
- Add
extra_replacements:dict
argument tocreate_local_test()
to pass own__YNH_VARIABLE__
replacements - Remove
pytest_helper.run_pytest()
because every project should used a own conftest.py withcreate_local_test()
usage.
- Add
- 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.
- Support new variable names, for
- 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"
- Bugfix Fix local test by set
- 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
- Bugfix endless redirect loop, by adding
- v0.2.0 - 15.09.2021
- rename/split
django_ynh
into:- django_yunohost_integration - Python package with the glue code to integrate a Django project with YunoHost
- django_example_ynh - Demo YunoHost App to demonstrate the integration of a Django project under YunoHost
- Replace
psycopg2-binary
withpsycopg2
(needs some prerequisites packages, see above)
- rename/split
- v0.1.5 - 19.01.2021
- Make some deps
gunicorn
,psycopg2-binary
,django-redis
,django-axes
optional
- Make some deps
- 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/
)
- Refactor "create_superuser" to a manage command, useable via "django_yunohost_integration" in
- v0.1.0 - 28.12.2020
- first working state
- 23.12.2020
- init the project
Links
- Report a bug about this package: https://github.com/YunoHost-Apps/django_yunohost_integration
- YunoHost website: https://yunohost.org/
- PyPi package: https://pypi.org/project/django_yunohost_integration/
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file django_yunohost_integration-0.5.2.tar.gz
.
File metadata
- Download URL: django_yunohost_integration-0.5.2.tar.gz
- Upload date:
- Size: 34.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6689115f88dc84acaf94dc01ce940023f566bf933f57115563120912a14cbeff |
|
MD5 | ab0479105c5f8e7ba30b58d05d0f6c17 |
|
BLAKE2b-256 | 58ca440df2d40cb2e76854c834ddeb655d8efc30b4c1fcea47fd194f24d0d8da |
Provenance
File details
Details for the file django_yunohost_integration-0.5.2-py3-none-any.whl
.
File metadata
- Download URL: django_yunohost_integration-0.5.2-py3-none-any.whl
- Upload date:
- Size: 51.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 05d96ae0689eb1b8c7bc30e0d247fddb1c18d2845c17a6e4ca533ed47731a4cb |
|
MD5 | 8a7d8c94289c45b3330341637df3c238 |
|
BLAKE2b-256 | f854ff830c8a99fc8bcc2c67a7815f2b82ce99ebf5bbfe39e0949d4b26f69ab7 |