Skip to content

Commit

Permalink
Merge PR OCA#128 into 16.0
Browse files Browse the repository at this point in the history
Signed-off-by simahawk
  • Loading branch information
OCA-git-bot committed Oct 16, 2023
2 parents e299a57 + 3c8dd6f commit 117da2d
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 8 deletions.
17 changes: 17 additions & 0 deletions connector_importer/components/dynamicmapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@ def dynamic_fields(self, record):
# Eg: prefix all supplier fields w/ `supplier.`
fname = fname[len(prefix) :]
clean_record[fname] = clean_record.pop(prefix + fname)
final_fname = self._get_field_name(fname, clean_record)
if final_fname != fname:
clean_record[final_fname] = clean_record.pop(fname)
fname = final_fname

if available_fields.get(fname):
fspec = available_fields.get(fname)
ftype = fspec["type"]
Expand Down Expand Up @@ -113,6 +118,18 @@ def _source_key_empty_skip(self):
def _source_key_prefix(self):
return self.work.options.mapper.get("source_key_prefix", "")

@property
def _source_key_rename(self):
return self.work.options.mapper.get("source_key_rename", {})

def _get_field_name(self, fname, clean_record):
"""Return final field name.
Field names can be manipulated via mapper option `source_key_rename`
which must be a dictionary w/ source name -> destination name.
"""
return self._source_key_rename.get(fname, fname)

def _is_xmlid_key(self, fname, ftype):
return fname.startswith("xid::") and ftype in (
"many2one",
Expand Down
30 changes: 22 additions & 8 deletions connector_importer/models/record.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,16 @@ def debug_mode(self):
self.ensure_one()
return self.backend_id.debug_mode or os.environ.get("IMPORTER_DEBUG_MODE")

def _should_use_jobs(self):
self.ensure_one()
debug_mode = self.debug_mode()
if debug_mode:
logger.warning("### DEBUG MODE ACTIVE: WILL NOT USE QUEUE ###")
use_job = self.recordset_id.import_type_id.use_job
if debug_mode:
use_job = False
return use_job

def import_record(self, importer_config):
"""This job will import a record.
Expand All @@ -88,13 +98,7 @@ def import_record(self, importer_config):
def run_import(self):
"""Queue a job for importing data stored in to self"""
self.ensure_one()
debug_mode = self.debug_mode()
if debug_mode:
logger.warning("### DEBUG MODE ACTIVE: WILL NOT USE QUEUE ###")
use_job = self.recordset_id.import_type_id.use_job
if debug_mode:
use_job = False
result = self._run_import(use_job=use_job)
result = self._run_import(use_job=self._should_use_jobs())
return result

def _run_import(self, use_job=True):
Expand All @@ -103,7 +107,9 @@ def _run_import(self, use_job=True):
# that needs to be imported
new_self = self.with_context(queue_job__no_delay=not use_job)
for config in self.recordset_id.available_importers():
result = new_self.with_delay().import_record(config)
result = new_self.with_delay(
**self._run_import_job_params(config)
).import_record(config)
res[config.model] = result
if self.debug_mode() or not use_job:
# debug mode, no job here: reset it!
Expand All @@ -114,3 +120,11 @@ def _run_import(self, use_job=True):
# we keep the reference on w/ the last job.
self.write({"job_id": result.db_record().id})
return res

def _run_import_job_params(self, config):
params = {
"description": (
f"recordset {self.recordset_id.name}: import {config['model']}"
)
}
return params
13 changes: 13 additions & 0 deletions connector_importer/tests/test_mapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -181,3 +181,16 @@ def test_rel_create_if_missing(self):
self.assertEqual(cat.name, "New category")
self.assertEqual(res["parent_id"], parent.id)
self.assertEqual(res["category_id"], [(6, 0, [cat.id])])

def test_dynamic_mapper_rename_keys(self):
rec = {
"another_name": "John Doe",
}
# Whitelist
expected = {
"name": "John Doe",
}
mapper = self._get_dynamyc_mapper(
options=dict(source_key_rename={"another_name": "name"})
)
self.assertEqual(mapper.dynamic_fields(rec), expected)

0 comments on commit 117da2d

Please sign in to comment.