diff --git a/README.md b/README.md index f3b6b4c9..cedd10ef 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Available addons ---------------- addon | version | maintainers | summary --- | --- | --- | --- -[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. +[connector_importer](connector_importer/) | 16.0.1.1.1 | [![simahawk](https://github.com/simahawk.png?size=30px)](https://github.com/simahawk) | This module takes care of import sessions. [connector_importer_product](connector_importer_product/) | 16.0.1.0.0 | | Ease definition of product imports using `connector_importer`. [//]: # (end addons) diff --git a/connector_importer/README.rst b/connector_importer/README.rst index bf0e6680..34a1e894 100644 --- a/connector_importer/README.rst +++ b/connector_importer/README.rst @@ -7,7 +7,7 @@ Connector Importer !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:7680b9cbb3329f4f4588d69d8487b9c03cae24d89c215adb8246c96b06f950fd + !! source digest: sha256:f7b849e3f22195c7a91d6e07ba38d714b8d54fe2c58d9815d59d6281f823bc3c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/connector_importer/__manifest__.py b/connector_importer/__manifest__.py index 1fa2e8cb..84861012 100644 --- a/connector_importer/__manifest__.py +++ b/connector_importer/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Connector Importer", "summary": """This module takes care of import sessions.""", - "version": "16.0.1.1.0", + "version": "16.0.1.1.1", "depends": ["connector", "queue_job"], "author": "Camptocamp, Odoo Community Association (OCA)", "license": "AGPL-3", diff --git a/connector_importer/models/recordset.py b/connector_importer/models/recordset.py index 71d8255b..d51f136d 100644 --- a/connector_importer/models/recordset.py +++ b/connector_importer/models/recordset.py @@ -2,12 +2,13 @@ # Copyright 2018 Camptocamp SA # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +import base64 +import json import os from collections import OrderedDict from odoo import api, fields, models -from odoo.addons.base_sparse_field.models.fields import Serialized from odoo.addons.component.utils import is_component_registry_ready from odoo.addons.queue_job.job import DONE, STATES @@ -64,8 +65,8 @@ class ImportRecordset(models.Model): create_date = fields.Datetime() record_ids = fields.One2many("import.record", "recordset_id", string="Records") # store info about imports report - report_data = Serialized() - shared_data = Serialized() + report_data = fields.Binary(attachment=True) + shared_data = fields.Binary(attachment=True) report_html = fields.Html("Report summary", compute="_compute_report_html") full_report_url = fields.Char(compute="_compute_full_report_url") jobs_global_state = fields.Selection( @@ -141,9 +142,27 @@ def _set_serialized(self, fname, values, reset=False): """Update serialized data.""" _values = {} if not reset: - _values = self[fname] + _values = getattr(self, fname) or {} + if _values: + _values = self._get_json_from_binary(_values) + _values.update(values) - self[fname] = _values + json_report_data = json.dumps(_values) + _values = base64.b64encode(bytes(json_report_data, "utf-8")) + setattr(self, fname, _values) + # We need to invalidate the cache because the context dict + # bin_size=False triggers the _compute_datas(self) method + # which has the @api.depends_context('bin_size') decorator. + # Flush all pending computations and updates to the database. + domain = [ + ("res_model", "=", self._name), + ("res_field", "=", fname), + ("res_id", "in", self.ids), + ] + attachments = self.env["ir.attachment"].sudo().search(domain) + if attachments: + attachments.invalidate_recordset(("datas", "raw")) + # Without invalidating cache we will have a bug because of Serialized # field in odoo. It uses json.loads on convert_to_cache, which leads # to all of our int dict keys converted to strings. Except for the @@ -160,9 +179,19 @@ def set_report(self, values, reset=False): self.ensure_one() self._set_serialized("report_data", values, reset=reset) + def _get_json_from_binary(self, binary_data): + json_raw_data = {} + if binary_data: + json_raw_data = base64.b64decode(binary_data).decode("utf-8") + json_raw_data = json.loads(json_raw_data) + return json_raw_data + def get_report(self): self.ensure_one() - return self.report_data or {} + json_raw_data = self._get_json_from_binary( + self.with_context(bin_size=False).report_data + ) + return json_raw_data def set_shared(self, values, reset=False): """Update import report values.""" @@ -171,7 +200,10 @@ def set_shared(self, values, reset=False): def get_shared(self): self.ensure_one() - return self.shared_data or {} + json_raw_data = self._get_json_from_binary( + self.with_context(bin_size=False).shared_data + ) + return json_raw_data def _prepare_for_import_session(self, start=True): """Wipe all session related data.""" @@ -180,9 +212,10 @@ def _prepare_for_import_session(self, start=True): report_data["_last_start"] = fields.Datetime.to_string( fields.Datetime.now() ) + json_report_data = json.dumps(report_data) values = { "record_ids": [(5, 0, 0)], - "report_data": report_data, + "report_data": base64.b64encode(bytes(json_report_data, "utf-8")), "shared_data": {}, } self.write(values) diff --git a/connector_importer/static/description/index.html b/connector_importer/static/description/index.html index 0e865e3b..da69caa4 100644 --- a/connector_importer/static/description/index.html +++ b/connector_importer/static/description/index.html @@ -1,4 +1,3 @@ - @@ -9,10 +8,11 @@ /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ +:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. +Despite the name, some widely supported CSS2 features are used. See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to customize this style sheet. @@ -275,7 +275,7 @@ margin-left: 2em ; margin-right: 2em } -pre.code .ln { color: grey; } /* line numbers */ +pre.code .ln { color: gray; } /* line numbers */ pre.code, code { background-color: #eeeeee } pre.code .comment, code .comment { color: #5C6576 } pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold } @@ -301,7 +301,7 @@ span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -367,7 +367,7 @@

Connector Importer

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:7680b9cbb3329f4f4588d69d8487b9c03cae24d89c215adb8246c96b06f950fd +!! source digest: sha256:f7b849e3f22195c7a91d6e07ba38d714b8d54fe2c58d9815d59d6281f823bc3c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/connector-interfaces Translate me on Weblate Try me on Runboat

This module allows to import / update records from files using the connector @@ -434,7 +434,9 @@

Contributors

Maintainers

This module is maintained by the OCA.

-Odoo Community Association + +Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.