Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 7 additions & 16 deletions connector_extension/components/binder.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@

import psycopg2

import odoo
from odoo import _, fields, models
from odoo.exceptions import ValidationError
from odoo.osv import expression
Expand Down Expand Up @@ -97,7 +96,7 @@ def id2dict(self, _id, in_field=True, alt_field=False):
if not isinstance(_id, (tuple | list)):
_id = [_id]
fields = self.get_id_fields(in_field=in_field, alt_field=alt_field)
return dict(zip(fields, _id, strict=True))
return dict(zip(fields, _id, strict=False))
else:
return None

Expand Down Expand Up @@ -280,7 +279,6 @@ def bind_import(self, external_data, values, sync_date, for_create=False):
**self.id2dict(external_id, in_field=True),
}
)
self.env.cr.commit() # pylint: disable=E8102

def _prepare_binding_export_values(self, relation, external_data):
external_id = self.dict2id(external_data, in_field=False)
Expand Down Expand Up @@ -313,13 +311,6 @@ def bind_export(self, external_data, relation):
with self._retry_unique_violation():
values = self._prepare_binding_export_values(relation, external_data)
binding = self.model.with_context(connector_no_export=True).create(values)
# Eager commit to avoid having 2 jobs
# exporting at the same time. The constraint
# will pop if an other job already created
# the same binding. It will be caught and
# raise a RetryableJobError.
if not odoo.tools.config["test_enable"]:
self.env.cr.commit() # pylint: disable=E8102
return binding

def _additional_external_binding_fields(self, external_data, relation):
Expand Down Expand Up @@ -478,15 +469,15 @@ def to_binding_from_internal_key(self, relation):
:param relation: odoo object, not a binding and without binding
:return: binding
"""
export_mapper = self.component(usage="export.mapper")
mapper_external_data = export_mapper.map_record(relation)
ext_alt_id = getattr(self, self._external_alt_field, None)
if not ext_alt_id:
id_values = {}
else:
if isinstance(ext_alt_id, str):
ext_alt_id = [ext_alt_id]

export_mapper = self.component(usage="export.mapper")
mapper_external_data = export_mapper.map_record(relation)
id_fields = mapper_external_data._mapper.get_target_fields(
mapper_external_data, fields=ext_alt_id
)
Expand Down Expand Up @@ -537,7 +528,7 @@ def to_binding_from_internal_key(self, relation):
import_mapper_exists = False
if not import_mapper_exists:
binding = self.bind_export(record, relation)
binding[self._sync_date_field] = fields.Datetime.now()
# binding[self._sync_date_field] = fields.Datetime.now()
if not binding:
raise InvalidDataError(
f"The binding with external id {external_id} "
Expand All @@ -563,9 +554,9 @@ def get_external_dict_ids(self, relation, check_external_id=True):
external_id = self.to_external(relation, wrap=False)
if check_external_id:
assert external_id, (
f"Unexpected error on {relation._name}:"
"The backend id cannot be obtained."
"At this stage, the backend record should have "
f"Error on {relation._name}:"
"The external id cannot be obtained."
"At this stage, the external record should have "
"been already linked via "
"._export_dependencies. "
)
Expand Down
Loading