mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
Propagate changes from moulinette : get rid of msettings, and prompt/display are also wrapped in a 'Moulinette' object
This commit is contained in:
parent
5e2478d309
commit
a2009d6a9a
9 changed files with 41 additions and 40 deletions
|
@ -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:
|
||||
|
|
|
@ -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."
|
||||
)
|
||||
|
|
|
@ -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("<cmd>", "'").replace("</cmd>", "'")
|
||||
s = html_tags.sub("", s.replace("<br>", "\n"))
|
||||
else:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue