Skip to content

Commit

Permalink
connector_importer: migrate to v16
Browse files Browse the repository at this point in the history
connector_importer: fix test_recordset.test_docs_html

Without components registered this is broken
however it is already tested in test_recordset_importer
  • Loading branch information
simahawk committed Sep 6, 2023
1 parent 9490aaa commit ca43da2
Show file tree
Hide file tree
Showing 15 changed files with 50 additions and 27 deletions.
1 change: 0 additions & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
exclude: |
(?x)
# NOT INSTALLABLE ADDONS
^connector_importer/|
# END NOT INSTALLABLE ADDONS
# Files and folders generated by bots, to avoid loops
^setup/|/static/description/index\.html$|
Expand Down
3 changes: 1 addition & 2 deletions 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": "15.0.1.4.0",
"version": "16.0.1.0.0",
"depends": ["connector", "queue_job"],
"author": "Camptocamp, Odoo Community Association (OCA)",
"license": "AGPL-3",
Expand All @@ -27,5 +27,4 @@
"menuitems.xml",
],
"external_dependencies": {"python": ["chardet", "pytz", "pyyaml"]},
"installable": False,
}
2 changes: 1 addition & 1 deletion connector_importer/components/odoorecord.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ def _force_value(self, record, values, fname):
# pylint: disable=sql-injection
query = "UPDATE {} SET {} = %s WHERE id = %s".format(record._table, fname)
self.env.cr.execute(query, (values[fname], record.id))
record.invalidate_cache([fname])
record.invalidate_recordset([fname])

def _odoo_write_purge_values(self, odoo_record, values):
# remove non fields values
Expand Down
4 changes: 2 additions & 2 deletions connector_importer/models/import_type.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,8 @@ class ImportType(models.Model):
def _check_options(self):
no_options = self.browse()
for rec in self:
if not rec.options and not rec.settings:
no_options.append(rec)
if not rec.options:
no_options += rec
# TODO: validate yaml schema (maybe w/ Cerberus?)
if no_options:
raise exceptions.UserError(
Expand Down
4 changes: 2 additions & 2 deletions connector_importer/models/recordset.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ def _set_serialized(self, fname, values, reset=False):
# In order to streamline this I invalidate cache right away so the
# values are converted right away
# TL/DR integer dict keys will always be converted to strings, beware
self.invalidate_cache((fname,))
self.invalidate_recordset((fname,))

def set_report(self, values, reset=False):
"""Update import report values."""
Expand Down Expand Up @@ -186,7 +186,7 @@ def _prepare_for_import_session(self, start=True):
"shared_data": {},
}
self.write(values)
self.invalidate_cache(tuple(values.keys()))
self.invalidate_recordset(tuple(values.keys()))

def _get_report_html_data(self):
"""Prepare data for HTML report.
Expand Down
8 changes: 5 additions & 3 deletions connector_importer/models/sources/source_mixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,10 @@ def _compute_config_summary(self):
just override `_config_summary_fields`.
They'll be automatically included in the summary.
"""
template = self.env.ref(self._config_summary_template)
tmpl_xid = self._config_summary_template
qweb = self.env["ir.qweb"].sudo()
for item in self:
item.config_summary = template._render(item._config_summary_data())
item.config_summary = qweb._render(tmpl_xid, item._config_summary_data())

def _config_summary_data(self):
"""Collect data for summary."""
Expand All @@ -71,10 +72,11 @@ def _config_summary_data(self):
"fields_info": self.fields_get(self._config_summary_fields),
}

# TODO: check if still needed + use create multi
@api.model
def create(self, vals):
"""Override to update reference to source on the consumer."""
res = super().create(vals)
# Override to update reference to source on the consumer
if self.env.context.get("active_model"):
# update reference on consumer
self.env[self.env.context["active_model"]].browse(
Expand Down
6 changes: 4 additions & 2 deletions connector_importer/tests/test_event_listeners.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
# Copyright 2023 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

import mock
from unittest import mock

from odoo_test_helper import FakeModelLoader

from odoo.tools import mute_logger
Expand Down Expand Up @@ -56,7 +57,8 @@ def setUpClass(cls):
{
"options": f"""
- model: res.partner
importer: fake.partner.importer
importer:
name: fake.partner.importer
- model: {FakeImportedModel._name}
options:
record_handler:
Expand Down
22 changes: 16 additions & 6 deletions connector_importer/tests/test_import_type.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,24 +64,30 @@ def test_available_importers_defaults(self):
def test_available_importers(self):
options = """
- model: res.partner
importer: partner.importer
importer:
name: fake.partner.importer
- model: res.users
importer: user.importer
importer:
name:
user.importer
options:
importer:
baz: True
record_handler:
bar: False
- model: another.one
importer: import.withspaces
importer:
name: import.withspaces
context:
foo: True
"""
itype = self.type_model.create({"name": "Ok", "key": "ok", "options": options})
importers = tuple(itype.available_importers())
expected = (
{
"importer": "partner.importer",
"importer": {
"name": "fake.partner.importer",
},
"model": "res.partner",
"is_last_importer": False,
"context": {},
Expand All @@ -93,7 +99,9 @@ def test_available_importers(self):
},
},
{
"importer": "user.importer",
"importer": {
"name": "user.importer",
},
"model": "res.users",
"is_last_importer": False,
"context": {},
Expand All @@ -105,7 +113,9 @@ def test_available_importers(self):
},
},
{
"importer": "import.withspaces",
"importer": {
"name": "import.withspaces",
},
"model": "another.one",
"is_last_importer": True,
"context": {"foo": 1},
Expand Down
10 changes: 4 additions & 6 deletions connector_importer/tests/test_recordset.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ def _create_type(cls):
"key": "ok",
"options": """
- model: res.partner
importer: partner.importer
importer:
name: partner.importer
""",
}
)
Expand Down Expand Up @@ -93,16 +94,13 @@ def test_get_report_html(self):
self.assertEqual(key.model, "res.partner")
self.assertTrue(isinstance(self.recordset.report_html, Markup))

def test_docs_html(self):
# No registry loaded here, nothing to render
self.assertFalse(self.recordset.docs_html)

def test_importable_models(self):
self.itype.write(
{
"options": """
- model: res.partner
importer: partner.importer
importer:
name: partner.importer
- model: res.partner.category
- model: res.lang
"""
Expand Down
2 changes: 1 addition & 1 deletion connector_importer/tests/test_recordset_importer.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# Copyright 2018 Camptocamp SA
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

import mock
from unittest import mock

from markupsafe import Markup

Expand Down
3 changes: 2 additions & 1 deletion connector_importer/tests/test_source.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).


import mock
from unittest import mock

from odoo_test_helper import FakeModelLoader

from .common import BaseTestCase
Expand Down
4 changes: 4 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# generated from manifests external_dependencies
chardet
pytz
pyyaml
1 change: 1 addition & 0 deletions setup/connector_importer/odoo/addons/connector_importer
6 changes: 6 additions & 0 deletions setup/connector_importer/setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import setuptools

setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)
1 change: 1 addition & 0 deletions test-requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
odoo-test-helper

0 comments on commit ca43da2

Please sign in to comment.