diff --git a/src/yunohost/app.py b/src/yunohost/app.py
index ac2b95cac..fc890e055 100644
--- a/src/yunohost/app.py
+++ b/src/yunohost/app.py
@@ -36,7 +36,7 @@ import urllib.parse
import tempfile
from collections import OrderedDict
-from moulinette import prompt, m18n, msettings
+from moulinette import Moulinette, m18n
from moulinette.core import MoulinetteError
from moulinette.utils.log import getActionLogger
from moulinette.utils.network import download_json
@@ -643,7 +643,7 @@ def app_upgrade(app=[], url=None, file=None, force=False):
m18n.n("app_upgrade_failed", app=app_instance_name, error=error)
)
failure_message_with_debug_instructions = operation_logger.error(error)
- if msettings.get("interface") != "api":
+ if Moulinette.interface.type != "api":
dump_app_log_extract_for_debugging(operation_logger)
# Script got manually interrupted ... N.B. : KeyboardInterrupt does not inherit from Exception
except (KeyboardInterrupt, EOFError):
@@ -821,11 +821,11 @@ def app_install(
def confirm_install(confirm):
# Ignore if there's nothing for confirm (good quality app), if --force is used
# or if request on the API (confirm already implemented on the API side)
- if confirm is None or force or msettings.get("interface") == "api":
+ if confirm is None or force or Moulinette.interface.type == "api":
return
if confirm in ["danger", "thirdparty"]:
- answer = prompt(
+ answer = Moulinette.prompt(
m18n.n("confirm_app_install_" + confirm, answers="Yes, I understand"),
color="red",
)
@@ -833,7 +833,7 @@ def app_install(
raise YunohostError("aborting")
else:
- answer = prompt(
+ answer = Moulinette.prompt(
m18n.n("confirm_app_install_" + confirm, answers="Y/N"), color="yellow"
)
if answer.upper() != "Y":
@@ -1005,7 +1005,7 @@ def app_install(
error = m18n.n("app_install_script_failed")
logger.error(m18n.n("app_install_failed", app=app_id, error=error))
failure_message_with_debug_instructions = operation_logger.error(error)
- if msettings.get("interface") != "api":
+ if Moulinette.interface.type != "api":
dump_app_log_extract_for_debugging(operation_logger)
# Script got manually interrupted ... N.B. : KeyboardInterrupt does not inherit from Exception
except (KeyboardInterrupt, EOFError):
@@ -2729,7 +2729,7 @@ class YunoHostArgumentFormatParser(object):
)
try:
- question.value = prompt(
+ question.value = Moulinette.prompt(
text_for_user_input_in_cli, self.hide_user_input_in_prompt
)
except NotImplementedError:
diff --git a/src/yunohost/backup.py b/src/yunohost/backup.py
index b76d12aba..2fe32ad7e 100644
--- a/src/yunohost/backup.py
+++ b/src/yunohost/backup.py
@@ -38,7 +38,7 @@ from collections import OrderedDict
from functools import reduce
from packaging import version
-from moulinette import prompt, m18n, msettings
+from moulinette import Moulinette, m18n
from moulinette.utils import filesystem
from moulinette.utils.log import getActionLogger
from moulinette.utils.filesystem import read_file, mkdir, write_to_yaml, read_yaml
@@ -1508,7 +1508,7 @@ class RestoreManager:
m18n.n("app_restore_failed", app=app_instance_name, error=error)
)
failure_message_with_debug_instructions = operation_logger.error(error)
- if msettings.get("interface") != "api":
+ if Moulinette.interface.type != "api":
dump_app_log_extract_for_debugging(operation_logger)
# Script got manually interrupted ... N.B. : KeyboardInterrupt does not inherit from Exception
except (KeyboardInterrupt, EOFError):
@@ -1839,7 +1839,7 @@ class BackupMethod(object):
# Ask confirmation for copying
if size > MB_ALLOWED_TO_ORGANIZE:
try:
- i = prompt(
+ i = Moulinette.prompt(
m18n.n(
"backup_ask_for_copying_if_needed",
answers="y/N",
@@ -2343,7 +2343,7 @@ def backup_restore(name, system=[], apps=[], force=False):
if not force:
try:
# Ask confirmation for restoring
- i = prompt(
+ i = Moulinette.prompt(
m18n.n("restore_confirm_yunohost_installed", answers="y/N")
)
except NotImplemented:
@@ -2417,7 +2417,7 @@ def backup_list(with_info=False, human_readable=False):
def backup_download(name):
- if msettings.get("interface") != "api":
+ if Moulinette.interface.type != "api":
logger.error(
"This option is only meant for the API/webadmin and doesn't make sense for the command line."
)
diff --git a/src/yunohost/diagnosis.py b/src/yunohost/diagnosis.py
index ff1a14c4e..4ac5e2731 100644
--- a/src/yunohost/diagnosis.py
+++ b/src/yunohost/diagnosis.py
@@ -28,7 +28,7 @@ import re
import os
import time
-from moulinette import m18n, msettings
+from moulinette import m18n, Moulinette
from moulinette.utils import log
from moulinette.utils.filesystem import (
read_json,
@@ -138,7 +138,7 @@ def diagnosis_show(
url = yunopaste(content)
logger.info(m18n.n("log_available_on_yunopaste", url=url))
- if msettings.get("interface") == "api":
+ if Moulinette.interface.type == "api":
return {"url": url}
else:
return
@@ -219,7 +219,7 @@ def diagnosis_run(
if email:
_email_diagnosis_issues()
- if issues and msettings.get("interface") == "cli":
+ if issues and Moulinette.interface.type == "cli":
logger.warning(m18n.n("diagnosis_display_tip"))
@@ -595,7 +595,7 @@ class Diagnoser:
info[1].update(meta_data)
s = m18n.n(info[0], **(info[1]))
# In cli, we remove the html tags
- if msettings.get("interface") != "api" or force_remove_html_tags:
+ if Moulinette.interface.type != "api" or force_remove_html_tags:
s = s.replace("", "'").replace("", "'")
s = html_tags.sub("", s.replace("
", "\n"))
else:
diff --git a/src/yunohost/domain.py b/src/yunohost/domain.py
index c466e14ee..b431e9b18 100644
--- a/src/yunohost/domain.py
+++ b/src/yunohost/domain.py
@@ -26,7 +26,7 @@
import os
import re
-from moulinette import m18n, msettings, prompt
+from moulinette import m18n, Moulinette
from moulinette.core import MoulinetteError
from yunohost.utils.error import YunohostError, YunohostValidationError
from moulinette.utils.log import getActionLogger
@@ -236,8 +236,8 @@ def domain_remove(operation_logger, domain, remove_apps=False, force=False):
if apps_on_that_domain:
if remove_apps:
- if msettings.get("interface") == "cli" and not force:
- answer = prompt(
+ if Moulinette.interface.type == "cli" and not force:
+ answer = Moulinette.prompt(
m18n.n(
"domain_remove_confirm_apps_removal",
apps="\n".join([x[1] for x in apps_on_that_domain]),
@@ -343,7 +343,7 @@ def domain_dns_conf(domain, ttl=None):
for record in record_list:
result += "\n{name} {ttl} IN {type} {value}".format(**record)
- if msettings.get("interface") == "cli":
+ if Moulinette.interface.type == "cli":
logger.info(m18n.n("domain_dns_conf_is_just_a_recommendation"))
return result
diff --git a/src/yunohost/hook.py b/src/yunohost/hook.py
index 493ad2c35..e46a43d35 100644
--- a/src/yunohost/hook.py
+++ b/src/yunohost/hook.py
@@ -31,7 +31,7 @@ import mimetypes
from glob import iglob
from importlib import import_module
-from moulinette import m18n, msettings
+from moulinette import m18n, Moulinette
from yunohost.utils.error import YunohostError, YunohostValidationError
from moulinette.utils import log
from moulinette.utils.filesystem import read_json
@@ -409,7 +409,7 @@ def _hook_exec_bash(path, args, chdir, env, return_format, loggers):
env = {}
env["YNH_CWD"] = chdir
- env["YNH_INTERFACE"] = msettings.get("interface")
+ env["YNH_INTERFACE"] = Moulinette.interface.type
stdreturn = os.path.join(tempfile.mkdtemp(), "stdreturn")
with open(stdreturn, "w") as f:
diff --git a/src/yunohost/log.py b/src/yunohost/log.py
index d36671ce2..f6c19eebc 100644
--- a/src/yunohost/log.py
+++ b/src/yunohost/log.py
@@ -33,7 +33,7 @@ import psutil
from datetime import datetime, timedelta
from logging import FileHandler, getLogger, Formatter
-from moulinette import m18n, msettings
+from moulinette import m18n, Moulinette
from moulinette.core import MoulinetteError
from yunohost.utils.error import YunohostError, YunohostValidationError
from yunohost.utils.packages import get_ynh_package_version
@@ -44,7 +44,6 @@ CATEGORIES_PATH = "/var/log/yunohost/categories/"
OPERATIONS_PATH = "/var/log/yunohost/categories/operation/"
METADATA_FILE_EXT = ".yml"
LOG_FILE_EXT = ".log"
-RELATED_CATEGORIES = ["app", "domain", "group", "service", "user"]
logger = getActionLogger("yunohost.log")
@@ -125,7 +124,7 @@ def log_list(limit=None, with_details=False, with_suboperations=False):
operations = list(reversed(sorted(operations, key=lambda o: o["name"])))
# Reverse the order of log when in cli, more comfortable to read (avoid
# unecessary scrolling)
- is_api = msettings.get("interface") == "api"
+ is_api = Moulinette.interface.type == "api"
if not is_api:
operations = list(reversed(operations))
@@ -214,7 +213,7 @@ def log_show(
url = yunopaste(content)
logger.info(m18n.n("log_available_on_yunopaste", url=url))
- if msettings.get("interface") == "api":
+ if Moulinette.interface.type == "api":
return {"url": url}
else:
return
@@ -609,7 +608,7 @@ class OperationLogger(object):
"operation": self.operation,
"parent": self.parent,
"yunohost_version": get_ynh_package_version("yunohost")["version"],
- "interface": msettings.get("interface"),
+ "interface": Moulinette.interface.type,
}
if self.related_to is not None:
data["related_to"] = self.related_to
@@ -663,7 +662,7 @@ class OperationLogger(object):
self.logger.removeHandler(self.file_handler)
self.file_handler.close()
- is_api = msettings.get("interface") == "api"
+ is_api = Moulinette.interface.type == "api"
desc = _get_description_from_name(self.name)
if error is None:
if is_api:
diff --git a/src/yunohost/tests/conftest.py b/src/yunohost/tests/conftest.py
index 49f87decf..1bf035748 100644
--- a/src/yunohost/tests/conftest.py
+++ b/src/yunohost/tests/conftest.py
@@ -3,7 +3,7 @@ import pytest
import sys
import moulinette
-from moulinette import m18n, msettings
+from moulinette import m18n, Moulinette
from yunohost.utils.error import YunohostError
from contextlib import contextmanager
@@ -81,4 +81,6 @@ def pytest_cmdline_main(config):
import yunohost
yunohost.init(debug=config.option.yunodebug)
- msettings["interface"] = "test"
+ class DummyInterface():
+ type = "test"
+ Moulinette._interface = DummyInterface()
diff --git a/src/yunohost/tools.py b/src/yunohost/tools.py
index 4c5861d17..4190e7614 100644
--- a/src/yunohost/tools.py
+++ b/src/yunohost/tools.py
@@ -30,7 +30,7 @@ import time
from importlib import import_module
from packaging import version
-from moulinette import prompt, m18n
+from moulinette import Moulinette, m18n
from moulinette.utils.log import getActionLogger
from moulinette.utils.process import check_output, call_async_output
from moulinette.utils.filesystem import read_yaml, write_to_yaml
@@ -692,7 +692,7 @@ def tools_shutdown(operation_logger, force=False):
if not shutdown:
try:
# Ask confirmation for server shutdown
- i = prompt(m18n.n("server_shutdown_confirm", answers="y/N"))
+ i = Moulinette.prompt(m18n.n("server_shutdown_confirm", answers="y/N"))
except NotImplemented:
pass
else:
@@ -711,7 +711,7 @@ def tools_reboot(operation_logger, force=False):
if not reboot:
try:
# Ask confirmation for restoring
- i = prompt(m18n.n("server_reboot_confirm", answers="y/N"))
+ i = Moulinette.prompt(m18n.n("server_reboot_confirm", answers="y/N"))
except NotImplemented:
pass
else:
diff --git a/src/yunohost/user.py b/src/yunohost/user.py
index 0a624c4b3..01513f3bd 100644
--- a/src/yunohost/user.py
+++ b/src/yunohost/user.py
@@ -33,7 +33,7 @@ import string
import subprocess
import copy
-from moulinette import prompt, display, msettings, m18n
+from moulinette import Moulinette, m18n
from moulinette.utils.log import getActionLogger
from moulinette.utils.process import check_output
@@ -117,18 +117,18 @@ def user_create(
# Validate domain used for email address/xmpp account
if domain is None:
- if msettings.get("interface") == "api":
+ if Moulinette.interface.type == "api":
raise YunohostValidationError(
"Invalid usage, you should specify a domain argument"
)
else:
# On affiche les differents domaines possibles
- display(m18n.n("domains_available"))
+ Moulinette.display(m18n.n("domains_available"))
for domain in domain_list()["domains"]:
- display("- {}".format(domain))
+ Moulinette.display("- {}".format(domain))
maindomain = _get_maindomain()
- domain = prompt(
+ domain = Moulinette.prompt(
m18n.n("ask_user_domain") + " (default: %s)" % maindomain
)
if not domain:
@@ -379,8 +379,8 @@ def user_update(
# when in the cli interface if the option to change the password is called
# without a specified value, change_password will be set to the const 0.
# In this case we prompt for the new password.
- if msettings.get("interface") == "cli" and not change_password:
- change_password = prompt(m18n.n("ask_password"), True, True)
+ if Moulinette.interface.type == "cli" and not change_password:
+ change_password = Moulinette.prompt(m18n.n("ask_password"), True, True)
# Ensure sufficiently complex password
assert_password_is_strong_enough("user", change_password)