Skip to content

Commit 68444a4

Browse files
committed
Updates based on review.
1 parent ad37b20 commit 68444a4

File tree

3 files changed

+44
-8
lines changed

3 files changed

+44
-8
lines changed

cetmix_tower_yaml/models/cx_tower_scheduled_task_cv.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def _post_process_yaml_dict_values(self, values):
2424
variable_value = self.env["cx.tower.variable.value"].browse(
2525
variable_value_id
2626
)
27-
if variable_value:
27+
if variable_value.exists():
2828
res.update(
2929
{
3030
"name": variable_value.name,

cetmix_tower_yaml/models/cx_tower_yaml_mixin.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,14 @@ class CxTowerYamlMixin(models.AbstractModel):
7878

7979
def _compute_yaml_code(self):
8080
"""Compute YAML code based on model record data"""
81-
collector = YamlExportCollector()
82-
8381
# This is used for the file name.
8482
# Eg cx.tower.command record will have 'command_' prefix.
8583
for record in self:
84+
# Use a shared collector from context when one is provided (e.g. by
85+
# the export wizard for cross-record deduplication); otherwise use a
86+
# fresh per-record collector so that each record's yaml_code is
87+
# deterministic regardless of which sibling records are batched.
88+
collector = record._context.get("yaml_collector") or YamlExportCollector()
8689
# We are reading field list for each record
8790
# because list of fields can differ from record to record
8891
record.yaml_code = self._convert_dict_to_yaml(
@@ -227,7 +230,7 @@ def _get_deferred_x2m_import_fields(self):
227230

228231
def _has_meaningful_yaml_value(self, value):
229232
"""Return whether a YAML value contains meaningful payload."""
230-
if value in (False, None, ""):
233+
if value is False or value is None or value == "":
231234
return False
232235
if isinstance(value, dict):
233236
if set(value.keys()) == {"reference"}:

cetmix_tower_yaml/wizards/cx_tower_yaml_import_wiz.py

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,13 @@ def _apply_deferred_m2o_imports(self, deferred_queue):
162162
"""Resolve queued m2o imports after the main import pass."""
163163
unresolved = []
164164
for item in deferred_queue:
165-
record = self.env[item["record_model"]].get_by_reference(
166-
item["record_reference"]
167-
)
165+
record_id = item.get("record_id")
166+
if record_id:
167+
record = self.env[item["record_model"]].browse(record_id).exists()
168+
else:
169+
record = self.env[item["record_model"]].get_by_reference(
170+
item["record_reference"]
171+
)
168172
target = self.env[item["target_model"]].get_by_reference(
169173
item["target_reference"]
170174
)
@@ -197,7 +201,11 @@ def _apply_deferred_x2m_imports(self, deferred_queue):
197201
unresolved = []
198202
for item in deferred_queue:
199203
owner_model = self.env[item["record_model"]]
200-
owner_record = owner_model.get_by_reference(item["record_reference"])
204+
record_id = item.get("record_id")
205+
if record_id:
206+
owner_record = owner_model.browse(record_id).exists()
207+
else:
208+
owner_record = owner_model.get_by_reference(item["record_reference"])
201209
target_record = self.env[item["target_model"]].get_by_reference(
202210
item["target_reference"]
203211
)
@@ -228,6 +236,17 @@ def _apply_deferred_x2m_imports(self, deferred_queue):
228236
_("Deferred relation resolution failed:\n%(details)s", details=details)
229237
)
230238

239+
def _tag_deferred_queue_items(self, queue, start, record_id):
240+
"""Stamp all queue items added since *start* with the owner record ID.
241+
242+
Args:
243+
queue (list): The deferred import queue (m2o or x2m).
244+
start (int): Index of the first item belonging to the current record.
245+
record_id (int): Database ID of the newly created/updated owner record.
246+
"""
247+
for item in queue[start:]:
248+
item["record_id"] = record_id
249+
231250
def action_import_yaml(self):
232251
"""Process YAML data and create records in Odoo"""
233252

@@ -248,6 +267,8 @@ def action_import_yaml(self):
248267
with self.env.cr.savepoint():
249268
# Process each record
250269
for record in records:
270+
m2o_start = len(deferred_m2o_queue)
271+
x2m_start = len(deferred_x2m_queue)
251272
record_reference = record.get("reference")
252273
if not record_reference:
253274
raise ValidationError(_("Record reference is missing"))
@@ -294,6 +315,12 @@ def action_import_yaml(self):
294315
error=e,
295316
)
296317
) from e
318+
self._tag_deferred_queue_items(
319+
deferred_m2o_queue, m2o_start, odoo_record.id
320+
)
321+
self._tag_deferred_queue_items(
322+
deferred_x2m_queue, x2m_start, odoo_record.id
323+
)
297324
_logger.info(
298325
"Updated record '%s' in model '%s'",
299326
record_reference,
@@ -324,6 +351,12 @@ def action_import_yaml(self):
324351
error=e,
325352
)
326353
) from e
354+
self._tag_deferred_queue_items(
355+
deferred_m2o_queue, m2o_start, odoo_record.id
356+
)
357+
self._tag_deferred_queue_items(
358+
deferred_x2m_queue, x2m_start, odoo_record.id
359+
)
327360
_logger.info(
328361
"Created record '%s' in model '%s'",
329362
record_reference,

0 commit comments

Comments
 (0)