From 82638455bda9c81d640b27b6e4fa53cc8a1271e1 Mon Sep 17 00:00:00 2001 From: JensDiemer Date: Mon, 15 Aug 2022 09:01:53 +0200 Subject: [PATCH 1/3] Add '__LOG_LEVEL__' config_panel.toml settings --- conf/settings.py | 34 +++++++++++++++++++++++----------- config_panel.toml | 7 +++++++ scripts/_common.sh | 3 +++ scripts/install | 5 ++++- scripts/upgrade | 9 +++++++++ 5 files changed, 46 insertions(+), 12 deletions(-) diff --git a/conf/settings.py b/conf/settings.py index 5d77582..a00168f 100644 --- a/conf/settings.py +++ b/conf/settings.py @@ -15,12 +15,6 @@ from django_yunohost_integration.base_settings import * # noqa from django_yunohost_integration.secret_key import get_or_create_secret as __get_or_create_secret -# Set via config_panel.toml -DEBUG_ENABLED = '__DEBUG_ENABLED__' -DEBUG = bool(int(DEBUG_ENABLED)) - -# ----------------------------------------------------------------------------- - FINALPATH = __Path('__FINALPATH__') # /opt/yunohost/$app assert FINALPATH.is_dir(), f'Directory not exists: {FINALPATH}' @@ -33,6 +27,23 @@ assert LOG_FILE.is_file(), f'File not exists: {LOG_FILE}' PATH_URL = '__PATH_URL__' # $YNH_APP_ARG_PATH PATH_URL = PATH_URL.strip('/') +# ----------------------------------------------------------------------------- +# config_panel.toml settings: + +DEBUG_ENABLED = '__DEBUG_ENABLED__' +LOG_LEVEL = '__LOG_LEVEL__' + +# ----------------------------------------------------------------------------- + +DEBUG = bool(int(DEBUG_ENABLED)) +assert LOG_LEVEL in ( + 'DEBUG', + 'INFO', + 'WARNING', + 'ERROR', + 'CRITICAL', +), f'Invalid LOG_LEVEL: {LOG_LEVEL!r}' + # ----------------------------------------------------------------------------- # Function that will be called to finalize a user profile: @@ -111,6 +122,7 @@ else: STATIC_ROOT = str(PUBLIC_PATH / 'static') MEDIA_ROOT = str(PUBLIC_PATH / 'media') + # ----------------------------------------------------------------------------- LOGGING = { @@ -137,17 +149,17 @@ LOGGING = { }, }, 'loggers': { - '': {'handlers': ['log_file', 'mail_admins'], 'level': 'INFO', 'propagate': False}, - 'django': {'handlers': ['log_file', 'mail_admins'], 'level': 'INFO', 'propagate': False}, - 'axes': {'handlers': ['log_file', 'mail_admins'], 'level': 'WARNING', 'propagate': False}, + '': {'handlers': ['log_file', 'mail_admins'], 'level': LOG_LEVEL, 'propagate': False}, + 'django': {'handlers': ['log_file', 'mail_admins'], 'level': LOG_LEVEL, 'propagate': False}, + 'axes': {'handlers': ['log_file', 'mail_admins'], 'level': LOG_LEVEL, 'propagate': False}, 'django_tools': { 'handlers': ['log_file', 'mail_admins'], - 'level': 'INFO', + 'level': LOG_LEVEL, 'propagate': False, }, 'django_yunohost_integration': { 'handlers': ['log_file', 'mail_admins'], - 'level': 'INFO', + 'level': LOG_LEVEL, 'propagate': False, }, }, diff --git a/config_panel.toml b/config_panel.toml index c7144fc..1838c99 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -14,3 +14,10 @@ services = ["__APP__"] no = "0" help = "Should be never enabled in production!" bind = "debug_enabled:__FINALPATH__/settings.py" + + [main.config.log_level] + type = "string" + ask = "Log Level" + choices = ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"] + default = "WARNING" + bind = "log_level:__FINALPATH__/settings.py" diff --git a/scripts/_common.sh b/scripts/_common.sh index fee5921..b7efc0a 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -18,6 +18,9 @@ app=$YNH_APP_INSTANCE_NAME # 'debug_enabled' -> '__DEBUG_ENABLED__' -> settings.DEBUG debug_enabled="0" +# 'log_level' -> '__LOG_LEVEL__' -> settings.LOG_LEVEL +log_level="WARNING" + #================================================= # SET CONSTANTS #================================================= diff --git a/scripts/install b/scripts/install index 5eab770..d75471e 100755 --- a/scripts/install +++ b/scripts/install @@ -60,8 +60,11 @@ admin_mail=$(ynh_user_get_info --username="$admin" --key=mail) redis_db=$(ynh_redis_get_free_db) ynh_app_setting_set --app="$app" --key=redis_db --value="$redis_db" -# Always deactivate settings.DEBUG: +#------------------------------------------------- +# config_panel.toml settings: + ynh_app_setting_set --app="$app" --key=debug_enabled --value="$debug_enabled" +ynh_app_setting_set --app="$app" --key=log_level --value="$log_level" #================================================= # STANDARD MODIFICATIONS diff --git a/scripts/upgrade b/scripts/upgrade index 9dfc208..e7db076 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -29,12 +29,21 @@ db_user=$db_name admin_mail=$(ynh_user_get_info "$admin" mail) redis_db=$(ynh_app_setting_get --app="$app" --key=redis_db) +#------------------------------------------------- +# config_panel.toml settings: + debug_enabled=$(ynh_app_setting_get --app="$app" --key=debug_enabled) if [ -z "$debug_enabled" ]; then debug_enabled="0" ynh_app_setting_set --app="$app" --key=debug_enabled --value="$debug_enabled" fi +log_level=$(ynh_app_setting_get --app="$app" --key=log_level) +if [ -z "$log_level" ]; then + log_level="WARNING" + ynh_app_setting_set --app="$app" --key=log_level --value="$log_level" +fi + #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #================================================= From 9b4805a56da544c4457a06d1eb264c9f7c368ac8 Mon Sep 17 00:00:00 2001 From: JensDiemer Date: Mon, 15 Aug 2022 09:01:58 +0200 Subject: [PATCH 2/3] cleanup --- config_panel.toml | 2 +- scripts/upgrade | 7 ------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/config_panel.toml b/config_panel.toml index 1838c99..fa796b6 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -8,7 +8,7 @@ services = ["__APP__"] name = "Configuration Options" [main.config.debug_enabled] - ask = "Enable DEBUG mode" + ask = "DEBUG mode" type = "boolean" yes = "1" no = "0" diff --git a/scripts/upgrade b/scripts/upgrade index e7db076..0c6474e 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -67,13 +67,6 @@ ynh_script_progression --message="Stopping systemd services..." --weight=5 ynh_systemd_action --service_name="$app" --action="stop" -#================================================= -# Manage old settings -#================================================= - -# Always deactivate settings.DEBUG: -ynh_app_setting_set --app=$app --key=debug_enabled --value="False" - #================================================= # NGINX CONFIGURATION #================================================= From 768ed7f24aa07fbb9f04dd270d65232275e38213 Mon Sep 17 00:00:00 2001 From: JensDiemer Date: Mon, 15 Aug 2022 09:17:30 +0200 Subject: [PATCH 3/3] Add '__ADMIN_EMAIL__' to config_panel.toml settings --- conf/settings.py | 10 +++++++--- config_panel.toml | 7 +++++++ scripts/_common.sh | 5 +++-- scripts/change_url | 8 +++++++- scripts/install | 4 ++-- scripts/upgrade | 9 +++++++-- tests/conftest.py | 2 ++ tests/test_django_project.py | 6 ++++++ 8 files changed, 41 insertions(+), 10 deletions(-) diff --git a/conf/settings.py b/conf/settings.py index a00168f..a82b3dc 100644 --- a/conf/settings.py +++ b/conf/settings.py @@ -11,6 +11,8 @@ from pathlib import Path as __Path +from django.core.validators import EmailValidator as __EmailValidator + from django_yunohost_integration.base_settings import * # noqa from django_yunohost_integration.secret_key import get_or_create_secret as __get_or_create_secret @@ -32,8 +34,9 @@ PATH_URL = PATH_URL.strip('/') DEBUG_ENABLED = '__DEBUG_ENABLED__' LOG_LEVEL = '__LOG_LEVEL__' - +ADMIN_EMAIL = '__ADMIN_EMAIL__' # ----------------------------------------------------------------------------- +# Use/convert/validate config_panel.toml settings: DEBUG = bool(int(DEBUG_ENABLED)) assert LOG_LEVEL in ( @@ -43,6 +46,7 @@ assert LOG_LEVEL in ( 'ERROR', 'CRITICAL', ), f'Invalid LOG_LEVEL: {LOG_LEVEL!r}' +__EmailValidator(message='ADMIN_EMAIL from config panel is not valid!')(ADMIN_EMAIL) # ----------------------------------------------------------------------------- @@ -56,7 +60,7 @@ SECRET_KEY = __get_or_create_secret(FINALPATH / 'secret.txt') # /opt/yunohost/$ # ----------------------------------------------------------------------------- -ADMINS = (('__ADMIN__', '__ADMINMAIL__'),) +ADMINS = (('__ADMIN__', ADMIN_EMAIL),) MANAGERS = ADMINS @@ -87,7 +91,7 @@ SERVER_EMAIL = 'noreply@__DOMAIN__' # Default email address to use for various automated correspondence from # the site managers. Used for registration emails. -DEFAULT_FROM_EMAIL = '__ADMINMAIL__' +DEFAULT_FROM_EMAIL = ADMIN_EMAIL # List of URLs your site is supposed to serve ALLOWED_HOSTS = ['__DOMAIN__'] diff --git a/config_panel.toml b/config_panel.toml index fa796b6..d1b530a 100644 --- a/config_panel.toml +++ b/config_panel.toml @@ -7,6 +7,13 @@ services = ["__APP__"] [main.config] name = "Configuration Options" + [main.config.admin_email] + ask = "ADMIN email" + type = "string" + help = "EMail address for error emails." + default = "root@localhost" + bind = "admin_email:__FINALPATH__/settings.py" + [main.config.debug_enabled] ask = "DEBUG mode" type = "boolean" diff --git a/scripts/_common.sh b/scripts/_common.sh index b7efc0a..6716bab 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -21,6 +21,9 @@ debug_enabled="0" # 'log_level' -> '__LOG_LEVEL__' -> settings.LOG_LEVEL log_level="WARNING" +# 'admin_email' -> '__ADMIN_EMAIL__' add in settings.ADMINS +admin_email="${admin}@${domain}" + #================================================= # SET CONSTANTS #================================================= @@ -30,8 +33,6 @@ final_path=/opt/yunohost/$app log_path=/var/log/$app log_file="${log_path}/django_example_ynh.log" -adminmail=$(ynh_user_get_info --username=$admin --key=mail) - #================================================= # COMMON VARIABLES #================================================= diff --git a/scripts/change_url b/scripts/change_url index 98f98d6..f109026 100644 --- a/scripts/change_url +++ b/scripts/change_url @@ -31,9 +31,15 @@ log_path=$(ynh_app_setting_get --app="$app" --key=log_path) port=$(ynh_app_setting_get --app="$app" --key=port) db_pwd=$(ynh_app_setting_get --app="$app" --key=psqlpwd) -admin_mail=$(ynh_user_get_info "$admin" mail) redis_db=$(ynh_app_setting_get --app="$app" --key=redis_db) +#------------------------------------------------- +# config_panel.toml settings: + +debug_enabled=$(ynh_app_setting_get --app="$app" --key=debug_enabled) +log_level=$(ynh_app_setting_get --app="$app" --key=log_level) +admin_email=$(ynh_app_setting_get --app="$app" --key=admin_email) + #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #================================================= diff --git a/scripts/install b/scripts/install index d75471e..c826807 100755 --- a/scripts/install +++ b/scripts/install @@ -55,7 +55,6 @@ port=$(ynh_find_port --port=8000) ynh_app_setting_set --app="$app" --key=port --value="$port" db_pwd=$(ynh_app_setting_get --app="$app" --key=psqlpwd) -admin_mail=$(ynh_user_get_info --username="$admin" --key=mail) redis_db=$(ynh_redis_get_free_db) ynh_app_setting_set --app="$app" --key=redis_db --value="$redis_db" @@ -65,6 +64,7 @@ ynh_app_setting_set --app="$app" --key=redis_db --value="$redis_db" ynh_app_setting_set --app="$app" --key=debug_enabled --value="$debug_enabled" ynh_app_setting_set --app="$app" --key=log_level --value="$log_level" +ynh_app_setting_set --app="$app" --key=admin_email --value="$admin_email" #================================================= # STANDARD MODIFICATIONS @@ -167,7 +167,7 @@ cd "$final_path" || exit ./manage.py collectstatic --no-input # Create/update Django superuser (set unusable password, because auth done via SSOwat): -./manage.py create_superuser --username="$admin" --email="$admin_mail" +./manage.py create_superuser --username="$admin" --email="$(ynh_user_get_info "$admin" mail)" # Check the configuration # This may fail in some cases with errors, etc., but the app works and the user can fix issues later. diff --git a/scripts/upgrade b/scripts/upgrade index 0c6474e..3c17990 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -26,7 +26,6 @@ db_pwd=$(ynh_app_setting_get --app="$app" --key=psqlpwd) db_name=$(ynh_sanitize_dbid --db_name="$app") db_user=$db_name -admin_mail=$(ynh_user_get_info "$admin" mail) redis_db=$(ynh_app_setting_get --app="$app" --key=redis_db) #------------------------------------------------- @@ -44,6 +43,12 @@ if [ -z "$log_level" ]; then ynh_app_setting_set --app="$app" --key=log_level --value="$log_level" fi +admin_email=$(ynh_app_setting_get --app="$app" --key=admin_email) +if [ -z "$admin_email" ]; then + admin_email="root@localhost" + ynh_app_setting_set --app="$app" --key=admin_email --value="$admin_email" +fi + #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP #================================================= @@ -158,7 +163,7 @@ cd "$final_path" || exit ./manage.py collectstatic --no-input # Create/update Django superuser (set unusable password, because auth done via SSOwat): -./manage.py create_superuser --username="$admin" --email="$admin_mail" +./manage.py create_superuser --username="$admin" --email="$(ynh_user_get_info "$admin" mail)" # Check the configuration # This may fail in some cases with errors, etc., but the app works and the user can fix issues later. diff --git a/tests/conftest.py b/tests/conftest.py index d1a679f..c2ac595 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -28,6 +28,8 @@ def pytest_configure(): runserver=False, extra_replacements={ '__DEBUG_ENABLED__': '0', + '__LOG_LEVEL__': 'INFO', + '__ADMIN_EMAIL__': 'foo-bar@test.tld', }, ) print('Local test files created here:') diff --git a/tests/test_django_project.py b/tests/test_django_project.py index cb6460b..6f81a8b 100644 --- a/tests/test_django_project.py +++ b/tests/test_django_project.py @@ -27,6 +27,12 @@ class DjangoYnhTestCase(HtmlAssertionMixin, TestCase): 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' + def test_urls(self): assert reverse('admin:index') == '/app_path/'