diff --git a/server_environment/README.rst b/server_environment/README.rst index e7d66f985..407e2de24 100644 --- a/server_environment/README.rst +++ b/server_environment/README.rst @@ -68,6 +68,8 @@ used values are 'dev', 'test', 'production':: Values associated to keys containing 'passw' are only displayed in the 'dev' environment. +If you don't provide any value, `test` is used as a safe default. + You have several possibilities to set configuration values: server_environment_files diff --git a/server_environment/readme/CONFIGURE.rst b/server_environment/readme/CONFIGURE.rst index deca37ca9..6610f4493 100644 --- a/server_environment/readme/CONFIGURE.rst +++ b/server_environment/readme/CONFIGURE.rst @@ -8,6 +8,8 @@ used values are 'dev', 'test', 'production':: Values associated to keys containing 'passw' are only displayed in the 'dev' environment. +If you don't provide any value, `test` is used as a safe default. + You have several possibilities to set configuration values: server_environment_files diff --git a/server_environment/server_env.py b/server_environment/server_env.py index 4d2af55c6..1999d6ced 100644 --- a/server_environment/server_env.py +++ b/server_environment/server_env.py @@ -58,14 +58,20 @@ "off": False, } -if not system_base_config.get("running_env", False): - raise Exception( - "The parameter 'running_env' has not be set neither in base config " - "file option -c or in openerprc.\n" - "We strongly recommend against using the rc file but instead use an " - "explicit config file with this content:\n" - "[options]\nrunning_env = dev" - ) + +def _load_running_env(): + if not system_base_config.get("running_env"): + _logger.warning("`running_env` not found. Using default = `test`.") + _logger.warning( + "We strongly recommend against using the rc file but instead use an " + "explicit config file or env variable." + ) + # safe default + system_base_config["running_env"] = "test" + + +_load_running_env() + ck_path = None if _dir: @@ -184,9 +190,6 @@ def _build_model(cls, pool, cr): """ ModelClass = super(ServerConfiguration, cls)._build_model(pool, cr) ModelClass._add_columns() - ModelClass.running_env = system_base_config["running_env"] - # Only show passwords in development - ModelClass.show_passwords = ModelClass.running_env in ("dev",) ModelClass._arch = None ModelClass._build_osv() return ModelClass @@ -195,6 +198,10 @@ def _build_model(cls, pool, cr): def _format_key(cls, section, key): return "{}_I_{}".format(section, key) + @property + def show_passwords(self): + return system_base_config["running_env"] in ("dev",) + @classmethod def _format_key_display_name(cls, key_name): return key_name.replace("_I_", " | ") diff --git a/server_environment/static/description/index.html b/server_environment/static/description/index.html index 5ec96fc4c..d5348779e 100644 --- a/server_environment/static/description/index.html +++ b/server_environment/static/description/index.html @@ -424,6 +424,7 @@

Configuration

Values associated to keys containing ‘passw’ are only displayed in the ‘dev’ environment.

+

If you don’t provide any value, test is used as a safe default.

You have several possibilities to set configuration values:

server_environment_files

diff --git a/server_environment/tests/common.py b/server_environment/tests/common.py index 781ce2561..519706f9b 100644 --- a/server_environment/tests/common.py +++ b/server_environment/tests/common.py @@ -6,22 +6,12 @@ from unittest.mock import patch from odoo.tests import common -from odoo.tools.config import config import odoo.addons.server_environment.models.server_env_mixin as server_env_mixin from odoo.addons.server_environment import server_env class ServerEnvironmentCase(common.SavepointCase): - def setUp(self): - super().setUp() - self._original_running_env = config.get("running_env") - config["running_env"] = "testing" - - def tearDown(self): - super().tearDown() - config["running_env"] = self._original_running_env - @contextmanager def set_config_dir(self, path): original_dir = server_env._dir diff --git a/server_environment/tests/test_environment_variable.py b/server_environment/tests/test_environment_variable.py index 17474067f..5c21677ae 100644 --- a/server_environment/tests/test_environment_variable.py +++ b/server_environment/tests/test_environment_variable.py @@ -2,11 +2,22 @@ # License GPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from unittest.mock import patch + +from odoo.tools.config import config as odoo_config + from odoo.addons.server_environment import server_env from .common import ServerEnvironmentCase +class TestRunningEnvDefault(ServerEnvironmentCase): + def test_running_env_default(self): + """When var is not provided it defaults to `test`.""" + self.assertEqual(odoo_config["running_env"], "test") + + +@patch.dict(odoo_config.options, {"running_env": "testing"}) class TestEnvironmentVariables(ServerEnvironmentCase): def test_env_variables(self): public = "[section]\n" "foo=bar\n" "bar=baz\n" diff --git a/server_environment/tests/test_server_environment.py b/server_environment/tests/test_server_environment.py index 48df0cdc5..892e94ab8 100644 --- a/server_environment/tests/test_server_environment.py +++ b/server_environment/tests/test_server_environment.py @@ -1,5 +1,9 @@ # Copyright 2018 Camptocamp (https://www.camptocamp.com). # License GPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from unittest.mock import patch + +from odoo.tools.config import config as odoo_config + from .. import server_env from . import common @@ -10,7 +14,7 @@ def test_view(self): view = model.fields_view_get() self.assertTrue(view) - def test_default(self): + def _test_default(self, hidden_pwd=False): model = self.env["server.config"] rec = model.create({}) defaults = rec.default_get([]) @@ -19,10 +23,20 @@ def test_default(self): pass_checked = False for default in defaults: if "passw" in default: - self.assertNotEqual(defaults[default], "**********") + check = self.assertEqual if hidden_pwd else self.assertNotEqual + check(defaults[default], "**********") pass_checked = True self.assertTrue(pass_checked) + @patch.dict(odoo_config.options, {"running_env": "dev"}) + def test_default_dev(self): + self._test_default() + + @patch.dict(odoo_config.options, {"running_env": "whatever"}) + def test_default_non_dev_env(self): + self._test_default(hidden_pwd=True) + + @patch.dict(odoo_config.options, {"running_env": "testing"}) def test_value_retrival(self): with self.set_config_dir("testfiles"): parser = server_env._load_config()