diff --git a/base_import_odoo/models/import_odoo_database.py b/base_import_odoo/models/import_odoo_database.py index 5869507bf..f30eaf361 100644 --- a/base_import_odoo/models/import_odoo_database.py +++ b/base_import_odoo/models/import_odoo_database.py @@ -151,7 +151,8 @@ class ImportOdooDatabase(models.Model): ) try: self._run_import_model(context) - except: + except: # noqa: E722 + # pragma: no cover error = traceback.format_exc() self.env.cr.rollback() self.write({ @@ -186,6 +187,11 @@ class ImportOdooDatabase(models.Model): context, model, data, create_dummy=False, ) if (model._name, data['id']) in context.idmap: + # one of our mappings hit, create an xmlid to persist + # this knowledge + self._create_record_xmlid( + model, context.idmap[(model._name, data['id'])], data['id'] + ) if self.duplicates == 'skip': # there's a mapping for this record, nothing to do continue @@ -203,6 +209,7 @@ class ImportOdooDatabase(models.Model): xmlid = '%d-%s-%d' % ( self.id, model._name.replace('.', '_'), _id or 0, ) + record = self._create_record_filter_fields(model, record) new = self.env.ref('base_import_odoo.%s' % xmlid, False) if new and new.exists(): if self.duplicates == 'overwrite_empty': @@ -219,19 +226,35 @@ class ImportOdooDatabase(models.Model): new = model.with_context( **self._create_record_context(model, record) ).create(record) - self.env['ir.model.data'].create({ - 'name': xmlid, - 'model': model._name, - 'module': 'base_import_odoo', - 'res_id': new.id, - 'noupdate': True, - 'import_database_id': self.id, - 'import_database_record_id': _id, - }) + self._create_record_xmlid(model, new.id, _id) _logger.debug('Created record %s', xmlid) context.idmap[mapping_key(model._name, _id)] = new.id return new + def _create_record_xmlid(self, model, local_id, remote_id): + xmlid = '%d-%s-%d' % ( + self.id, model._name.replace('.', '_'), remote_id or 0, + ) + if self.env.ref('base_import_odoo.%s' % xmlid, False): + return + return self.env['ir.model.data'].create({ + 'name': xmlid, + 'model': model._name, + 'module': 'base_import_odoo', + 'res_id': local_id, + 'noupdate': True, + 'import_database_id': self.id, + 'import_database_record_id': remote_id, + }) + + def _create_record_filter_fields(self, model, record): + """Return a version of record with unknown fields for model removed""" + return { + key: value + for key, value in record.items() + if key in model._fields + } + def _create_record_context(self, model, record): """Return a context that is used when creating a record""" context = {