From 95f5e2abaf2ed9fedcdf85617c53f74bf0e8a0c3 Mon Sep 17 00:00:00 2001 From: Guewen Baconnier Date: Wed, 25 Jul 2018 17:23:46 +0200 Subject: [PATCH] Add tests and support of _inherits --- server_environment/models/server_env_mixin.py | 12 ++++++++---- server_environment/tests/common.py | 16 ++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/server_environment/models/server_env_mixin.py b/server_environment/models/server_env_mixin.py index c4f4503..72eb23b 100644 --- a/server_environment/models/server_env_mixin.py +++ b/server_environment/models/server_env_mixin.py @@ -339,9 +339,9 @@ class ServerEnvMixin(models.AbstractModel): inverse_method_name = '_inverse_server_env_%s' % field.name inverse_method = partialmethod( - ServerEnvMixin._inverse_server_env, field.name + type(self)._inverse_server_env, field.name ) - setattr(ServerEnvMixin, inverse_method_name, inverse_method) + setattr(type(self), inverse_method_name, inverse_method) field.inverse = inverse_method_name field.store = False field.required = False @@ -356,7 +356,9 @@ class ServerEnvMixin(models.AbstractModel): and in the views to add 'readonly' on the fields. """ fieldname = self._server_env_is_editable_fieldname(base_field.name) - if fieldname not in self._fields: + # if the field is inherited, it's a related to its delegated model + # (inherits), we want to override it with a new one + if fieldname not in self._fields or self._fields[fieldname].inherited: field = fields.Boolean( compute='_compute_server_env_is_editable', automatic=True, @@ -378,7 +380,9 @@ class ServerEnvMixin(models.AbstractModel): fieldname = self._server_env_default_fieldname(base_field.name) if not fieldname: return - if fieldname not in self._fields: + # if the field is inherited, it's a related to its delegated model + # (inherits), we want to override it with a new one + if fieldname not in self._fields or self._fields[fieldname].inherited: base_field_cls = base_field.__class__ field_args = base_field.args.copy() field_args.pop('_sequence', None) diff --git a/server_environment/tests/common.py b/server_environment/tests/common.py index 37f3fb0..7ea1256 100644 --- a/server_environment/tests/common.py +++ b/server_environment/tests/common.py @@ -9,6 +9,9 @@ from odoo.tests import common from odoo.addons.server_environment import server_env from odoo.tools.config import config +import odoo.addons.server_environment.models.server_env_mixin as \ + server_env_mixin + class ServerEnvironmentCase(common.TransactionCase): @@ -41,3 +44,16 @@ class ServerEnvironmentCase(common.TransactionCase): newkeys['SERVER_ENV_CONFIG_SECRET'] = secret with patch.dict('os.environ', newkeys): yield + + @contextmanager + def load_config(self, public=None, secret=None): + original_serv_config = server_env_mixin.serv_config + try: + with self.set_config_dir(None), \ + self.set_env_variables(public, secret): + parser = server_env._load_config() + server_env_mixin.serv_config = parser + yield + + finally: + server_env_mixin.serv_config = original_serv_config