Fix a few small issues in mixin

This commit is contained in:
Guewen Baconnier 2018-07-19 17:47:04 +02:00 committed by Stéphane Bidoul (ACSONE)
parent f7e207a1a1
commit 70d6966ce0
No known key found for this signature in database
GPG Key ID: BCAB2555446B5B92
1 changed files with 13 additions and 8 deletions

View File

@ -35,7 +35,7 @@ class ServerEnvMixin(models.AbstractModel):
By default, it looks for the configuration in a section named By default, it looks for the configuration in a section named
``[model_name.Record Name]`` where ``model_name`` is the ``_name`` of the ``[model_name.Record Name]`` where ``model_name`` is the ``_name`` of the
model with ``.`` replaced by ``_``. It can be customized by overriding the model with ``.`` replaced by ``_``. It can be customized by overriding the
method :meth:`~server_env_section_name`. method :meth:`~_server_env_section_name`.
For each field transformed to an env-computed field, a companion field For each field transformed to an env-computed field, a companion field
``<field>_env_default`` is automatically created. When it's value is set ``<field>_env_default`` is automatically created. When it's value is set
@ -111,17 +111,17 @@ class ServerEnvMixin(models.AbstractModel):
read from the ``<field>_env_default`` field from database. read from the ``<field>_env_default`` field from database.
""" """
for record in self: for record in self:
for field_name, getter_name in self._server_env_fields.items(): for field_name, getter_name in record._server_env_fields.items():
section_name = self._server_env_section_name() section_name = record._server_env_section_name()
if (section_name in serv_config if (section_name in serv_config
and field_name in serv_config[section_name]): and field_name in serv_config[section_name]):
value = self._server_env_read_from_config( value = record._server_env_read_from_config(
section_name, field_name, getter_name section_name, field_name, getter_name
) )
else: else:
default_field = self._server_env_default_fieldname( default_field = record._server_env_default_fieldname(
field_name field_name
) )
value = record[default_field] value = record[default_field]
@ -152,7 +152,8 @@ class ServerEnvMixin(models.AbstractModel):
is_editable_field = self._server_env_is_editable_fieldname( is_editable_field = self._server_env_is_editable_fieldname(
field_name field_name
) )
section_name = self._server_env_section_name()
section_name = record._server_env_section_name()
is_editable = not (section_name in serv_config is_editable = not (section_name in serv_config
and field_name in serv_config[section_name]) and field_name in serv_config[section_name])
record[is_editable_field] = is_editable record[is_editable_field] = is_editable
@ -211,6 +212,7 @@ class ServerEnvMixin(models.AbstractModel):
setattr(ServerEnvMixin, inverse_method_name, inverse_method) setattr(ServerEnvMixin, inverse_method_name, inverse_method)
field.inverse = inverse_method_name field.inverse = inverse_method_name
field.store = False field.store = False
field.required = False
field.copy = False field.copy = False
field.sparse = None field.sparse = None
@ -239,12 +241,15 @@ class ServerEnvMixin(models.AbstractModel):
fieldname = self._server_env_default_fieldname(base_field.name) fieldname = self._server_env_default_fieldname(base_field.name)
if fieldname not in self._fields: if fieldname not in self._fields:
base_field_cls = base_field.__class__ base_field_cls = base_field.__class__
field_args = base_field.args field_args = base_field.args.copy()
field_args.pop('_sequence', None) field_args.pop('_sequence', None)
field_args.update({ field_args.update({
'sparse': 'server_env_defaults', 'sparse': 'server_env_defaults',
'automatic': True, 'automatic': True,
}) })
if hasattr(base_field, 'selection'):
field_args['selection'] = base_field.selection
field = base_field_cls(**field_args) field = base_field_cls(**field_args)
self._add_field(fieldname, field) self._add_field(fieldname, field)
@ -253,6 +258,6 @@ class ServerEnvMixin(models.AbstractModel):
super()._setup_base() super()._setup_base()
for fieldname in self._server_env_fields: for fieldname in self._server_env_fields:
field = self._fields[fieldname] field = self._fields[fieldname]
self._server_env_add_default_field(field)
self._server_env_transform_field_to_read_from_env(field) self._server_env_transform_field_to_read_from_env(field)
self._server_env_add_is_editable_field(field) self._server_env_add_is_editable_field(field)
self._server_env_add_default_field(field)