").replace("
[^";]+)'), dkim_content, re.M | re.S
+ '[^"]*"v=(?P [^";]+)'), dkim_content, re.M | re.S
)
else:
dkim = re.match((
r'^(?P [^";]+)'), dkim_content, re.M | re.S
+ '[^"]*"v=(?P [^";]+)'), dkim_content, re.M | re.S
)
if not dkim:
diff --git a/src/yunohost/firewall.py b/src/yunohost/firewall.py
index 4c3cfb0f7..c17e958e7 100644
--- a/src/yunohost/firewall.py
+++ b/src/yunohost/firewall.py
@@ -24,7 +24,6 @@
Manage firewall rules
"""
import os
-import sys
import yaml
import miniupnpc
diff --git a/src/yunohost/hook.py b/src/yunohost/hook.py
index 2c0340ce3..5b38d5fb5 100644
--- a/src/yunohost/hook.py
+++ b/src/yunohost/hook.py
@@ -268,9 +268,9 @@ def hook_callback(action, hooks=[], args=None, no_trace=False, chdir=None,
# Validate callbacks
if not callable(pre_callback):
- pre_callback = lambda name, priority, path, args: args
+ def pre_callback(name, priority, path, args): return args
if not callable(post_callback):
- post_callback = lambda name, priority, path, succeed: None
+ def post_callback(name, priority, path, succeed): return None
# Iterate over hooks and execute them
for priority in sorted(hooks_dict):
@@ -281,7 +281,7 @@ def hook_callback(action, hooks=[], args=None, no_trace=False, chdir=None,
hook_args = pre_callback(name=name, priority=priority,
path=path, args=args)
hook_return = hook_exec(path, args=hook_args, chdir=chdir, env=env,
- no_trace=no_trace, raise_on_error=True)[1]
+ no_trace=no_trace, raise_on_error=True)[1]
except YunohostError as e:
state = 'failed'
hook_return = {}
@@ -291,9 +291,9 @@ def hook_callback(action, hooks=[], args=None, no_trace=False, chdir=None,
else:
post_callback(name=name, priority=priority, path=path,
succeed=True)
- if not name in result:
+ if name not in result:
result[name] = {}
- result[name][path] = {'state' : state, 'stdreturn' : hook_return }
+ result[name][path] = {'state': state, 'stdreturn': hook_return}
return result
@@ -444,17 +444,17 @@ def _hook_exec_python(path, args, env, loggers):
dir_ = os.path.dirname(path)
name = os.path.splitext(os.path.basename(path))[0]
- if not dir_ in sys.path:
+ if dir_ not in sys.path:
sys.path = [dir_] + sys.path
module = import_module(name)
ret = module.main(args, env, loggers)
# # Assert that the return is a (int, dict) tuple
assert isinstance(ret, tuple) \
- and len(ret) == 2 \
- and isinstance(ret[0],int) \
- and isinstance(ret[1],dict), \
- "Module %s did not return a (int, dict) tuple !" % module
+ and len(ret) == 2 \
+ and isinstance(ret[0], int) \
+ and isinstance(ret[1], dict), \
+ "Module %s did not return a (int, dict) tuple !" % module
return ret
diff --git a/src/yunohost/log.py b/src/yunohost/log.py
index 892105c6b..88da1ebf0 100644
--- a/src/yunohost/log.py
+++ b/src/yunohost/log.py
@@ -270,7 +270,7 @@ def log_display(path, number=None, share=False, filter_irrelevant=False, with_su
if os.path.exists(log_path):
from yunohost.service import _tail
if number and filters:
- logs = _tail(log_path, int(number*4))
+ logs = _tail(log_path, int(number * 4))
elif number:
logs = _tail(log_path, int(number))
else:
diff --git a/src/yunohost/permission.py b/src/yunohost/permission.py
index 67a0f57b0..cd81489a2 100644
--- a/src/yunohost/permission.py
+++ b/src/yunohost/permission.py
@@ -31,7 +31,6 @@ import random
from moulinette import m18n
from moulinette.utils.log import getActionLogger
from yunohost.utils.error import YunohostError
-from yunohost.user import user_list
from yunohost.log import is_unit_operation
logger = getActionLogger('yunohost.user')
diff --git a/src/yunohost/regenconf.py b/src/yunohost/regenconf.py
index 6c9b10aac..6b369fc8c 100644
--- a/src/yunohost/regenconf.py
+++ b/src/yunohost/regenconf.py
@@ -21,7 +21,6 @@
import os
import yaml
-import json
import subprocess
import shutil
import hashlib
@@ -31,7 +30,6 @@ from datetime import datetime
from moulinette import m18n
from moulinette.utils import log, filesystem
-from moulinette.utils.filesystem import read_file
from yunohost.utils.error import YunohostError
from yunohost.log import is_unit_operation
@@ -49,7 +47,7 @@ logger = log.getActionLogger('yunohost.regenconf')
# FIXME : check for all reference of 'service' close to operation_logger stuff
@is_unit_operation([('names', 'configuration')])
def regen_conf(operation_logger, names=[], with_diff=False, force=False, dry_run=False,
- list_pending=False):
+ list_pending=False):
"""
Regenerate the configuration file(s)
diff --git a/src/yunohost/service.py b/src/yunohost/service.py
index 522395718..084df471d 100644
--- a/src/yunohost/service.py
+++ b/src/yunohost/service.py
@@ -654,7 +654,6 @@ def _tail(file, n):
avg_line_length = 74
to_read = n
-
try:
if file.endswith(".gz"):
import gzip
diff --git a/src/yunohost/settings.py b/src/yunohost/settings.py
index 9b8589d35..0f8860529 100644
--- a/src/yunohost/settings.py
+++ b/src/yunohost/settings.py
@@ -15,6 +15,7 @@ logger = getActionLogger('yunohost.settings')
SETTINGS_PATH = "/etc/yunohost/settings.json"
SETTINGS_PATH_OTHER_LOCATION = "/etc/yunohost/settings-%s.json"
+
def is_boolean(value):
"""
Ensure a string value is intended as a boolean
@@ -60,11 +61,11 @@ DEFAULTS = OrderedDict([
("service.ssh.allow_deprecated_dsa_hostkey", {"type": "bool", "default": False}),
("security.ssh.compatibility", {"type": "enum", "default": "modern",
- "choices": ["intermediate", "modern"]}),
+ "choices": ["intermediate", "modern"]}),
("security.nginx.compatibility", {"type": "enum", "default": "intermediate",
- "choices": ["intermediate", "modern"]}),
+ "choices": ["intermediate", "modern"]}),
("security.postfix.compatibility", {"type": "enum", "default": "intermediate",
- "choices": ["intermediate", "modern"]}),
+ "choices": ["intermediate", "modern"]}),
("pop3.enabled", {"type": "bool", "default": False}),
("smtp.allow_ipv6", {"type": "bool", "default": True}),
@@ -321,17 +322,20 @@ def reconfigure_nginx(setting_name, old_value, new_value):
if old_value != new_value:
service_regen_conf(names=['nginx'])
+
@post_change_hook("security.ssh.compatibility")
def reconfigure_ssh(setting_name, old_value, new_value):
if old_value != new_value:
service_regen_conf(names=['ssh'])
+
@post_change_hook("smtp.allow_ipv6")
@post_change_hook("security.postfix.compatibility")
def reconfigure_postfix(setting_name, old_value, new_value):
if old_value != new_value:
service_regen_conf(names=['postfix'])
+
@post_change_hook("pop3.enabled")
def reconfigure_dovecot(setting_name, old_value, new_value):
dovecot_package = 'dovecot-pop3d'
diff --git a/src/yunohost/tests/conftest.py b/src/yunohost/tests/conftest.py
index 1bfbd0cec..2bda72852 100644
--- a/src/yunohost/tests/conftest.py
+++ b/src/yunohost/tests/conftest.py
@@ -18,10 +18,12 @@ def clone_test_app(request):
else:
os.system("cd %s/apps && git pull > /dev/null 2>&1" % cwd)
+
def get_test_apps_dir():
cwd = os.path.split(os.path.realpath(__file__))[0]
return os.path.join(cwd, "apps")
+
@contextmanager
def message(mocker, key, **kwargs):
mocker.spy(m18n, "n")
@@ -38,7 +40,6 @@ def raiseYunohostError(mocker, key, **kwargs):
assert e_info._excinfo[1].kwargs == kwargs
-
def pytest_addoption(parser):
parser.addoption("--yunodebug", action="store_true", default=False)
@@ -56,12 +57,15 @@ def new_translate(self, key, *args, **kwargs):
raise KeyError("Unable to retrieve key %s for default locale !" % key)
return old_translate(self, key, *args, **kwargs)
+
+
moulinette.core.Translator.translate = new_translate
def new_m18nn(self, key, *args, **kwargs):
return self._namespaces[self._current_namespace].translate(key, *args, **kwargs)
+
moulinette.core.Moulinette18n.n = new_m18nn
#
diff --git a/src/yunohost/tests/test_apps_arguments_parsing.py b/src/yunohost/tests/test_apps_arguments_parsing.py
index a3d5b7f09..03ed9e93a 100644
--- a/src/yunohost/tests/test_apps_arguments_parsing.py
+++ b/src/yunohost/tests/test_apps_arguments_parsing.py
@@ -40,21 +40,21 @@ def test_parse_args_in_yunohost_format_empty():
def test_parse_args_in_yunohost_format_string():
- questions = [{"name": "some_string", "type": "string",}]
+ questions = [{"name": "some_string", "type": "string", }]
answers = {"some_string": "some_value"}
expected_result = OrderedDict({"some_string": ("some_value", "string")})
assert _parse_args_in_yunohost_format(answers, questions) == expected_result
def test_parse_args_in_yunohost_format_string_default_type():
- questions = [{"name": "some_string",}]
+ questions = [{"name": "some_string", }]
answers = {"some_string": "some_value"}
expected_result = OrderedDict({"some_string": ("some_value", "string")})
assert _parse_args_in_yunohost_format(answers, questions) == expected_result
def test_parse_args_in_yunohost_format_string_no_input():
- questions = [{"name": "some_string",}]
+ questions = [{"name": "some_string", }]
answers = {}
with pytest.raises(YunohostError):
@@ -62,7 +62,7 @@ def test_parse_args_in_yunohost_format_string_no_input():
def test_parse_args_in_yunohost_format_string_input():
- questions = [{"name": "some_string", "ask": "some question",}]
+ questions = [{"name": "some_string", "ask": "some question", }]
answers = {}
expected_result = OrderedDict({"some_string": ("some_value", "string")})
@@ -72,7 +72,7 @@ def test_parse_args_in_yunohost_format_string_input():
@pytest.mark.skip # that shit should work x(
def test_parse_args_in_yunohost_format_string_input_no_ask():
- questions = [{"name": "some_string",}]
+ questions = [{"name": "some_string", }]
answers = {}
expected_result = OrderedDict({"some_string": ("some_value", "string")})
@@ -81,14 +81,14 @@ def test_parse_args_in_yunohost_format_string_input_no_ask():
def test_parse_args_in_yunohost_format_string_no_input_optional():
- questions = [{"name": "some_string", "optional": True,}]
+ questions = [{"name": "some_string", "optional": True, }]
answers = {}
expected_result = OrderedDict({"some_string": ("", "string")})
assert _parse_args_in_yunohost_format(answers, questions) == expected_result
def test_parse_args_in_yunohost_format_string_optional_with_input():
- questions = [{"name": "some_string", "ask": "some question", "optional": True,}]
+ questions = [{"name": "some_string", "ask": "some question", "optional": True, }]
answers = {}
expected_result = OrderedDict({"some_string": ("some_value", "string")})
@@ -98,7 +98,7 @@ def test_parse_args_in_yunohost_format_string_optional_with_input():
@pytest.mark.skip # this should work without ask
def test_parse_args_in_yunohost_format_string_optional_with_input_without_ask():
- questions = [{"name": "some_string", "optional": True,}]
+ questions = [{"name": "some_string", "optional": True, }]
answers = {}
expected_result = OrderedDict({"some_string": ("some_value", "string")})
@@ -108,7 +108,7 @@ def test_parse_args_in_yunohost_format_string_optional_with_input_without_ask():
def test_parse_args_in_yunohost_format_string_no_input_default():
questions = [
- {"name": "some_string", "ask": "some question", "default": "some_value",}
+ {"name": "some_string", "ask": "some question", "default": "some_value", }
]
answers = {}
expected_result = OrderedDict({"some_string": ("some_value", "string")})
@@ -117,7 +117,7 @@ def test_parse_args_in_yunohost_format_string_no_input_default():
def test_parse_args_in_yunohost_format_string_input_test_ask():
ask_text = "some question"
- questions = [{"name": "some_string", "ask": ask_text,}]
+ questions = [{"name": "some_string", "ask": ask_text, }]
answers = {}
with patch.object(msignals, "prompt", return_value="some_value") as prompt:
@@ -128,7 +128,7 @@ def test_parse_args_in_yunohost_format_string_input_test_ask():
def test_parse_args_in_yunohost_format_string_input_test_ask_with_default():
ask_text = "some question"
default_text = "some example"
- questions = [{"name": "some_string", "ask": ask_text, "default": default_text,}]
+ questions = [{"name": "some_string", "ask": ask_text, "default": default_text, }]
answers = {}
with patch.object(msignals, "prompt", return_value="some_value") as prompt:
@@ -140,7 +140,7 @@ def test_parse_args_in_yunohost_format_string_input_test_ask_with_default():
def test_parse_args_in_yunohost_format_string_input_test_ask_with_example():
ask_text = "some question"
example_text = "some example"
- questions = [{"name": "some_string", "ask": ask_text, "example": example_text,}]
+ questions = [{"name": "some_string", "ask": ask_text, "example": example_text, }]
answers = {}
with patch.object(msignals, "prompt", return_value="some_value") as prompt:
@@ -153,7 +153,7 @@ def test_parse_args_in_yunohost_format_string_input_test_ask_with_example():
def test_parse_args_in_yunohost_format_string_input_test_ask_with_help():
ask_text = "some question"
help_text = "some_help"
- questions = [{"name": "some_string", "ask": ask_text, "help": help_text,}]
+ questions = [{"name": "some_string", "ask": ask_text, "help": help_text, }]
answers = {}
with patch.object(msignals, "prompt", return_value="some_value") as prompt:
@@ -188,7 +188,7 @@ def test_parse_args_in_yunohost_format_string_with_choice_bad():
def test_parse_args_in_yunohost_format_string_with_choice_ask():
ask_text = "some question"
choices = ["fr", "en", "es", "it", "ru"]
- questions = [{"name": "some_string", "ask": ask_text, "choices": choices,}]
+ questions = [{"name": "some_string", "ask": ask_text, "choices": choices, }]
answers = {}
with patch.object(msignals, "prompt", return_value="ru") as prompt:
@@ -214,14 +214,14 @@ def test_parse_args_in_yunohost_format_string_with_choice_default():
def test_parse_args_in_yunohost_format_password():
- questions = [{"name": "some_password", "type": "password",}]
+ questions = [{"name": "some_password", "type": "password", }]
answers = {"some_password": "some_value"}
expected_result = OrderedDict({"some_password": ("some_value", "password")})
assert _parse_args_in_yunohost_format(answers, questions) == expected_result
def test_parse_args_in_yunohost_format_password_no_input():
- questions = [{"name": "some_password", "type": "password",}]
+ questions = [{"name": "some_password", "type": "password", }]
answers = {}
with pytest.raises(YunohostError):
@@ -229,7 +229,7 @@ def test_parse_args_in_yunohost_format_password_no_input():
def test_parse_args_in_yunohost_format_password_input():
- questions = [{"name": "some_password", "type": "password", "ask": "some question",}]
+ questions = [{"name": "some_password", "type": "password", "ask": "some question", }]
answers = {}
expected_result = OrderedDict({"some_password": ("some_value", "password")})
@@ -239,7 +239,7 @@ def test_parse_args_in_yunohost_format_password_input():
@pytest.mark.skip # that shit should work x(
def test_parse_args_in_yunohost_format_password_input_no_ask():
- questions = [{"name": "some_password", "type": "password",}]
+ questions = [{"name": "some_password", "type": "password", }]
answers = {}
expected_result = OrderedDict({"some_password": ("some_value", "password")})
@@ -248,7 +248,7 @@ def test_parse_args_in_yunohost_format_password_input_no_ask():
def test_parse_args_in_yunohost_format_password_no_input_optional():
- questions = [{"name": "some_password", "type": "password", "optional": True,}]
+ questions = [{"name": "some_password", "type": "password", "optional": True, }]
answers = {}
expected_result = OrderedDict({"some_password": ("", "password")})
assert _parse_args_in_yunohost_format(answers, questions) == expected_result
@@ -272,7 +272,7 @@ def test_parse_args_in_yunohost_format_password_optional_with_input():
@pytest.mark.skip # this should work without ask
def test_parse_args_in_yunohost_format_password_optional_with_input_without_ask():
- questions = [{"name": "some_password", "type": "password", "optional": True,}]
+ questions = [{"name": "some_password", "type": "password", "optional": True, }]
answers = {}
expected_result = OrderedDict({"some_password": ("some_value", "password")})
@@ -316,7 +316,7 @@ def test_parse_args_in_yunohost_format_password_no_input_example():
def test_parse_args_in_yunohost_format_password_input_test_ask():
ask_text = "some question"
- questions = [{"name": "some_password", "type": "password", "ask": ask_text,}]
+ questions = [{"name": "some_password", "type": "password", "ask": ask_text, }]
answers = {}
with patch.object(msignals, "prompt", return_value="some_value") as prompt:
@@ -365,14 +365,14 @@ def test_parse_args_in_yunohost_format_password_input_test_ask_with_help():
def test_parse_args_in_yunohost_format_path():
- questions = [{"name": "some_path", "type": "path",}]
+ questions = [{"name": "some_path", "type": "path", }]
answers = {"some_path": "some_value"}
expected_result = OrderedDict({"some_path": ("some_value", "path")})
assert _parse_args_in_yunohost_format(answers, questions) == expected_result
def test_parse_args_in_yunohost_format_path_no_input():
- questions = [{"name": "some_path", "type": "path",}]
+ questions = [{"name": "some_path", "type": "path", }]
answers = {}
with pytest.raises(YunohostError):
@@ -380,7 +380,7 @@ def test_parse_args_in_yunohost_format_path_no_input():
def test_parse_args_in_yunohost_format_path_input():
- questions = [{"name": "some_path", "type": "path", "ask": "some question",}]
+ questions = [{"name": "some_path", "type": "path", "ask": "some question", }]
answers = {}
expected_result = OrderedDict({"some_path": ("some_value", "path")})
@@ -390,7 +390,7 @@ def test_parse_args_in_yunohost_format_path_input():
@pytest.mark.skip # that shit should work x(
def test_parse_args_in_yunohost_format_path_input_no_ask():
- questions = [{"name": "some_path", "type": "path",}]
+ questions = [{"name": "some_path", "type": "path", }]
answers = {}
expected_result = OrderedDict({"some_path": ("some_value", "path")})
@@ -399,7 +399,7 @@ def test_parse_args_in_yunohost_format_path_input_no_ask():
def test_parse_args_in_yunohost_format_path_no_input_optional():
- questions = [{"name": "some_path", "type": "path", "optional": True,}]
+ questions = [{"name": "some_path", "type": "path", "optional": True, }]
answers = {}
expected_result = OrderedDict({"some_path": ("", "path")})
assert _parse_args_in_yunohost_format(answers, questions) == expected_result
@@ -407,7 +407,7 @@ def test_parse_args_in_yunohost_format_path_no_input_optional():
def test_parse_args_in_yunohost_format_path_optional_with_input():
questions = [
- {"name": "some_path", "ask": "some question", "type": "path", "optional": True,}
+ {"name": "some_path", "ask": "some question", "type": "path", "optional": True, }
]
answers = {}
expected_result = OrderedDict({"some_path": ("some_value", "path")})
@@ -418,7 +418,7 @@ def test_parse_args_in_yunohost_format_path_optional_with_input():
@pytest.mark.skip # this should work without ask
def test_parse_args_in_yunohost_format_path_optional_with_input_without_ask():
- questions = [{"name": "some_path", "type": "path", "optional": True,}]
+ questions = [{"name": "some_path", "type": "path", "optional": True, }]
answers = {}
expected_result = OrderedDict({"some_path": ("some_value", "path")})
@@ -442,7 +442,7 @@ def test_parse_args_in_yunohost_format_path_no_input_default():
def test_parse_args_in_yunohost_format_path_input_test_ask():
ask_text = "some question"
- questions = [{"name": "some_path", "type": "path", "ask": ask_text,}]
+ questions = [{"name": "some_path", "type": "path", "ask": ask_text, }]
answers = {}
with patch.object(msignals, "prompt", return_value="some_value") as prompt:
@@ -454,7 +454,7 @@ def test_parse_args_in_yunohost_format_path_input_test_ask_with_default():
ask_text = "some question"
default_text = "some example"
questions = [
- {"name": "some_path", "type": "path", "ask": ask_text, "default": default_text,}
+ {"name": "some_path", "type": "path", "ask": ask_text, "default": default_text, }
]
answers = {}
@@ -468,7 +468,7 @@ def test_parse_args_in_yunohost_format_path_input_test_ask_with_example():
ask_text = "some question"
example_text = "some example"
questions = [
- {"name": "some_path", "type": "path", "ask": ask_text, "example": example_text,}
+ {"name": "some_path", "type": "path", "ask": ask_text, "example": example_text, }
]
answers = {}
@@ -483,7 +483,7 @@ def test_parse_args_in_yunohost_format_path_input_test_ask_with_help():
ask_text = "some question"
help_text = "some_help"
questions = [
- {"name": "some_path", "type": "path", "ask": ask_text, "help": help_text,}
+ {"name": "some_path", "type": "path", "ask": ask_text, "help": help_text, }
]
answers = {}
@@ -494,89 +494,89 @@ def test_parse_args_in_yunohost_format_path_input_test_ask_with_help():
def test_parse_args_in_yunohost_format_boolean():
- questions = [{"name": "some_boolean", "type": "boolean",}]
+ questions = [{"name": "some_boolean", "type": "boolean", }]
answers = {"some_boolean": "y"}
expected_result = OrderedDict({"some_boolean": (1, "boolean")})
assert _parse_args_in_yunohost_format(answers, questions) == expected_result
def test_parse_args_in_yunohost_format_boolean_all_yes():
- questions = [{"name": "some_boolean", "type": "boolean",}]
+ questions = [{"name": "some_boolean", "type": "boolean", }]
expected_result = OrderedDict({"some_boolean": (1, "boolean")})
assert (
- _parse_args_in_yunohost_format({"some_boolean": "y"}, questions)
- == expected_result
+ _parse_args_in_yunohost_format({"some_boolean": "y"}, questions) ==
+ expected_result
)
assert (
- _parse_args_in_yunohost_format({"some_boolean": "Y"}, questions)
- == expected_result
+ _parse_args_in_yunohost_format({"some_boolean": "Y"}, questions) ==
+ expected_result
)
assert (
- _parse_args_in_yunohost_format({"some_boolean": "yes"}, questions)
- == expected_result
+ _parse_args_in_yunohost_format({"some_boolean": "yes"}, questions) ==
+ expected_result
)
assert (
- _parse_args_in_yunohost_format({"some_boolean": "Yes"}, questions)
- == expected_result
+ _parse_args_in_yunohost_format({"some_boolean": "Yes"}, questions) ==
+ expected_result
)
assert (
- _parse_args_in_yunohost_format({"some_boolean": "YES"}, questions)
- == expected_result
+ _parse_args_in_yunohost_format({"some_boolean": "YES"}, questions) ==
+ expected_result
)
assert (
- _parse_args_in_yunohost_format({"some_boolean": "1"}, questions)
- == expected_result
+ _parse_args_in_yunohost_format({"some_boolean": "1"}, questions) ==
+ expected_result
)
assert (
- _parse_args_in_yunohost_format({"some_boolean": 1}, questions)
- == expected_result
+ _parse_args_in_yunohost_format({"some_boolean": 1}, questions) ==
+ expected_result
)
assert (
- _parse_args_in_yunohost_format({"some_boolean": True}, questions)
- == expected_result
+ _parse_args_in_yunohost_format({"some_boolean": True}, questions) ==
+ expected_result
)
def test_parse_args_in_yunohost_format_boolean_all_no():
- questions = [{"name": "some_boolean", "type": "boolean",}]
+ questions = [{"name": "some_boolean", "type": "boolean", }]
expected_result = OrderedDict({"some_boolean": (0, "boolean")})
assert (
- _parse_args_in_yunohost_format({"some_boolean": "n"}, questions)
- == expected_result
+ _parse_args_in_yunohost_format({"some_boolean": "n"}, questions) ==
+ expected_result
)
assert (
- _parse_args_in_yunohost_format({"some_boolean": "N"}, questions)
- == expected_result
+ _parse_args_in_yunohost_format({"some_boolean": "N"}, questions) ==
+ expected_result
)
assert (
- _parse_args_in_yunohost_format({"some_boolean": "no"}, questions)
- == expected_result
+ _parse_args_in_yunohost_format({"some_boolean": "no"}, questions) ==
+ expected_result
)
assert (
- _parse_args_in_yunohost_format({"some_boolean": "No"}, questions)
- == expected_result
+ _parse_args_in_yunohost_format({"some_boolean": "No"}, questions) ==
+ expected_result
)
assert (
- _parse_args_in_yunohost_format({"some_boolean": "No"}, questions)
- == expected_result
+ _parse_args_in_yunohost_format({"some_boolean": "No"}, questions) ==
+ expected_result
)
assert (
- _parse_args_in_yunohost_format({"some_boolean": "0"}, questions)
- == expected_result
+ _parse_args_in_yunohost_format({"some_boolean": "0"}, questions) ==
+ expected_result
)
assert (
- _parse_args_in_yunohost_format({"some_boolean": 0}, questions)
- == expected_result
+ _parse_args_in_yunohost_format({"some_boolean": 0}, questions) ==
+ expected_result
)
assert (
- _parse_args_in_yunohost_format({"some_boolean": False}, questions)
- == expected_result
+ _parse_args_in_yunohost_format({"some_boolean": False}, questions) ==
+ expected_result
)
# XXX apparently boolean are always False (0) by default, I'm not sure what to think about that
def test_parse_args_in_yunohost_format_boolean_no_input():
- questions = [{"name": "some_boolean", "type": "boolean",}]
+ questions = [{"name": "some_boolean", "type": "boolean", }]
answers = {}
expected_result = OrderedDict({"some_boolean": (0, "boolean")})
@@ -584,7 +584,7 @@ def test_parse_args_in_yunohost_format_boolean_no_input():
def test_parse_args_in_yunohost_format_boolean_bad_input():
- questions = [{"name": "some_boolean", "type": "boolean",}]
+ questions = [{"name": "some_boolean", "type": "boolean", }]
answers = {"some_boolean": "stuff"}
with pytest.raises(YunohostError):
@@ -592,7 +592,7 @@ def test_parse_args_in_yunohost_format_boolean_bad_input():
def test_parse_args_in_yunohost_format_boolean_input():
- questions = [{"name": "some_boolean", "type": "boolean", "ask": "some question",}]
+ questions = [{"name": "some_boolean", "type": "boolean", "ask": "some question", }]
answers = {}
expected_result = OrderedDict({"some_boolean": (1, "boolean")})
@@ -606,7 +606,7 @@ def test_parse_args_in_yunohost_format_boolean_input():
@pytest.mark.skip # we should work
def test_parse_args_in_yunohost_format_boolean_input_no_ask():
- questions = [{"name": "some_boolean", "type": "boolean",}]
+ questions = [{"name": "some_boolean", "type": "boolean", }]
answers = {}
expected_result = OrderedDict({"some_boolean": ("some_value", "boolean")})
@@ -615,7 +615,7 @@ def test_parse_args_in_yunohost_format_boolean_input_no_ask():
def test_parse_args_in_yunohost_format_boolean_no_input_optional():
- questions = [{"name": "some_boolean", "type": "boolean", "optional": True,}]
+ questions = [{"name": "some_boolean", "type": "boolean", "optional": True, }]
answers = {}
expected_result = OrderedDict({"some_boolean": (0, "boolean")}) # default to false
assert _parse_args_in_yunohost_format(answers, questions) == expected_result
@@ -638,7 +638,7 @@ def test_parse_args_in_yunohost_format_boolean_optional_with_input():
def test_parse_args_in_yunohost_format_boolean_optional_with_input_without_ask():
- questions = [{"name": "some_boolean", "type": "boolean", "optional": True,}]
+ questions = [{"name": "some_boolean", "type": "boolean", "optional": True, }]
answers = {}
expected_result = OrderedDict({"some_boolean": (0, "boolean")})
@@ -677,7 +677,7 @@ def test_parse_args_in_yunohost_format_boolean_bad_default():
def test_parse_args_in_yunohost_format_boolean_input_test_ask():
ask_text = "some question"
- questions = [{"name": "some_boolean", "type": "boolean", "ask": ask_text,}]
+ questions = [{"name": "some_boolean", "type": "boolean", "ask": ask_text, }]
answers = {}
with patch.object(msignals, "prompt", return_value=0) as prompt:
@@ -704,7 +704,7 @@ def test_parse_args_in_yunohost_format_boolean_input_test_ask_with_default():
def test_parse_args_in_yunohost_format_domain_empty():
- questions = [{"name": "some_domain", "type": "domain",}]
+ questions = [{"name": "some_domain", "type": "domain", }]
answers = {}
with patch.object(
@@ -719,7 +719,7 @@ def test_parse_args_in_yunohost_format_domain_empty():
def test_parse_args_in_yunohost_format_domain():
main_domain = "my_main_domain.com"
domains = [main_domain]
- questions = [{"name": "some_domain", "type": "domain",}]
+ questions = [{"name": "some_domain", "type": "domain", }]
answers = {"some_domain": main_domain}
expected_result = OrderedDict({"some_domain": (main_domain, "domain")})
@@ -735,7 +735,7 @@ def test_parse_args_in_yunohost_format_domain_two_domains():
other_domain = "some_other_domain.tld"
domains = [main_domain, other_domain]
- questions = [{"name": "some_domain", "type": "domain",}]
+ questions = [{"name": "some_domain", "type": "domain", }]
answers = {"some_domain": other_domain}
expected_result = OrderedDict({"some_domain": (other_domain, "domain")})
@@ -758,7 +758,7 @@ def test_parse_args_in_yunohost_format_domain_two_domains_wrong_answer():
other_domain = "some_other_domain.tld"
domains = [main_domain, other_domain]
- questions = [{"name": "some_domain", "type": "domain",}]
+ questions = [{"name": "some_domain", "type": "domain", }]
answers = {"some_domain": "doesnt_exist.pouet"}
with patch.object(
@@ -774,7 +774,7 @@ def test_parse_args_in_yunohost_format_domain_two_domains_default_no_ask():
other_domain = "some_other_domain.tld"
domains = [main_domain, other_domain]
- questions = [{"name": "some_domain", "type": "domain",}]
+ questions = [{"name": "some_domain", "type": "domain", }]
answers = {}
expected_result = OrderedDict({"some_domain": (main_domain, "domain")})
@@ -831,7 +831,7 @@ def test_parse_args_in_yunohost_format_user_empty():
}
}
- questions = [{"name": "some_user", "type": "user",}]
+ questions = [{"name": "some_user", "type": "user", }]
answers = {}
with patch.object(user, "user_list", return_value={"users": users}):
@@ -852,7 +852,7 @@ def test_parse_args_in_yunohost_format_user():
}
}
- questions = [{"name": "some_user", "type": "user",}]
+ questions = [{"name": "some_user", "type": "user", }]
answers = {"some_user": username}
expected_result = OrderedDict({"some_user": (username, "user")})
@@ -883,7 +883,7 @@ def test_parse_args_in_yunohost_format_user_two_users():
},
}
- questions = [{"name": "some_user", "type": "user",}]
+ questions = [{"name": "some_user", "type": "user", }]
answers = {"some_user": other_user}
expected_result = OrderedDict({"some_user": (other_user, "user")})
@@ -919,7 +919,7 @@ def test_parse_args_in_yunohost_format_user_two_users_wrong_answer():
},
}
- questions = [{"name": "some_user", "type": "user",}]
+ questions = [{"name": "some_user", "type": "user", }]
answers = {"some_user": "doesnt_exist.pouet"}
with patch.object(user, "user_list", return_value={"users": users}):
@@ -1002,7 +1002,7 @@ def test_parse_args_in_yunohost_format_app_empty():
}
]
- questions = [{"name": "some_app", "type": "app",}]
+ questions = [{"name": "some_app", "type": "app", }]
answers = {}
with patch.object(app, "app_list", return_value={"apps": apps}):
@@ -1012,7 +1012,7 @@ def test_parse_args_in_yunohost_format_app_empty():
def test_parse_args_in_yunohost_format_app_no_apps():
apps = []
- questions = [{"name": "some_app", "type": "app",}]
+ questions = [{"name": "some_app", "type": "app", }]
answers = {}
with patch.object(app, "app_list", return_value={"apps": apps}):
@@ -1041,7 +1041,7 @@ def test_parse_args_in_yunohost_format_app():
}
]
- questions = [{"name": "some_app", "type": "app",}]
+ questions = [{"name": "some_app", "type": "app", }]
answers = {"some_app": app_name}
expected_result = OrderedDict({"some_app": (app_name, "app")})
@@ -1072,7 +1072,7 @@ def test_parse_args_in_yunohost_format_app_two_apps():
},
]
- questions = [{"name": "some_app", "type": "app",}]
+ questions = [{"name": "some_app", "type": "app", }]
answers = {"some_app": other_app}
expected_result = OrderedDict({"some_app": (other_app, "app")})
@@ -1112,7 +1112,7 @@ def test_parse_args_in_yunohost_format_app_two_apps_wrong_answer():
},
]
- questions = [{"name": "some_app", "type": "app",}]
+ questions = [{"name": "some_app", "type": "app", }]
answers = {"some_app": "doesnt_exist"}
with pytest.raises(YunohostError):
diff --git a/src/yunohost/tests/test_appscatalog.py b/src/yunohost/tests/test_appscatalog.py
index 40cf1489f..a173501d3 100644
--- a/src/yunohost/tests/test_appscatalog.py
+++ b/src/yunohost/tests/test_appscatalog.py
@@ -6,7 +6,7 @@ import glob
import shutil
from moulinette import m18n
-from moulinette.utils.filesystem import read_json, write_to_json, write_to_yaml, mkdir
+from moulinette.utils.filesystem import read_json, write_to_json, write_to_yaml
from yunohost.utils.error import YunohostError
from yunohost.app import (_initialize_apps_catalog_system,
@@ -37,10 +37,12 @@ DUMMY_APP_CATALOG = """{
}
"""
+
class AnyStringWith(str):
def __eq__(self, other):
return self in other
+
def setup_function(function):
# Clear apps catalog cache
@@ -165,6 +167,7 @@ def test_apps_catalog_update_404(mocker):
_update_apps_catalog()
m18n.n.assert_any_call("apps_catalog_failed_to_download")
+
def test_apps_catalog_update_timeout(mocker):
# Initialize ...
@@ -237,7 +240,6 @@ def test_apps_catalog_load_with_empty_cache(mocker):
m18n.n.assert_any_call("apps_catalog_obsolete_cache")
m18n.n.assert_any_call("apps_catalog_update_success")
-
# Cache shouldn't be empty anymore empty
assert glob.glob(APPS_CATALOG_CACHE + "/*")
diff --git a/src/yunohost/tests/test_backuprestore.py b/src/yunohost/tests/test_backuprestore.py
index 8de06cb7b..725f0c8b7 100644
--- a/src/yunohost/tests/test_backuprestore.py
+++ b/src/yunohost/tests/test_backuprestore.py
@@ -16,6 +16,7 @@ from yunohost.hook import CUSTOM_HOOK_FOLDER
# Get main domain
maindomain = ""
+
def setup_function(function):
global maindomain
@@ -32,7 +33,7 @@ def setup_function(function):
assert len(backup_list()["archives"]) == 0
- markers = [m.name for m in function.__dict__.get("pytestmark",[])]
+ markers = [m.name for m in function.__dict__.get("pytestmark", [])]
if "with_wordpress_archive_from_2p4" in markers:
add_archive_wordpress_from_2p4()
@@ -75,7 +76,7 @@ def teardown_function(function):
delete_all_backups()
uninstall_test_apps_if_needed()
- markers = [m.name for m in function.__dict__.get("pytestmark",[])]
+ markers = [m.name for m in function.__dict__.get("pytestmark", [])]
if "clean_opt_dir" in markers:
shutil.rmtree("/opt/test_backup_output_directory")
@@ -90,6 +91,7 @@ def check_LDAP_db_integrity_call():
yield
check_LDAP_db_integrity()
+
@pytest.fixture(autouse=True)
def check_permission_for_apps_call():
check_permission_for_apps()
@@ -100,6 +102,7 @@ def check_permission_for_apps_call():
# Helpers #
#
+
def app_is_installed(app):
if app == "permissions_app":
@@ -184,22 +187,22 @@ def add_archive_wordpress_from_2p4():
os.system("mkdir -p /home/yunohost.backup/archives")
- os.system("cp " + os.path.join(get_test_apps_dir(), "backup_wordpress_from_2p4/backup.info.json") + \
- " /home/yunohost.backup/archives/backup_wordpress_from_2p4.info.json")
+ os.system("cp " + os.path.join(get_test_apps_dir(), "backup_wordpress_from_2p4/backup.info.json")
+ + " /home/yunohost.backup/archives/backup_wordpress_from_2p4.info.json")
- os.system("cp " + os.path.join(get_test_apps_dir(), "backup_wordpress_from_2p4/backup.tar.gz") + \
- " /home/yunohost.backup/archives/backup_wordpress_from_2p4.tar.gz")
+ os.system("cp " + os.path.join(get_test_apps_dir(), "backup_wordpress_from_2p4/backup.tar.gz")
+ + " /home/yunohost.backup/archives/backup_wordpress_from_2p4.tar.gz")
def add_archive_system_from_2p4():
os.system("mkdir -p /home/yunohost.backup/archives")
- os.system("cp " + os.path.join(get_test_apps_dir(), "backup_system_from_2p4/backup.info.json") + \
- " /home/yunohost.backup/archives/backup_system_from_2p4.info.json")
+ os.system("cp " + os.path.join(get_test_apps_dir(), "backup_system_from_2p4/backup.info.json")
+ + " /home/yunohost.backup/archives/backup_system_from_2p4.info.json")
- os.system("cp " + os.path.join(get_test_apps_dir(), "backup_system_from_2p4/backup.tar.gz") + \
- " /home/yunohost.backup/archives/backup_system_from_2p4.tar.gz")
+ os.system("cp " + os.path.join(get_test_apps_dir(), "backup_system_from_2p4/backup.tar.gz")
+ + " /home/yunohost.backup/archives/backup_system_from_2p4.tar.gz")
#
# System backup #
@@ -309,7 +312,7 @@ def test_backup_script_failure_handling(monkeypatch, mocker):
# with the expected error message key
monkeypatch.setattr("yunohost.backup.hook_exec", custom_hook_exec)
- with message(mocker, 'backup_app_failed', app='backup_recommended_app'):
+ with message(mocker, 'backup_app_failed', app='backup_recommended_app'):
with raiseYunohostError(mocker, 'backup_nothings_done'):
backup_create(system=None, apps=["backup_recommended_app"])
@@ -499,6 +502,7 @@ def test_backup_and_restore_with_ynh_restore(mocker):
_test_backup_and_restore_app(mocker, "backup_recommended_app")
+
@pytest.mark.with_permission_app_installed
def test_backup_and_restore_permission_app(mocker):
@@ -548,7 +552,7 @@ def _test_backup_and_restore_app(mocker, app):
# Uninstall the app
app_remove(app)
assert not app_is_installed(app)
- assert app+".main" not in user_permission_list()['permissions']
+ assert app + ".main" not in user_permission_list()['permissions']
# Restore the app
with message(mocker, "restore_complete"):
@@ -559,7 +563,7 @@ def _test_backup_and_restore_app(mocker, app):
# Check permission
per_list = user_permission_list()['permissions']
- assert app+".main" in per_list
+ assert app + ".main" in per_list
#
# Some edge cases #
@@ -577,6 +581,7 @@ def test_restore_archive_with_no_json(mocker):
with raiseYunohostError(mocker, 'backup_archive_cant_retrieve_info_json'):
backup_restore(name="badbackup", force=True)
+
@pytest.mark.with_wordpress_archive_from_2p4
def test_restore_archive_with_bad_archive(mocker):
@@ -605,9 +610,9 @@ def test_restore_archive_with_custom_hook(mocker):
# Restore system with custom hook
with message(mocker, "restore_complete"):
backup_restore(name=backup_list()["archives"][0],
- system=[],
- apps=None,
- force=True)
+ system=[],
+ apps=None,
+ force=True)
os.system("rm %s/99-yolo" % custom_restore_hook_folder)
diff --git a/src/yunohost/tests/test_changeurl.py b/src/yunohost/tests/test_changeurl.py
index b1bedc7eb..ecd926a2e 100644
--- a/src/yunohost/tests/test_changeurl.py
+++ b/src/yunohost/tests/test_changeurl.py
@@ -13,6 +13,7 @@ from yunohost.utils.error import YunohostError
# Get main domain
maindomain = ""
+
def setup_function(function):
global maindomain
maindomain = _get_maindomain()
diff --git a/src/yunohost/tests/test_permission.py b/src/yunohost/tests/test_permission.py
index fdfeb141c..1055089e0 100644
--- a/src/yunohost/tests/test_permission.py
+++ b/src/yunohost/tests/test_permission.py
@@ -1,14 +1,15 @@
+import socket
import requests
import pytest
import os
from conftest import message, raiseYunohostError, get_test_apps_dir
-from yunohost.app import app_install, app_remove, app_change_url, app_list, app_map, _installed_apps
+from yunohost.app import app_install, app_remove, app_change_url, app_map, _installed_apps
from yunohost.user import user_list, user_create, user_delete, \
- user_group_list, user_group_delete
+ user_group_list, user_group_delete
from yunohost.permission import user_permission_update, user_permission_list, user_permission_reset, \
- permission_create, permission_delete, permission_url
+ permission_create, permission_delete, permission_url
from yunohost.domain import _get_maindomain
# Get main domain
@@ -17,10 +18,10 @@ dummy_password = "test123Ynh"
# Dirty patch of DNS resolution. Force the DNS to 127.0.0.1 address even if dnsmasq have the public address.
# Mainly used for 'can_access_webpage' function
-import socket
prv_getaddrinfo = socket.getaddrinfo
+
def clean_user_groups_permission():
for u in user_list()['users']:
user_delete(u)
@@ -44,6 +45,7 @@ def setup_function(function):
# Dirty patch of DNS resolution. Force the DNS to 127.0.0.1 address even if dnsmasq have the public address.
# Mainly used for 'can_access_webpage' function
dns_cache = {(maindomain, 443, 0, 1): [(2, 1, 6, '', ('127.0.0.1', 443))]}
+
def new_getaddrinfo(*args):
try:
return dns_cache[args]
@@ -370,16 +372,6 @@ def test_permission_reset_idempotency():
assert set(res['blog.main']['corresponding_users']) == set(["alice", "bob"])
-def test_permission_reset_idempotency():
- # Reset permission
- user_permission_reset("blog.main")
- user_permission_reset("blog.main")
-
- res = user_permission_list(full=True)['permissions']
- assert res['blog.main']['allowed'] == ["all_users"]
- assert set(res['blog.main']['corresponding_users']) == set(["alice", "bob"])
-
-
#
# Error on update function
#
@@ -407,6 +399,7 @@ def test_permission_redefine_url():
res = user_permission_list(full=True)['permissions']
assert res["blog.main"]["url"] == "/pwet"
+
def test_permission_remove_url():
permission_url("blog.main", url=None)
@@ -499,9 +492,9 @@ def test_permission_app_propagation_on_ssowat():
# alice gotta be allowed on the main permission to access the admin tho
user_permission_update("permissions_app.main", remove="bob", add="all_users")
- assert not can_access_webpage(app_webroot+"/admin", logged_as=None)
- assert can_access_webpage(app_webroot+"/admin", logged_as="alice")
- assert not can_access_webpage(app_webroot+"/admin", logged_as="bob")
+ assert not can_access_webpage(app_webroot + "/admin", logged_as=None)
+ assert can_access_webpage(app_webroot + "/admin", logged_as="alice")
+ assert not can_access_webpage(app_webroot + "/admin", logged_as="bob")
def test_permission_legacy_app_propagation_on_ssowat():
diff --git a/src/yunohost/tests/test_regenconf.py b/src/yunohost/tests/test_regenconf.py
index 426f62da4..4e1ae679b 100644
--- a/src/yunohost/tests/test_regenconf.py
+++ b/src/yunohost/tests/test_regenconf.py
@@ -9,6 +9,7 @@ TEST_DOMAIN_NGINX_CONFIG = "/etc/nginx/conf.d/%s.conf" % TEST_DOMAIN
TEST_DOMAIN_DNSMASQ_CONFIG = "/etc/dnsmasq.d/%s" % TEST_DOMAIN
SSHD_CONFIG = "/etc/ssh/sshd_config"
+
def setup_function(function):
_force_clear_hashes([TEST_DOMAIN_NGINX_CONFIG])
@@ -169,7 +170,7 @@ def test_stale_hashes_if_file_manually_deleted():
# ... Anyway, the proper way to write these tests would be to use a dummy
# regen-conf hook just for tests but meh I'm lazy
#
-#def test_stale_hashes_if_file_manually_modified():
+# def test_stale_hashes_if_file_manually_modified():
# """
# Same as other test, but manually delete the file in between and check
# behavior
diff --git a/src/yunohost/tests/test_service.py b/src/yunohost/tests/test_service.py
index f91a601c4..d0a3d4fc2 100644
--- a/src/yunohost/tests/test_service.py
+++ b/src/yunohost/tests/test_service.py
@@ -64,11 +64,13 @@ def test_service_add():
service_add("dummyservice", description="A dummy service to run tests")
assert "dummyservice" in service_status().keys()
+
def test_service_add_real_service():
service_add("networking")
assert "networking" in service_status().keys()
+
def test_service_remove():
service_add("dummyservice", description="A dummy service to run tests")
diff --git a/src/yunohost/tests/test_settings.py b/src/yunohost/tests/test_settings.py
index 3fdfce67c..0a717192c 100644
--- a/src/yunohost/tests/test_settings.py
+++ b/src/yunohost/tests/test_settings.py
@@ -13,6 +13,7 @@ DEFAULTS["example.int"] = {"type": "int", "default": 42}
DEFAULTS["example.string"] = {"type": "string", "default": "yolo swag"}
DEFAULTS["example.enum"] = {"type": "enum", "default": "a", "choices": ["a", "b", "c"]}
+
def setup_function(function):
os.system("mv /etc/yunohost/settings.json /etc/yunohost/settings.json.saved")
@@ -64,10 +65,11 @@ def test_settings_list():
def test_settings_set():
settings_set("example.bool", False)
- assert settings_get("example.bool") == False
+ assert settings_get("example.bool") is False
settings_set("example.bool", "on")
- assert settings_get("example.bool") == True
+ assert settings_get("example.bool") is True
+
def test_settings_set_int():
settings_set("example.int", 21)
diff --git a/src/yunohost/tests/test_user-group.py b/src/yunohost/tests/test_user-group.py
index 361b411f3..964f2dd72 100644
--- a/src/yunohost/tests/test_user-group.py
+++ b/src/yunohost/tests/test_user-group.py
@@ -3,7 +3,7 @@ import pytest
from conftest import message, raiseYunohostError
from yunohost.user import user_list, user_info, user_create, user_delete, user_update, \
- user_group_list, user_group_create, user_group_delete, user_group_update
+ user_group_list, user_group_create, user_group_delete, user_group_update
from yunohost.domain import _get_maindomain
from yunohost.tests.test_permission import check_LDAP_db_integrity
diff --git a/src/yunohost/tools.py b/src/yunohost/tools.py
index b6d45b03c..fcc2810d6 100644
--- a/src/yunohost/tools.py
+++ b/src/yunohost/tools.py
@@ -26,10 +26,8 @@
import re
import os
import yaml
-import json
import subprocess
import pwd
-import socket
from importlib import import_module
from moulinette import msignals, m18n
@@ -37,8 +35,8 @@ from moulinette.utils.log import getActionLogger
from moulinette.utils.process import check_output, call_async_output
from moulinette.utils.filesystem import read_json, write_to_json, read_yaml, write_to_yaml
-from yunohost.app import _update_apps_catalog, app_info, app_upgrade, app_ssowatconf, app_list, _initialize_apps_catalog_system
-from yunohost.domain import domain_add, domain_list
+from yunohost.app import _update_apps_catalog, app_info, app_upgrade, _initialize_apps_catalog_system
+from yunohost.domain import domain_add
from yunohost.dyndns import _dyndns_available, _dyndns_provides
from yunohost.firewall import firewall_upnp
from yunohost.service import service_start, service_enable
@@ -53,9 +51,11 @@ MIGRATIONS_STATE_PATH = "/etc/yunohost/migrations.yaml"
logger = getActionLogger('yunohost.tools')
+
def tools_versions():
return ynh_packages_version()
+
def tools_ldapinit():
"""
YunoHost LDAP initialization
@@ -118,7 +118,7 @@ def tools_ldapinit():
if not os.path.isdir('/home/{0}'.format("admin")):
logger.warning(m18n.n('user_home_creation_failed'),
exc_info=1)
-
+
logger.success(m18n.n('ldap_initialized'))
@@ -148,7 +148,7 @@ def tools_adminpw(new_password, check_strength=True):
ldap = _get_ldap_interface()
try:
- ldap.update("cn=admin", {"userPassword": [ new_hash ], })
+ ldap.update("cn=admin", {"userPassword": [new_hash], })
except:
logger.exception('unable to change admin password')
raise YunohostError('admin_password_change_failed')
@@ -601,7 +601,6 @@ def tools_upgrade(operation_logger, apps=None, system=False, allow_yunohost_upgr
logger.debug("Running apt command :\n{}".format(dist_upgrade))
-
def is_relevant(l):
irrelevants = [
"service sudo-ldap already provided",
@@ -938,7 +937,7 @@ def _migrate_legacy_migration_json():
# Extract the list of migration ids
from . import data_migrations
migrations_path = data_migrations.__path__[0]
- migration_files = filter(lambda x: re.match("^\d+_[a-zA-Z0-9_]+\.py$", x), os.listdir(migrations_path))
+ migration_files = filter(lambda x: re.match(r"^\d+_[a-zA-Z0-9_]+\.py$", x), os.listdir(migrations_path))
# (here we remove the .py extension and make sure the ids are sorted)
migration_ids = sorted([f.rsplit(".", 1)[0] for f in migration_files])
@@ -987,7 +986,7 @@ def _get_migrations_list():
# (in particular, pending migrations / not already ran are not listed
states = tools_migrations_state()["migrations"]
- for migration_file in filter(lambda x: re.match("^\d+_[a-zA-Z0-9_]+\.py$", x), os.listdir(migrations_path)):
+ for migration_file in filter(lambda x: re.match(r"^\d+_[a-zA-Z0-9_]+\.py$", x), os.listdir(migrations_path)):
m = _load_migration(migration_file)
m.state = states.get(m.id, "pending")
migrations.append(m)
@@ -1006,7 +1005,7 @@ def _get_migration_by_name(migration_name):
raise AssertionError("Unable to find migration with name %s" % migration_name)
migrations_path = data_migrations.__path__[0]
- migrations_found = filter(lambda x: re.match("^\d+_%s\.py$" % migration_name, x), os.listdir(migrations_path))
+ migrations_found = filter(lambda x: re.match(r"^\d+_%s\.py$" % migration_name, x), os.listdir(migrations_path))
assert len(migrations_found) == 1, "Unable to find migration with name %s" % migration_name
@@ -1050,7 +1049,7 @@ class Migration(object):
# Those are to be implemented by daughter classes
mode = "auto"
- dependencies = [] # List of migration ids required before running this migration
+ dependencies = [] # List of migration ids required before running this migration
@property
def disclaimer(self):
diff --git a/src/yunohost/user.py b/src/yunohost/user.py
index 77062b6da..2cabd1509 100644
--- a/src/yunohost/user.py
+++ b/src/yunohost/user.py
@@ -27,7 +27,6 @@ import os
import re
import pwd
import grp
-import json
import crypt
import random
import string
@@ -36,7 +35,6 @@ import copy
from moulinette import msignals, msettings, m18n
from moulinette.utils.log import getActionLogger
-from moulinette.utils.filesystem import read_json, write_to_json, read_yaml, write_to_yaml
from yunohost.utils.error import YunohostError
from yunohost.service import service_status
@@ -240,7 +238,6 @@ def user_delete(operation_logger, username, purge=False):
"""
from yunohost.hook import hook_callback
from yunohost.utils.ldap import _get_ldap_interface
- from yunohost.permission import permission_sync_to_user
if username not in user_list()["users"]:
raise YunohostError('user_unknown', user=username)
diff --git a/src/yunohost/utils/error.py b/src/yunohost/utils/error.py
index 75cf35093..f2486473b 100644
--- a/src/yunohost/utils/error.py
+++ b/src/yunohost/utils/error.py
@@ -33,8 +33,8 @@ class YunohostError(MoulinetteError):
"""
def __init__(self, key, raw_msg=False, *args, **kwargs):
- self.key = key # Saving the key is useful for unit testing
- self.kwargs = kwargs # Saving the key is useful for unit testing
+ self.key = key # Saving the key is useful for unit testing
+ self.kwargs = kwargs # Saving the key is useful for unit testing
if raw_msg:
msg = key
else:
diff --git a/src/yunohost/utils/ldap.py b/src/yunohost/utils/ldap.py
index b1f49e287..f16472e28 100644
--- a/src/yunohost/utils/ldap.py
+++ b/src/yunohost/utils/ldap.py
@@ -29,19 +29,20 @@ from yunohost.utils.error import YunohostError
# to avoid re-authenticating in case we call _get_ldap_authenticator multiple times
_ldap_interface = None
+
def _get_ldap_interface():
global _ldap_interface
if _ldap_interface is None:
- conf = { "vendor": "ldap",
- "name": "as-root",
- "parameters": { 'uri': 'ldapi://%2Fvar%2Frun%2Fslapd%2Fldapi',
- 'base_dn': 'dc=yunohost,dc=org',
- 'user_rdn': 'gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth' },
- "extra": {}
- }
+ conf = {"vendor": "ldap",
+ "name": "as-root",
+ "parameters": {'uri': 'ldapi://%2Fvar%2Frun%2Fslapd%2Fldapi',
+ 'base_dn': 'dc=yunohost,dc=org',
+ 'user_rdn': 'gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth'},
+ "extra": {}
+ }
try:
_ldap_interface = ldap.Authenticator(**conf)
@@ -82,4 +83,5 @@ def _destroy_ldap_interface():
if _ldap_interface is not None:
del _ldap_interface
+
atexit.register(_destroy_ldap_interface)
diff --git a/src/yunohost/utils/network.py b/src/yunohost/utils/network.py
index 4bb0b288a..909e14784 100644
--- a/src/yunohost/utils/network.py
+++ b/src/yunohost/utils/network.py
@@ -58,6 +58,7 @@ def get_public_ip_from_remote_server(protocol=4):
# If we are indeed connected in ipv4 or ipv6, we should find a default route
routes = check_output("ip -%s route show table all" % protocol).split("\n")
+
def is_default_route(r):
# Typically the default route starts with "default"
# But of course IPv6 is more complex ... e.g. on internet cube there's
diff --git a/src/yunohost/utils/password.py b/src/yunohost/utils/password.py
index b4f7025f7..e7ff6c275 100644
--- a/src/yunohost/utils/password.py
+++ b/src/yunohost/utils/password.py
@@ -63,7 +63,7 @@ class PasswordValidator(object):
settings = json.load(open('/etc/yunohost/settings.json', "r"))
setting_key = "security.password." + profile + ".strength"
self.validation_strength = int(settings[setting_key]["value"])
- except Exception as e:
+ except Exception:
# Fallback to default value if we can't fetch settings for some reason
self.validation_strength = 1
@@ -83,11 +83,7 @@ class PasswordValidator(object):
# on top (at least not the moulinette ones)
# because the moulinette needs to be correctly initialized
# as well as modules available in python's path.
- import logging
from yunohost.utils.error import YunohostError
- from moulinette.utils.log import getActionLogger
-
- logger = logging.getLogger('yunohost.utils.password')
status, msg = self.validation_summary(password)
if status == "error":
diff --git a/src/yunohost/utils/yunopaste.py b/src/yunohost/utils/yunopaste.py
index dc8b6fb8d..9a406a580 100644
--- a/src/yunohost/utils/yunopaste.py
+++ b/src/yunohost/utils/yunopaste.py
@@ -10,6 +10,7 @@ from yunohost.utils.error import YunohostError
logger = logging.getLogger('yunohost.utils.yunopaste')
+
def yunopaste(data):
paste_server = "https://paste.yunohost.org"
@@ -44,7 +45,6 @@ def anonymize(data):
data = data.replace(domain.replace(".", "%2e"), redact.replace(".", "%2e"))
return data
-
# First, let's replace every occurence of the main domain by "domain.tld"
# This should cover a good fraction of the info leaked
main_domain = _get_maindomain()
diff --git a/tests/remove_stale_translated_strings.py b/tests/remove_stale_translated_strings.py
index 0213bc2be..cfecea348 100644
--- a/tests/remove_stale_translated_strings.py
+++ b/tests/remove_stale_translated_strings.py
@@ -1,4 +1,3 @@
-import re
import json
import glob
from collections import OrderedDict
@@ -14,6 +13,6 @@ for locale_file in locale_files:
print(locale_file)
this_locale = json.loads(open(locale_folder + locale_file).read(), object_pairs_hook=OrderedDict)
- this_locale_fixed = {k:v for k, v in this_locale.items() if k in reference}
+ this_locale_fixed = {k: v for k, v in this_locale.items() if k in reference}
json.dump(this_locale_fixed, open(locale_folder + locale_file, "w"), indent=4, ensure_ascii=False)
diff --git a/tests/test_actionmap.py b/tests/test_actionmap.py
index 08b868839..bf6755979 100644
--- a/tests/test_actionmap.py
+++ b/tests/test_actionmap.py
@@ -1,4 +1,5 @@
import yaml
+
def test_yaml_syntax():
yaml.load(open("data/actionsmap/yunohost.yml"))
diff --git a/tox.ini b/tox.ini
index 0c0b01a5e..6c1139d52 100644
--- a/tox.ini
+++ b/tox.ini
@@ -7,6 +7,6 @@ deps =
py{27,37}-{lint,invalidcode}: flake8
py37-black: black
commands =
- py{27,37}-lint: flake8 src doc data tests
- py{27,37}-invalidcode: flake8 src data --exclude src/yunohost/tests --select F --ignore F401,F841
- py37-black: black --check --diff src doc data tests
\ No newline at end of file
+ py{27,37}-lint: flake8 src doc data tests --ignore E402,E501 --exclude src/yunohost/vendor
+ py{27,37}-invalidcode: flake8 src data --exclude src/yunohost/tests,src/yunohost/vendor --select F
+ py37-black: black --check --diff src doc data tests