From 9829ccb997ad7d7948a148273ca897e2edd0a5c2 Mon Sep 17 00:00:00 2001 From: "Paolo Gatti (pgi)" Date: Fri, 5 Apr 2024 14:54:45 +0200 Subject: [PATCH] [IMP] account: Bring naming back to sanity `self.env.ref` -> kept of course `deref` -> `deref_values` as it derefers for all passed values. `defer` -> `delay` `ref` -> kept, there's no choice, it's used in too many places Also changed some variable names in the final loop for clarity `data` -> `model_data` `created_vals` -> `created_records` `create_vals` -> `all_records_vals` related PR: #148370 task-3607459 Part-of: odoo/odoo#157918 --- addons/account/models/chart_template.py | 36 ++++++++++++------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/addons/account/models/chart_template.py b/addons/account/models/chart_template.py index a4204b7e1ea..20f68f394e5 100644 --- a/addons/account/models/chart_template.py +++ b/addons/account/models/chart_template.py @@ -465,8 +465,8 @@ class AccountChartTemplate(models.AbstractModel): of accounts. It is a mapping {model: {xml_id: values}}. :type data: dict[str, dict[(str, int), dict]] """ - def deref(values, model): - """Replace xml_id references by database ids. + def deref_values(values, model): + """Replace xml_id references by database ids in all provided values. This allows to define all the data before the records even exist in the database. """ @@ -489,7 +489,7 @@ class AccountChartTemplate(models.AbstractModel): last_part = last_part[0] # (0, 0, {'test': 'account.ref_name'}) -> Command.Create({'test': 13}) if command in (Command.CREATE, Command.UPDATE): - deref(last_part, self.env[field.comodel_name]) + deref_values(last_part, self.env[field.comodel_name]) # (6, 0, ['account.ref_name']) -> Command.Set([13]) elif command == Command.SET: for subvalue_idx, subvalue in enumerate(last_part): @@ -505,10 +505,10 @@ class AccountChartTemplate(models.AbstractModel): ])] return values - def defer(all_data): + def delay(all_data): """Defer writing some relations if the related records don't exist yet.""" - def should_defer(created_models, yet_to_be_created_models, model, field_name, field_val, parent_models=None): + def should_delay(created_models, yet_to_be_created_models, model, field_name, field_val, parent_models=None): parent_models = (parent_models or []) + [model] field = self.env[model]._fields.get(field_name) if not field or not field.relational or field.comodel_name in created_models: @@ -521,7 +521,7 @@ class AccountChartTemplate(models.AbstractModel): match element: case Command.CREATE, _, dict() as values: for subkey, subvalue in values.items(): - if should_defer(created_models, yet_to_be_created_models, field.comodel_name, subkey, subvalue, parent_models): + if should_delay(created_models, yet_to_be_created_models, field.comodel_name, subkey, subvalue, parent_models): return True case int() as command, *_ if command in tuple(Command): if field_yet_to_be_created: @@ -536,7 +536,7 @@ class AccountChartTemplate(models.AbstractModel): for xml_id, vals in data.items(): to_be_removed = [] for field_name, field_val in vals.items(): - if should_defer(created_models, yet_to_be_created_models, model, field_name, field_val): + if should_delay(created_models, yet_to_be_created_models, model, field_name, field_val): to_be_removed.append(field_name) to_delay[xml_id][field_name] = field_val for field_name in to_be_removed: @@ -546,29 +546,29 @@ class AccountChartTemplate(models.AbstractModel): yield model, data created_models.add(model) - created_vals = {} - for model, data in defer(list(deepcopy(data).items())): - create_vals = [] - for xml_id, record in data.items(): + created_records = {} + for model, model_data in delay(list(deepcopy(data).items())): + all_records_vals = [] + for xml_id, record_vals in model_data.items(): # Extract the translations from the values - for key in list(record): + for key in list(record_vals): if '@' in key or key == '__translation_module__': - del record[key] + del record_vals[key] # Manage ids given as database id or xml_id if isinstance(xml_id, int): - record['id'] = xml_id + record_vals['id'] = xml_id xml_id = False else: xml_id = f"{('account.' + str(self.env.company.id) + '_') if '.' not in xml_id else ''}{xml_id}" - create_vals.append({ + all_records_vals.append({ 'xml_id': xml_id, - 'values': deref(record, self.env[model]), + 'values': deref_values(record_vals, self.env[model]), 'noupdate': True, }) - created_vals[model] = self.with_context(lang='en_US').env[model]._load_records(create_vals) - return created_vals + created_records[model] = self.with_context(lang='en_US').env[model]._load_records(all_records_vals) + return created_records def _post_load_data(self, template_code, company, template_data): company = (company or self.env.company)