Skip to content

Commit

Permalink
Merge pull request #106 from OCA/16.0
Browse files Browse the repository at this point in the history
Syncing from upstream OCA/connector-interfaces (16.0)
  • Loading branch information
bt-admin authored Oct 17, 2023
2 parents 37888af + 7a818d1 commit 46778a1
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 12 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Available addons
----------------
addon | version | maintainers | summary
--- | --- | --- | ---
[connector_importer](connector_importer/) | 16.0.1.0.0 | [![simahawk](https://github.com/simahawk.png?size=30px)](https://github.com/simahawk) | This module takes care of import sessions.
[connector_importer](connector_importer/) | 16.0.1.1.0 | [![simahawk](https://github.com/simahawk.png?size=30px)](https://github.com/simahawk) | This module takes care of import sessions.


Unported addons
Expand Down
2 changes: 1 addition & 1 deletion connector_importer/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Connector Importer
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:b2899192f47ba6f99e95eb4ca437e990cdc23bf30a924c6795dae3660b129fdc
!! source digest: sha256:7680b9cbb3329f4f4588d69d8487b9c03cae24d89c215adb8246c96b06f950fd
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
Expand Down
2 changes: 1 addition & 1 deletion connector_importer/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
{
"name": "Connector Importer",
"summary": """This module takes care of import sessions.""",
"version": "16.0.1.0.0",
"version": "16.0.1.1.0",
"depends": ["connector", "queue_job"],
"author": "Camptocamp, Odoo Community Association (OCA)",
"license": "AGPL-3",
Expand Down
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
2 changes: 1 addition & 1 deletion connector_importer/static/description/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,7 @@ <h1 class="title">Connector Importer</h1>
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:b2899192f47ba6f99e95eb4ca437e990cdc23bf30a924c6795dae3660b129fdc
!! source digest: sha256:7680b9cbb3329f4f4588d69d8487b9c03cae24d89c215adb8246c96b06f950fd
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/connector-interfaces/tree/16.0/connector_importer"><img alt="OCA/connector-interfaces" src="https://img.shields.io/badge/github-OCA%2Fconnector--interfaces-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/connector-interfaces-16-0/connector-interfaces-16-0-connector_importer"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/connector-interfaces&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module allows to import / update records from files using the connector
Expand Down
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 46778a1

Please sign in to comment.