From 3b87fad65931c7a923b60e29b84d175ef643fb67 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Thu, 19 Feb 2026 14:49:00 +0100 Subject: [PATCH 01/12] [REF] attachment_queue: use FakeModuleLoader in setUp, not setUpClass As per https://github.com/odoo/odoo/pull/247151, https://github.com/OCA/odoo-test-helper/pull/39 --- .../tests/test_attachment_queue.py | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/attachment_queue/tests/test_attachment_queue.py b/attachment_queue/tests/test_attachment_queue.py index 38951c53f5a..acad15a62b4 100644 --- a/attachment_queue/tests/test_attachment_queue.py +++ b/attachment_queue/tests/test_attachment_queue.py @@ -32,25 +32,20 @@ def _create_dummy_attachment(self, override=False, no_job=False): ).create(vals) return self.env["attachment.queue"].create(vals) - @classmethod - def setUpClass(cls): - super().setUpClass() - cls.loader = FakeModelLoader(cls.env, cls.__module__) - cls.loader.backup_registry() - from .test_models import AttachmentQueue - - cls.loader.update_registry((AttachmentQueue,)) - - @classmethod - def tearDownClass(cls): - super().tearDownClass() - cls.loader.restore_registry() - return super().tearDownClass() - def setUp(self): super().setUp() + self.loader = FakeModelLoader(self.env, self.__module__) + self.loader.backup_registry() + from .test_models import AttachmentQueue + + self.loader.update_registry((AttachmentQueue,)) self.aq_model = self.env["attachment.queue"] + def tearDown(self): + super().tearDown() + self.loader.restore_registry() + return super().tearDown() + def test_job_created(self): with trap_jobs() as trap: attachment = self._create_dummy_attachment() From 5707146e252f7f4fa043198eed772a53e317bb98 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Thu, 19 Feb 2026 10:02:13 +0100 Subject: [PATCH 02/12] [REF] auditlog: adapt to new Odoo test patch checker See https://github.com/odoo/odoo/pull/247151 * Register with the patch checker to prevent exhaustive logging ``` odoo odoo.tests.common: /__w/server-tools/server-tools/auditlog/models/rule.py:232:_patch_method setting res.groups.unlink to .unlink_full at 0x7fa51ea90f70> ``` * Align model patching with how it's done in base_automation to fully remove patched methods. Fixes #3439 * Dismantle own patch checker. * Ensure no patching takes place in setUpClass. --- auditlog/models/rule.py | 12 +++---- auditlog/tests/common.py | 38 ++++++++++------------ auditlog/tests/test_auditlog.py | 56 ++++++++++++++++++++++----------- auditlog/tests/test_http.py | 4 ++- 4 files changed, 61 insertions(+), 49 deletions(-) diff --git a/auditlog/models/rule.py b/auditlog/models/rule.py index 32ff17c746c..7e914e7a7d5 100644 --- a/auditlog/models/rule.py +++ b/auditlog/models/rule.py @@ -216,7 +216,7 @@ def _register_hook(self): def _patch_method(self, model, method_name, check_attr): result = new_method = False - model_class = type(model) + model_class = model.env.registry[model._name] if method_name == "create": new_method = self._make_create() elif method_name == "read": @@ -273,15 +273,13 @@ def _revert_methods(self): """Restore original ORM methods of models defined in rules.""" updated = False for rule in self: - model_model = self.env[rule.model_id.model or rule.model_model] + model_class = self.env.registry[rule.model_id.model or rule.model_model] for method in ["create", "read", "write", "unlink", "export_data"]: if getattr(rule, f"log_{method}") and hasattr( - getattr(model_model, method), "origin" + getattr(model_class, method), "origin" ): - setattr( - type(model_model), method, getattr(model_model, method).origin - ) - delattr(type(model_model), f"auditlog_ruled_{method}") + delattr(model_class, method) + delattr(model_class, f"auditlog_ruled_{method}") updated = True if updated: self._update_registry() diff --git a/auditlog/tests/common.py b/auditlog/tests/common.py index e1004cd408d..25cab8e1ad7 100644 --- a/auditlog/tests/common.py +++ b/auditlog/tests/common.py @@ -1,33 +1,27 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo.tests.common import TransactionCase +from odoo.tests.common import SETATTR_SOURCES +from odoo.addons.base.tests.common import BaseCommon + +# Register rule.py as a known path in odoo.tests.common for patching methods +SETATTR_SOURCES["_patch_method"] = tuple( + list(SETATTR_SOURCES.get("_patch_method", [])) + ["/auditlog/models/rule.py"], +) -class AuditLogRuleCommon(TransactionCase): - @classmethod - def setUpClass(cls): - super().setUpClass() - cls.models = set() +class AuditLogRuleCommon(BaseCommon): @classmethod def create_rule(cls, vals): - rule = cls.env["auditlog.rule"].with_context(tracking_disable=True).create(vals) - # Keep track of patched models - cls.models |= set(rule.model_id.mapped("model")) - return rule + # Deprecated, just call `create` in your test setup. + return cls.env["auditlog.rule"].create(vals) - @classmethod - def tearDownClass(cls): - for rule in cls.env["auditlog.rule"].search([]): + def tearDown(self): + # Unsubscribe all rules in tearDown to prevent Odoo's patch checker in + # tests/common.py from ringing the alarm. + for rule in self.env["auditlog.rule"].search([]): try: rule.unsubscribe() except KeyError: # pragma: no cover - continue # Model not loaded yet - - # Assert no patched methods remain - for model in cls.models: - for method in ["create", "read", "write", "unlink"]: - assert not hasattr( - getattr(cls.env[model], method), "origin" - ), f"{model} {method} still patched" - super().tearDownClass() + continue # Preexisting rule for model not loaded yet + return super().tearDown() diff --git a/auditlog/tests/test_auditlog.py b/auditlog/tests/test_auditlog.py index e4c3aeaa18b..67fea7b07e8 100644 --- a/auditlog/tests/test_auditlog.py +++ b/auditlog/tests/test_auditlog.py @@ -3,6 +3,8 @@ # © 2021 Stefan Rijnhart # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo.tools import mute_logger + from odoo.addons.base.models.ir_model import MODULE_UNINSTALL_FLAG from odoo.addons.base.models.res_users import name_boolean_group @@ -388,13 +390,15 @@ def setUpClass(cls): } ) - cls.auditlog_rule.subscribe() + def setUp(self): + super().setUp() + self.auditlog_rule.subscribe() # Trigger log creation - rec = cls.env["x_test.model"].create({"x_test_field": "test value"}) + rec = self.env["x_test.model"].create({"x_test_field": "test value"}) rec.write({"x_test_field": "test value 2"}) - cls.logs = cls.env["auditlog.log"].search( - [("res_id", "=", rec.id), ("model_id", "=", cls.test_model.id)] + self.logs = self.env["auditlog.log"].search( + [("res_id", "=", rec.id), ("model_id", "=", self.test_model.id)] ) def assert_values(self): @@ -418,13 +422,20 @@ def test_01_field_and_model_removal(self): self.assert_values() # Remove the field - self.test_field.with_context(**{MODULE_UNINSTALL_FLAG: True}).unlink() + with mute_logger("odoo.api"): # Mute 'Too many iterations for flushing fields' + self.test_field.with_context(**{MODULE_UNINSTALL_FLAG: True}).unlink() self.assert_values() # The field should not be linked self.assertFalse(self.logs.mapped("line_ids.field_id")) # Remove the model - self.test_model.with_context(**{MODULE_UNINSTALL_FLAG: True}).unlink() + with mute_logger( + # 'Too many iterations for flushing fields' + "odoo.api", + # 'The following fields were force-deleted .* x_name', + "odoo.addons.base.models.ir_model", + ): + self.test_model.with_context(**{MODULE_UNINSTALL_FLAG: True}).unlink() self.assert_values() # The model should not be linked @@ -512,14 +523,16 @@ def setUpClass(cls): # Updating users_to_exclude_ids cls.auditlog_rule.users_to_exclude_ids = [[4, cls.users_to_exclude_ids]] - # Subscribe auditlog.rule - cls.auditlog_rule.subscribe() - cls.auditlog_log = cls.env["auditlog.log"] - # Creating new res.partner - cls.testpartner1 = ( - cls.env["res.partner"] + def setUp(self): + super().setUp() + # Subscribe auditlog.rule + self.auditlog_rule.subscribe() + + # Creating new partners to trigger log creation (or not) + self.testpartner1 = ( + self.env["res.partner"] .with_context(tracking_disable=True) .create( { @@ -530,10 +543,10 @@ def setUpClass(cls): ) # Creating new res.partner from excluded user - cls.testpartner2 = ( - cls.env["res.partner"] + self.testpartner2 = ( + self.env["res.partner"] .with_context(tracking_disable=True) - .with_user(cls.user.id) + .with_user(self.user.id) .create( { "name": "testpartner2", @@ -669,8 +682,11 @@ def setUpClass(cls): cls.group = cls.env.ref("auditlog.group_auditlog_manager") cls.auditlog_log = cls.env["auditlog.log"] + + def setUp(self): + super().setUp() # Subscribe auditlog.rule - cls.auditlog_rule.subscribe() + self.auditlog_rule.subscribe() def test_01_AuditlogFull_field_group_write_log(self): """Change group and check successfully created log""" @@ -739,9 +755,6 @@ def setUpClass(cls): # Updating phone in fields_to_exclude_ids cls.auditlog_rule.fields_to_exclude_ids = [[4, cls.fields_to_exclude_ids]] - # Subscribe auditlog.rule - cls.auditlog_rule.subscribe() - cls.auditlog_log = cls.env["auditlog.log"] # Creating new res.partner @@ -756,6 +769,11 @@ def setUpClass(cls): ) ) + def setUp(self): + super().setUp() + # Subscribe auditlog.rule + self.auditlog_rule.subscribe() + def test_01_AuditlogFast_field_exclude_write_log(self): # Checking fields_to_exclude_ids self.testpartner1.with_context(tracking_disable=True).write( diff --git a/auditlog/tests/test_http.py b/auditlog/tests/test_http.py index 2439457b844..df3179930c1 100644 --- a/auditlog/tests/test_http.py +++ b/auditlog/tests/test_http.py @@ -1,9 +1,11 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from odoo.tests.common import HttpCase, tagged +from .common import AuditLogRuleCommon + @tagged("post_install", "-at_install") -class TestAuditlogHttp(HttpCase): +class TestAuditlogHttp(HttpCase, AuditLogRuleCommon): def test_compute_display_name(self): self.authenticate("admin", "admin") rule = self.env["auditlog.rule"].create( From b33af7c6f16b6af3138c4279cdae2f1883ad341f Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Thu, 19 Feb 2026 12:22:10 +0100 Subject: [PATCH 03/12] [REF] base_exception: use FakeModuleLoader in setUp, not setUpClass As per https://github.com/odoo/odoo/pull/247151, https://github.com/OCA/odoo-test-helper/pull/39 --- base_exception/tests/test_base_exception.py | 35 ++++++++++----------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/base_exception/tests/test_base_exception.py b/base_exception/tests/test_base_exception.py index 9c191178407..2c869160a90 100644 --- a/base_exception/tests/test_base_exception.py +++ b/base_exception/tests/test_base_exception.py @@ -9,26 +9,26 @@ class TestBaseException(TransactionCase): - @classmethod - def setUpClass(cls): - super().setUpClass() + def setUp(self): + # FakeModelLoader must be used in setUp, not setUpClass + super().setUp() - cls.loader = FakeModelLoader(cls.env, cls.__module__) - cls.loader.backup_registry() + self.loader = FakeModelLoader(self.env, self.__module__) + self.loader.backup_registry() from .purchase_test import ExceptionRule, LineTest, PurchaseTest, WizardTest - cls.loader.update_registry((ExceptionRule, LineTest, PurchaseTest, WizardTest)) - cls.partner = cls.env["res.partner"].create({"name": "Foo"}) - cls.po = cls.env["base.exception.test.purchase"].create( + self.loader.update_registry((ExceptionRule, LineTest, PurchaseTest, WizardTest)) + self.partner = self.env["res.partner"].create({"name": "Foo"}) + self.po = self.env["base.exception.test.purchase"].create( { "name": "Test base exception to basic purchase", - "partner_id": cls.partner.id, + "partner_id": self.partner.id, "line_ids": [ (0, 0, {"name": "line test", "amount": 120.0, "qty": 1.5}) ], } ) - cls.exception_rule = cls.env["exception.rule"].create( + self.exception_rule = self.env["exception.rule"].create( { "name": "No ZIP code on destination", "sequence": 10, @@ -37,20 +37,19 @@ def setUpClass(cls): "exception_type": "by_py_code", } ) - exception_rule_confirm_obj = cls.env["exception.rule.confirm.test.purchase"] - cls.exception_rule_confirm = exception_rule_confirm_obj.with_context( - active_model="base.exception.test.purchase", active_ids=cls.po.ids + exception_rule_confirm_obj = self.env["exception.rule.confirm.test.purchase"] + self.exception_rule_confirm = exception_rule_confirm_obj.with_context( + active_model="base.exception.test.purchase", active_ids=self.po.ids ).create( { - "related_model_id": cls.po.id, + "related_model_id": self.po.id, "ignore": False, } ) - @classmethod - def tearDownClass(cls): - cls.loader.restore_registry() - return super().tearDownClass() + def tearDown(self): + self.loader.restore_registry() + return super().tearDown() def test_valid(self): self.partner.write({"zip": "00000"}) From 6b66de22debc68bcdd76c06255cbf2a69fb0e4b5 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Thu, 19 Feb 2026 21:26:13 +0100 Subject: [PATCH 04/12] [REF] base_name_search_improved: adapt to new Odoo test patch checker --- .../tests/test_name_search.py | 39 ++++++++++++++----- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/base_name_search_improved/tests/test_name_search.py b/base_name_search_improved/tests/test_name_search.py index fcdd44e0f96..e827ad9df46 100644 --- a/base_name_search_improved/tests/test_name_search.py +++ b/base_name_search_improved/tests/test_name_search.py @@ -1,7 +1,13 @@ # © 2016 Daniel Reis # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo.tests.common import TransactionCase, tagged +from odoo.tests.common import SETATTR_SOURCES, TransactionCase, tagged + +# Register our patching method in Odoo's test checker +SETATTR_SOURCES["_register_hook"] = tuple( + list(SETATTR_SOURCES.get("_register_hook", [])) + + ["/base_name_search_improved/models/ir_model.py"], +) @tagged("post_install", "-at_install") @@ -15,14 +21,6 @@ def setUpClass(cls): cls.address_field = cls.env.ref("base.field_res_partner__contact_address") cls.zip_field = cls.env.ref("base.field_res_partner__zip") - cls.model_partner = cls.env.ref("base.model_res_partner") - cls.model_partner.name_search_ids = cls.phone_field - cls.model_partner.add_smart_search = True - cls.model_partner.use_smart_name_search = True - - # this use does not make muche sense but with base module we dont have - # much models to use for tests - cls.model_partner.name_search_domain = "[('parent_id', '=', False)]" cls.Partner = cls.env["res.partner"] cls.partner1 = cls.Partner.create( {"name": "Luigi Verconti", "vat": "1111", "phone": "+351 555 777 333"} @@ -39,6 +37,29 @@ def setUpClass(cls): } ) + def setUp(self): + super().setUp() + self.patched_models = [ + model._name + for model in self.env.registry.values() + if "name_search" in vars(model) + ] + self.model_partner = self.env.ref("base.model_res_partner") + self.model_partner.name_search_ids = self.phone_field + self.model_partner.add_smart_search = True + self.model_partner.use_smart_name_search = True + + # this use does not make muche sense but with base module we dont have + # much models to use for tests + self.model_partner.name_search_domain = "[('parent_id', '=', False)]" + + def tearDown(self): + for model in self.env.registry.values(): + if "name_search" in vars(model) and model._name not in self.patched_models: + delattr(model, "name_search") + + super().tearDown() + def test_RelevanceOrderedResults(self): """Return results ordered by relevance""" res = self.Partner.name_search("555 777") From 37023aa2efa3c70ddb46e12114e7027ab944f5f8 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Thu, 19 Feb 2026 10:45:52 +0100 Subject: [PATCH 05/12] [REF] base_partition: adapt tests to new Odoo test patch checker See https://github.com/odoo/odoo/pull/247151 Fixes ``` AssertionError: Found unexpected attributes on res.partner: _default_batch_size ``` --- base_partition/tests/test_partition.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/base_partition/tests/test_partition.py b/base_partition/tests/test_partition.py index 568c4ff6e34..0279adda0ac 100644 --- a/base_partition/tests/test_partition.py +++ b/base_partition/tests/test_partition.py @@ -7,6 +7,7 @@ from odoo.exceptions import UserError from odoo.fields import Command from odoo.tests.common import TransactionCase +from odoo.tools import mute_logger class TestPartition(TransactionCase): @@ -119,9 +120,11 @@ def test_batch(self): with self.assertRaises(UserError): list(records.batch()) - records.__class__._default_batch_size = batch_size + with mute_logger("odoo.tests.common"): + records.__class__._default_batch_size = batch_size batches_from_default = list(records.batch()) self.assertEqual(batches_from_default, batches) + delattr(records.__class__, "_default_batch_size") def test_read_per_record(self): categories = self.c1 | self.c2 | self.c3 From bbafbe7d482951fe3906ace11a3cfce996613c46 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Thu, 19 Feb 2026 15:11:59 +0100 Subject: [PATCH 06/12] [REF] base_sequence_option: use FakeModuleLoader in setUp, not setUpClass As per https://github.com/odoo/odoo/pull/247151, https://github.com/OCA/odoo-test-helper/pull/39 --- base_sequence_option/tests/common.py | 48 +++++++++++++--------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/base_sequence_option/tests/common.py b/base_sequence_option/tests/common.py index 84c9724385d..7216e16c79d 100644 --- a/base_sequence_option/tests/common.py +++ b/base_sequence_option/tests/common.py @@ -7,27 +7,26 @@ class CommonBaseSequenceOption(common.TransactionCase): - @classmethod - def setUpClass(cls): - super().setUpClass() + def setUp(self): + super().setUp() - cls.loader = FakeModelLoader(cls.env, cls.__module__) - cls.loader.backup_registry() + self.loader = FakeModelLoader(self.env, self.__module__) + self.loader.backup_registry() from .base_sequence_tester import BaseSequenceTester, IrSequenceOption - cls.loader.update_registry((BaseSequenceTester, IrSequenceOption)) + self.loader.update_registry((BaseSequenceTester, IrSequenceOption)) - cls.test_model = cls.env[BaseSequenceTester._name] + self.test_model = self.env[BaseSequenceTester._name] - cls.tester_model = cls.env["ir.model"].search( + self.tester_model = self.env["ir.model"].search( [("model", "=", "base.sequence.tester")] ) # Access record: - cls.env["ir.model.access"].create( + self.env["ir.model.access"].create( { "name": "access.tester", - "model_id": cls.tester_model.id, + "model_id": self.tester_model.id, "perm_read": 1, "perm_write": 1, "perm_create": 1, @@ -36,8 +35,8 @@ def setUpClass(cls): ) # Create sequence for type A and type B - cls.ir_sequence_obj = cls.env["ir.sequence"] - cls.ir_sequence_obj.create( + self.ir_sequence_obj = self.env["ir.sequence"] + self.ir_sequence_obj.create( { "name": "Default Sequence", "code": "base.sequence.tester", @@ -45,14 +44,14 @@ def setUpClass(cls): "prefix": "DEF/", } ) - seq_a = cls.ir_sequence_obj.create( + seq_a = self.ir_sequence_obj.create( { "name": "Type A", "padding": 5, "prefix": "TYPE-A/", } ) - seq_b = cls.ir_sequence_obj.create( + seq_b = self.ir_sequence_obj.create( { "name": "Type B", "padding": 5, @@ -61,33 +60,32 @@ def setUpClass(cls): ) # Create sequence options for model base.sequence.tester: - cls.base_sequence_obj = cls.env["ir.sequence.option"] - cls.base_seq = cls.base_sequence_obj.create( + self.base_sequence_obj = self.env["ir.sequence.option"] + self.base_seq = self.base_sequence_obj.create( { "name": "Test Model", "model": "base.sequence.tester", "use_sequence_option": True, } ) - cls.sequence_obj = cls.env["ir.sequence.option.line"] - cls.sequence_obj.create( + self.sequence_obj = self.env["ir.sequence.option.line"] + self.sequence_obj.create( { - "base_id": cls.base_seq.id, + "base_id": self.base_seq.id, "name": "Option 1", "filter_domain": [("test_type", "=", "a")], "sequence_id": seq_a.id, } ) - cls.sequence_obj.create( + self.sequence_obj.create( { - "base_id": cls.base_seq.id, + "base_id": self.base_seq.id, "name": "Option 1", "filter_domain": [("test_type", "=", "b")], "sequence_id": seq_b.id, } ) - @classmethod - def tearDownClass(cls): - cls.loader.restore_registry() - return super().tearDownClass() + def tearDown(self): + self.loader.restore_registry() + return super().tearDown() From 26400b20fad8f6153512687ae363a127d819058f Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Thu, 19 Feb 2026 12:23:32 +0100 Subject: [PATCH 07/12] [REF] base_time_window: use FakeModuleLoader in setUp, not setUpClass As per https://github.com/odoo/odoo/pull/247151, https://github.com/OCA/odoo-test-helper/pull/39 --- base_time_window/tests/test_time_window_mixin.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/base_time_window/tests/test_time_window_mixin.py b/base_time_window/tests/test_time_window_mixin.py index 936501c7238..12f864e800f 100644 --- a/base_time_window/tests/test_time_window_mixin.py +++ b/base_time_window/tests/test_time_window_mixin.py @@ -16,15 +16,16 @@ def setUpClass(cls): cls.weekday1 = cls.env["time.weekday"].search([("name", "=", "1")]) cls.weekday2 = cls.env["time.weekday"].search([("name", "=", "2")]) - cls.loader = FakeModelLoader(cls.env, cls.__module__) - cls.loader.backup_registry() + def setUp(self): + super().setUp() + self.loader = FakeModelLoader(self.env, self.__module__) + self.loader.backup_registry() from .test_models import TestTimeWindowModel - cls.loader.update_registry((TestTimeWindowModel,)) + self.loader.update_registry((TestTimeWindowModel,)) - @classmethod - def tearDownClass(cls): - cls.loader.restore_registry() + def tearDown(self): + self.loader.restore_registry() super().tearDownClass() def test_time_window_no_overlap(self): From 4abea15aba4184b8fa835251769dbfcdd6625934 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Thu, 19 Feb 2026 11:08:55 +0100 Subject: [PATCH 08/12] [REF] jsonify: adapt tests to new Odoo test patch checker See https://github.com/odoo/odoo/pull/247151 Fixes ``` AssertionError: Found unexpected attributes on res.partner.category: jsonify_custom ``` --- jsonifier/tests/test_get_parser.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/jsonifier/tests/test_get_parser.py b/jsonifier/tests/test_get_parser.py index 0f587ec5a48..d6cb6e6f2c4 100644 --- a/jsonifier/tests/test_get_parser.py +++ b/jsonifier/tests/test_get_parser.py @@ -7,6 +7,7 @@ from odoo import tools from odoo.exceptions import UserError from odoo.tests.common import TransactionCase +from odoo.tools import mute_logger from ..models.utils import convert_simple_to_full_parser @@ -291,7 +292,8 @@ def test_one(self): self.assertIn("Expected singleton", str(err.exception)) def test_json_export_callable_parser(self): - self.partner.__class__.jsonify_custom = jsonify_custom + with mute_logger("odoo.tests.common"): # Mute patch detector + self.partner.__class__.jsonify_custom = jsonify_custom parser = [ # callable subparser ("name", lambda rec, fname: rec[fname] + " rocks!"), @@ -368,7 +370,8 @@ def test_simple_star_target_and_field_resolver(self): self.assertEqual(json, expected_json) def test_simple_export_with_function(self): - self.category.__class__.jsonify_custom = jsonify_custom + with mute_logger("odoo.tests.common"): # Mute patch detector + self.category.__class__.jsonify_custom = jsonify_custom export = self.env["ir.exports"].create( { "export_fields": [ @@ -379,6 +382,7 @@ def test_simple_export_with_function(self): json = self.category.jsonify(export.get_json_parser())[0] self.assertEqual(json, {"name": "yeah!"}) + del self.category.__class__.jsonify_custom def test_export_relational_display_names(self): """If we export a relational, we get its display_name in the json.""" From a1268bda6c87d127df861e6c65b3c2f98faca166 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Thu, 19 Feb 2026 15:37:02 +0100 Subject: [PATCH 09/12] [REF] module_auto_update: adapt tests to new Odoo test patch checker Replace manual monkeypatching with unittest.mock.patch which is not signalled by Odoo's patch checker. See https://github.com/odoo/odoo/pull/247151 --- module_auto_update/tests/test_module.py | 71 +++++++++---------------- 1 file changed, 26 insertions(+), 45 deletions(-) diff --git a/module_auto_update/tests/test_module.py b/module_auto_update/tests/test_module.py index a010f31a039..14e18fb0feb 100644 --- a/module_auto_update/tests/test_module.py +++ b/module_auto_update/tests/test_module.py @@ -115,30 +115,25 @@ def test_upgrade_changed_checksum(self): self.assertTrue(self.base_module in changed_modules) def upgrade_module_mock(self_model): - upgrade_module_mock.call_count += 1 # since we are upgrading base, all installed module # must have been marked to upgrade at this stage self.assertEqual(self.base_module.state, "to upgrade") self.assertEqual(self.own_module.state, "to upgrade") installed_modules.write({"state": "installed"}) - upgrade_module_mock.call_count = 0 - # upgrade_changed_checksum commits, so mock that - with mock.patch.object(self.env.cr, "commit"): - # we simulate an install by setting module states - origin = Bmu.upgrade_module - Bmu.upgrade_module = upgrade_module_mock - try: + with mock.patch.object( + Bmu, "upgrade_module", autospec=True, side_effect=upgrade_module_mock + ) as mocked: + with mock.patch.object(self.env.cr, "commit"): + # we simulate an install by setting module states Imm.upgrade_changed_checksum() - self.assertEqual(upgrade_module_mock.call_count, 1) + self.assertEqual(mocked.call_count, 1) self.assertEqual(self.base_module.state, "installed") self.assertEqual(self.own_module.state, "installed") saved_checksums = Imm._get_saved_checksums() self.assertTrue(saved_checksums["base"]) self.assertTrue(saved_checksums[MODULE_NAME]) - finally: - Bmu.upgrade_module = origin def test_incomplete_upgrade(self): Imm = self.env["ir.module.module"] @@ -152,7 +147,6 @@ def test_incomplete_upgrade(self): Imm._save_checksums(saved_checksums) def upgrade_module_mock(self_model): - upgrade_module_mock.call_count += 1 # since we are upgrading base, all installed module # must have been marked to upgrade at this stage self.assertEqual(self.base_module.state, "to upgrade") @@ -161,19 +155,15 @@ def upgrade_module_mock(self_model): # simulate partial upgrade self.own_module.write({"state": "to upgrade"}) - upgrade_module_mock.call_count = 0 - # upgrade_changed_checksum commits, so mock that - with mock.patch.object(self.env.cr, "commit"): - # we simulate an install by setting module states - origin = Bmu.upgrade_module - Bmu.upgrade_module = upgrade_module_mock - try: + with mock.patch.object( + Bmu, "upgrade_module", autospec=True, side_effect=upgrade_module_mock + ) as mocked: + with mock.patch.object(self.env.cr, "commit"): + # we simulate an install by setting module states with self.assertRaises(IncompleteUpgradeError): Imm.upgrade_changed_checksum() - self.assertEqual(upgrade_module_mock.call_count, 1) - finally: - Bmu.upgrade_module = origin + self.assertEqual(mocked.call_count, 1) def test_incomplete_upgrade_no_checkusm(self): Imm = self.env["ir.module.module"] @@ -188,26 +178,21 @@ def test_incomplete_upgrade_no_checkusm(self): self.base_module.write({"state": "to upgrade"}) def upgrade_module_mock(self_model): - upgrade_module_mock.call_count += 1 # since we are upgrading base, all installed module # must have been marked to upgrade at this stage self.assertEqual(self.base_module.state, "to upgrade") self.assertEqual(self.own_module.state, "installed") installed_modules.write({"state": "installed"}) - upgrade_module_mock.call_count = 0 - # upgrade_changed_checksum commits, so mock that - with mock.patch.object(self.env.cr, "commit"): - # we simulate an install by setting module states - origin = Bmu.upgrade_module - Bmu.upgrade_module = upgrade_module_mock - # got just other modules to_upgrade and no checksum ones - try: + with mock.patch.object( + Bmu, "upgrade_module", autospec=True, side_effect=upgrade_module_mock + ) as mocked: + with mock.patch.object(self.env.cr, "commit"): + # we simulate an install by setting module states + # got just other modules to_upgrade and no checksum ones Imm.upgrade_changed_checksum() - self.assertEqual(upgrade_module_mock.call_count, 1) - finally: - Bmu.upgrade_module = origin + self.assertEqual(mocked.call_count, 1) def test_nothing_to_upgrade(self): Imm = self.env["ir.module.module"] @@ -216,17 +201,13 @@ def test_nothing_to_upgrade(self): Imm._save_installed_checksums() def upgrade_module_mock(self_model): - upgrade_module_mock.call_count += 1 - - upgrade_module_mock.call_count = 0 + pass # upgrade_changed_checksum commits, so mock that - with mock.patch.object(self.env.cr, "commit"): - # we simulate an install by setting module states - origin = Bmu.upgrade_module - Bmu.upgrade_module = upgrade_module_mock - try: + with mock.patch.object( + Bmu, "upgrade_module", autospec=True, side_effect=upgrade_module_mock + ) as mocked: + with mock.patch.object(self.env.cr, "commit"): + # we simulate an install by setting module states Imm.upgrade_changed_checksum() - self.assertEqual(upgrade_module_mock.call_count, 0) - finally: - Bmu.upgrade_module = origin + self.assertEqual(mocked.call_count, 0) From 9b89f96b046d86f9a1c3cd0ad8bf2d2f3f9397bf Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Thu, 19 Feb 2026 21:26:34 +0100 Subject: [PATCH 10/12] [REF] rpc_helper: adapt test to new Odoo test patch checker --- rpc_helper/tests/test_xmlrpc.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rpc_helper/tests/test_xmlrpc.py b/rpc_helper/tests/test_xmlrpc.py index c659673f6fa..014797d40a3 100644 --- a/rpc_helper/tests/test_xmlrpc.py +++ b/rpc_helper/tests/test_xmlrpc.py @@ -18,7 +18,8 @@ def setUpClass(cls): cls.admin_uid = cls.env.ref("base.user_admin").id def _set_disable(self, val): - type(self.env["res.partner"])._disable_rpc = val + with mute_logger("odoo.test.common"): # Mute test patch logging + type(self.env["res.partner"])._disable_rpc = val def _set_disable_on_model(self, val): self.env["ir.model"]._get("res.partner").rpc_config_edit = json.dumps( From cd16a58518cfdc493837012f3eb281b87d3b961a Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Thu, 19 Feb 2026 21:26:48 +0100 Subject: [PATCH 11/12] [REF] upgrade_analysis: adapt test to new Odoo test patch checker --- upgrade_analysis/tests/test_module.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/upgrade_analysis/tests/test_module.py b/upgrade_analysis/tests/test_module.py index 0aadda0db48..a0530317af2 100644 --- a/upgrade_analysis/tests/test_module.py +++ b/upgrade_analysis/tests/test_module.py @@ -1,6 +1,7 @@ from copy import deepcopy from odoo.tests import common, tagged +from odoo.tools import mute_logger from .. import compare, upgrade_log from ..odoo_patch.odoo_patch import OdooPatch @@ -62,7 +63,8 @@ def test_odoo_patch(self): ] ) ) - with OdooPatch(): + # Mute Odoo's noisy model patch snitcher + with mute_logger("odoo.tests.common"), OdooPatch(): self.env["ir.model.constraint"]._reflect_model(self.IrModuleModule) self.assertTrue( self.env["upgrade.record"].search( From 7473ce11b4cbcc15f9d216e345043e6473431dfb Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 20 Feb 2026 10:09:06 +0000 Subject: [PATCH 12/12] [BOT] post-merge updates --- README.md | 22 ++++++------ attachment_queue/README.rst | 2 +- attachment_queue/__manifest__.py | 2 +- .../static/description/index.html | 2 +- auditlog/README.rst | 2 +- auditlog/__manifest__.py | 2 +- auditlog/static/description/index.html | 2 +- base_exception/README.rst | 8 +++-- base_exception/__manifest__.py | 2 +- base_exception/static/description/index.html | 30 +++++++++------- base_name_search_improved/README.rst | 2 +- base_name_search_improved/__manifest__.py | 2 +- .../static/description/index.html | 2 +- base_partition/README.rst | 12 ++++--- base_partition/__manifest__.py | 2 +- base_partition/static/description/index.html | 26 ++++++++------ base_sequence_option/README.rst | 2 +- base_sequence_option/__manifest__.py | 2 +- .../static/description/index.html | 2 +- base_time_window/README.rst | 2 +- base_time_window/__manifest__.py | 2 +- .../static/description/index.html | 2 +- jsonifier/README.rst | 8 +++-- jsonifier/__manifest__.py | 2 +- jsonifier/static/description/index.html | 32 ++++++++++------- module_auto_update/README.rst | 8 +++-- module_auto_update/__manifest__.py | 2 +- .../static/description/index.html | 30 +++++++++------- rpc_helper/README.rst | 8 +++-- rpc_helper/__manifest__.py | 2 +- rpc_helper/static/description/index.html | 36 +++++++++++-------- upgrade_analysis/README.rst | 2 +- upgrade_analysis/__manifest__.py | 2 +- .../static/description/index.html | 2 +- 34 files changed, 158 insertions(+), 108 deletions(-) diff --git a/README.md b/README.md index 744c6a56d6f..e3fbeea03d2 100644 --- a/README.md +++ b/README.md @@ -22,28 +22,28 @@ Available addons addon | version | maintainers | summary --- | --- | --- | --- [attachment_delete_restrict](attachment_delete_restrict/) | 18.0.1.0.0 | yostashiro Kev-Roche | Restrict Deletion of Attachments -[attachment_queue](attachment_queue/) | 18.0.1.0.0 | florian-dacosta sebastienbeau | Base module adding the concept of queue for processing files +[attachment_queue](attachment_queue/) | 18.0.1.0.1 | florian-dacosta sebastienbeau | Base module adding the concept of queue for processing files [attachment_synchronize](attachment_synchronize/) | 18.0.1.0.0 | florian-dacosta sebastienbeau GSLabIt bealdav | Attachment Synchronize [attachment_unindex_content](attachment_unindex_content/) | 18.0.1.0.0 | moylop260 ebirbe luisg123v | Disable indexing of attachments -[auditlog](auditlog/) | 18.0.2.0.6 | | Audit Log +[auditlog](auditlog/) | 18.0.2.0.7 | | Audit Log [auto_backup](auto_backup/) | 18.0.1.0.1 | | Backups database [autovacuum_message_attachment](autovacuum_message_attachment/) | 18.0.1.0.1 | florian-dacosta | Automatically delete old mail messages and attachments [base_cron_exclusion](base_cron_exclusion/) | 18.0.1.0.1 | LoisRForgeFlow ChrisOForgeFlow | Allow you to select scheduled actions that should not run simultaneously. -[base_exception](base_exception/) | 18.0.1.1.0 | hparfr sebastienbeau | This module provide an abstract model to manage customizable exceptions to be applied on different models (sale order, invoice, ...) +[base_exception](base_exception/) | 18.0.1.1.1 | hparfr sebastienbeau | This module provide an abstract model to manage customizable exceptions to be applied on different models (sale order, invoice, ...) [base_fontawesome](base_fontawesome/) | 18.0.2.0.0 | | Up to date Fontawesome resources. [base_fontawesome_web_editor](base_fontawesome_web_editor/) | 18.0.1.0.0 | | Integration between base_fontawesome and web_editor for FontAwesome >= 6.7.2 support. [base_force_record_noupdate](base_force_record_noupdate/) | 18.0.1.0.0 | | Manually force noupdate=True on models [base_m2m_custom_field](base_m2m_custom_field/) | 18.0.1.0.0 | | Customizations of Many2many [base_model_restrict_update](base_model_restrict_update/) | 18.0.1.0.0 | yostashiro aungkokolin1997 | Update Restrict Model -[base_name_search_improved](base_name_search_improved/) | 18.0.1.1.0 | | Friendlier search when typing in relation fields -[base_partition](base_partition/) | 18.0.1.0.0 | | Base module that provide the partition method on all models +[base_name_search_improved](base_name_search_improved/) | 18.0.1.1.1 | | Friendlier search when typing in relation fields +[base_partition](base_partition/) | 18.0.1.0.1 | | Base module that provide the partition method on all models [base_remote](base_remote/) | 18.0.1.0.0 | | Remote Base [base_search_fuzzy](base_search_fuzzy/) | 18.0.1.0.0 | | Fuzzy search with the PostgreSQL trigram extension -[base_sequence_option](base_sequence_option/) | 18.0.1.0.0 | kittiu | Alternative sequence options for specific models +[base_sequence_option](base_sequence_option/) | 18.0.1.0.1 | kittiu | Alternative sequence options for specific models [base_sparse_field_list_support](base_sparse_field_list_support/) | 18.0.1.0.0 | | add list support to convert_to_cache() [base_technical_user](base_technical_user/) | 18.0.1.0.1 | | Add a technical user parameter on the company [base_temporary_action](base_temporary_action/) | 18.0.1.0.0 | | This addon allows to create temporary actions -[base_time_window](base_time_window/) | 18.0.1.1.0 | | Base model to handle time windows +[base_time_window](base_time_window/) | 18.0.1.1.1 | | Base model to handle time windows [base_view_inheritance_extension](base_view_inheritance_extension/) | 18.0.1.0.2 | | Adds more operators for view inheritance [bus_alt_connection](bus_alt_connection/) | 18.0.1.0.0 | | Needed when using PgBouncer as a connection pooler [database_cleanup](database_cleanup/) | 18.0.1.0.2 | | Database cleanup @@ -54,14 +54,14 @@ addon | version | maintainers | summary [fetchmail_notify_error_to_sender](fetchmail_notify_error_to_sender/) | 18.0.1.0.0 | | If fetching mails gives error, send an email to sender [html_text](html_text/) | 18.0.1.0.0 | | Generate excerpts from any HTML field [iap_alternative_provider](iap_alternative_provider/) | 18.0.1.0.0 | sebastienbeau | Base module for providing alternative provider for iap apps -[jsonifier](jsonifier/) | 18.0.1.1.0 | | JSON-ify data for all models +[jsonifier](jsonifier/) | 18.0.1.1.1 | | JSON-ify data for all models [mail_cleanup](mail_cleanup/) | 18.0.1.0.1 | | Mark as read or delete mails after a set time [module_analysis](module_analysis/) | 18.0.1.0.0 | legalsylvain | Add analysis tools regarding installed modules to know which installed modules comes from Odoo Core, OCA, or are custom modules -[module_auto_update](module_auto_update/) | 18.0.1.0.0 | | Automatically update Odoo modules +[module_auto_update](module_auto_update/) | 18.0.1.0.1 | | Automatically update Odoo modules [module_change_auto_install](module_change_auto_install/) | 18.0.1.0.3 | legalsylvain | Customize auto installables modules by configuration [odoo_test_xmlrunner](odoo_test_xmlrunner/) | 18.0.1.0.0 | | This module override Odoo testing method to run them with xmlrunner tool. [onchange_helper](onchange_helper/) | 18.0.1.0.1 | | Technical module that ease execution of onchange in Python code -[rpc_helper](rpc_helper/) | 18.0.1.0.1 | simahawk | Helpers for disabling RPC calls +[rpc_helper](rpc_helper/) | 18.0.1.0.2 | simahawk | Helpers for disabling RPC calls [scheduler_error_mailer](scheduler_error_mailer/) | 18.0.1.0.0 | | Scheduler Error Mailer [sentry](sentry/) | 18.0.1.0.4 | barsi naglis versada moylop260 fernandahf | Report Odoo errors to Sentry [sequence_python](sequence_python/) | 18.0.1.0.0 | | Calculate a sequence number from a Python expression @@ -70,7 +70,7 @@ addon | version | maintainers | summary [test_base_time_window](test_base_time_window/) | 18.0.1.0.0 | | Test Base model to handle time windows [tracking_manager](tracking_manager/) | 18.0.1.1.0 | Kev-Roche sebastienbeau | This module tracks all fields of a model, including one2many and many2many ones. [tracking_manager_domain](tracking_manager_domain/) | 18.0.1.0.1 | CRogos | This module extends the tracking manager to allow to define a domain on fields to track changes only when certain conditions apply. -[upgrade_analysis](upgrade_analysis/) | 18.0.1.4.3 | StefanRijnhart legalsylvain | Performs a difference analysis between modules installed on two different Odoo instances +[upgrade_analysis](upgrade_analysis/) | 18.0.1.4.4 | StefanRijnhart legalsylvain | Performs a difference analysis between modules installed on two different Odoo instances [//]: # (end addons) diff --git a/attachment_queue/README.rst b/attachment_queue/README.rst index 2a2add50364..1ba66a5d60c 100644 --- a/attachment_queue/README.rst +++ b/attachment_queue/README.rst @@ -11,7 +11,7 @@ Attachment Queue !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:bea3c21621c6f5d818a3554b23126cc117a204fcd978b5909069090a09c5d6d4 + !! source digest: sha256:fafc8b3a64f141a0b20e65bb4f01c86fc26516c598bff7bfe20b3bf5c97ed8da !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/attachment_queue/__manifest__.py b/attachment_queue/__manifest__.py index b9960e1116b..dc0e6feb260 100644 --- a/attachment_queue/__manifest__.py +++ b/attachment_queue/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Attachment Queue", - "version": "18.0.1.0.0", + "version": "18.0.1.0.1", "author": "Akretion,Odoo Community Association (OCA)", "summary": "Base module adding the concept of queue for processing files", "website": "https://github.com/OCA/server-tools", diff --git a/attachment_queue/static/description/index.html b/attachment_queue/static/description/index.html index 44313a3ad78..d4154a6aeb1 100644 --- a/attachment_queue/static/description/index.html +++ b/attachment_queue/static/description/index.html @@ -372,7 +372,7 @@

Attachment Queue

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

Beta License: AGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

This module adds async processing capabilities to attachments by diff --git a/auditlog/README.rst b/auditlog/README.rst index 42312cf1196..dc4721d5c40 100644 --- a/auditlog/README.rst +++ b/auditlog/README.rst @@ -11,7 +11,7 @@ Audit Log !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:eff893d734bc46c69f3872737aa234d2a2aaf763da5259ac3e977f22d1e4f3a9 + !! source digest: sha256:e0e544c7a26986bb9117c221de2a8725c1ac094fd65ad0b4719fc51df383d7e2 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/auditlog/__manifest__.py b/auditlog/__manifest__.py index 629376ca5bf..a36026b4067 100644 --- a/auditlog/__manifest__.py +++ b/auditlog/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Audit Log", - "version": "18.0.2.0.6", + "version": "18.0.2.0.7", "author": "ABF OSIELL, Odoo Community Association (OCA)", "license": "AGPL-3", "website": "https://github.com/OCA/server-tools", diff --git a/auditlog/static/description/index.html b/auditlog/static/description/index.html index 141e62d3af5..b85c2a81937 100644 --- a/auditlog/static/description/index.html +++ b/auditlog/static/description/index.html @@ -372,7 +372,7 @@

Audit Log

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

Beta License: AGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

This module allows the administrator to log user operations performed on diff --git a/base_exception/README.rst b/base_exception/README.rst index d5a253a4fae..828dfc09504 100644 --- a/base_exception/README.rst +++ b/base_exception/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + ============== Exception Rule ============== @@ -7,13 +11,13 @@ Exception Rule !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:d1ed01cf065908a53b1a57529a5a8d7dcfcd705e526291146f3a5e65f50f9279 + !! source digest: sha256:f26be2731bb07680ada96c7a82498292ac0bc49c68965087476b3d354e6acc9e !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png :target: https://odoo-community.org/page/development-status :alt: Mature -.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github diff --git a/base_exception/__manifest__.py b/base_exception/__manifest__.py index 7f2734a34db..7d3a49458b9 100644 --- a/base_exception/__manifest__.py +++ b/base_exception/__manifest__.py @@ -5,7 +5,7 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). { "name": "Exception Rule", - "version": "18.0.1.1.0", + "version": "18.0.1.1.1", "development_status": "Mature", "category": "Generic Modules", "summary": """ diff --git a/base_exception/static/description/index.html b/base_exception/static/description/index.html index 0ed122ce915..39aacf98508 100644 --- a/base_exception/static/description/index.html +++ b/base_exception/static/description/index.html @@ -3,7 +3,7 @@ -Exception Rule +README.rst -

-

Exception Rule

+
+ + +Odoo Community Association + +
+

Exception Rule

-

Mature License: AGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

+

Mature License: AGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

This module provide an abstract model to manage customizable exceptions to be applied on different models (sale order, invoice, …).

It is not useful by itself. You can see an example of implementation in @@ -390,13 +395,13 @@

Exception Rule

-

Known issues / Roadmap

+

Known issues / Roadmap

This module executes user-provided code though a safe_eval which might be unsecure. How to mitigate risks should be adressed in future versions of this module.

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -404,9 +409,9 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • Akretion
  • Sodexis
  • @@ -415,7 +420,7 @@

    Authors

-

Contributors

+

Contributors

-

Other credits

+

Other credits

The migration of this module from 17.0 to 18.0 was financially supported by Camptocamp.

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -456,5 +461,6 @@

Maintainers

+
diff --git a/base_name_search_improved/README.rst b/base_name_search_improved/README.rst index 11cb00895c2..9cbcb51c9fd 100644 --- a/base_name_search_improved/README.rst +++ b/base_name_search_improved/README.rst @@ -11,7 +11,7 @@ Improved Name Search !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:506ec7a25a0bb1d86a79c06d4577aca5a3cda5d81ed921490e95a53a5e49df24 + !! source digest: sha256:6e66c3974d50998308778b1f395d8dd8e3dd4fede18aa4f446f8d02c6d94ea0e !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/base_name_search_improved/__manifest__.py b/base_name_search_improved/__manifest__.py index 25690c6250d..fc060573267 100644 --- a/base_name_search_improved/__manifest__.py +++ b/base_name_search_improved/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Improved Name Search", "summary": "Friendlier search when typing in relation fields", - "version": "18.0.1.1.0", + "version": "18.0.1.1.1", "category": "Uncategorized", "website": "https://github.com/OCA/server-tools", "author": "Daniel Reis, Odoo Community Association (OCA), ADHOC SA", diff --git a/base_name_search_improved/static/description/index.html b/base_name_search_improved/static/description/index.html index b09c0f6b56d..f75d4d4ceee 100644 --- a/base_name_search_improved/static/description/index.html +++ b/base_name_search_improved/static/description/index.html @@ -372,7 +372,7 @@

Improved Name Search

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:506ec7a25a0bb1d86a79c06d4577aca5a3cda5d81ed921490e95a53a5e49df24 +!! source digest: sha256:6e66c3974d50998308778b1f395d8dd8e3dd4fede18aa4f446f8d02c6d94ea0e !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

Extends the name search feature to use additional, more relaxed matching diff --git a/base_partition/README.rst b/base_partition/README.rst index 61a84ee32ff..be3c18bb750 100644 --- a/base_partition/README.rst +++ b/base_partition/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + ============== Base Partition ============== @@ -7,13 +11,13 @@ Base Partition !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:505fafa7278c9732b9e8b76a4e69e5320eaae57addb3848ced966c35cad279ff + !! source digest: sha256:c091ccca724af3819250b92a6e29f9dd10a1a1ee44a9c27596e3c7ec656e84a0 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/license-LGPL--3-blue.png :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html :alt: License: LGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github @@ -65,8 +69,8 @@ Authors Contributors ------------ -- Nans Lefebvre -- Hughes Damry +- Nans Lefebvre +- Hughes Damry Maintainers ----------- diff --git a/base_partition/__manifest__.py b/base_partition/__manifest__.py index 1e0782c569e..129a234b8d3 100644 --- a/base_partition/__manifest__.py +++ b/base_partition/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Base Partition", "summary": "Base module that provide the partition method on all models", - "version": "18.0.1.0.0", + "version": "18.0.1.0.1", "category": "Uncategorized", "website": "https://github.com/OCA/server-tools", "author": "Acsone SA/NV, Odoo Community Association (OCA)", diff --git a/base_partition/static/description/index.html b/base_partition/static/description/index.html index 7887526af82..efdca5166ce 100644 --- a/base_partition/static/description/index.html +++ b/base_partition/static/description/index.html @@ -3,7 +3,7 @@ -Base Partition +README.rst -

-

Base Partition

+
+ + +Odoo Community Association + +
+

Base Partition

-

Beta License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

+

Beta License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

This module adds a partition(self, accessor) method to every model. It accepts for accessor any parameter that would be accepted by mapped, i.e. a string “field(.subfield)*” or a function (lambda x: not x.b). It @@ -392,7 +397,7 @@

Base Partition

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -400,22 +405,22 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • Acsone SA/NV
-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -428,5 +433,6 @@

Maintainers

+
diff --git a/base_sequence_option/README.rst b/base_sequence_option/README.rst index e8d7e405b8b..5729062737c 100644 --- a/base_sequence_option/README.rst +++ b/base_sequence_option/README.rst @@ -11,7 +11,7 @@ Base Sequence Option !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:71bebda38ec79795b646d22417bda3108ef4cbf8f2a1dd88b49c30296f03810f + !! source digest: sha256:85fb1c0208e57b9d1f158c5e7adf37e5ccd7516c4e655f1c87836314bf037683 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png diff --git a/base_sequence_option/__manifest__.py b/base_sequence_option/__manifest__.py index 6a3bda71308..94ab93f016a 100644 --- a/base_sequence_option/__manifest__.py +++ b/base_sequence_option/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Base Sequence Option", "summary": "Alternative sequence options for specific models", - "version": "18.0.1.0.0", + "version": "18.0.1.0.1", "author": "Ecosoft, Odoo Community Association (OCA)", "maintainers": ["kittiu"], "development_status": "Alpha", diff --git a/base_sequence_option/static/description/index.html b/base_sequence_option/static/description/index.html index b7416972179..34a6b256c0e 100644 --- a/base_sequence_option/static/description/index.html +++ b/base_sequence_option/static/description/index.html @@ -372,7 +372,7 @@

Base Sequence Option

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:71bebda38ec79795b646d22417bda3108ef4cbf8f2a1dd88b49c30296f03810f +!! source digest: sha256:85fb1c0208e57b9d1f158c5e7adf37e5ccd7516c4e655f1c87836314bf037683 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Alpha License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

This module allow user to add optional sequences to some document model. diff --git a/base_time_window/README.rst b/base_time_window/README.rst index 628505bda72..c48b7d76285 100644 --- a/base_time_window/README.rst +++ b/base_time_window/README.rst @@ -11,7 +11,7 @@ Base Time Window !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:d2feedfba0c1f2d3ff259174ed5416d5511b53ad3c6c6c2539226e6f74823251 + !! source digest: sha256:a6c4e39785827c53867fedc97ffeada7cce0c9ce953339c4b3e827f94ac904e7 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/base_time_window/__manifest__.py b/base_time_window/__manifest__.py index c5bdb4fc1d9..049b9a714d0 100644 --- a/base_time_window/__manifest__.py +++ b/base_time_window/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Base Time Window", "summary": "Base model to handle time windows", - "version": "18.0.1.1.0", + "version": "18.0.1.1.1", "category": "Technical Settings", "author": "ACSONE SA/NV, Camptocamp, Odoo Community Association (OCA)", "license": "AGPL-3", diff --git a/base_time_window/static/description/index.html b/base_time_window/static/description/index.html index f4e59e81f5d..7f48ce8072a 100644 --- a/base_time_window/static/description/index.html +++ b/base_time_window/static/description/index.html @@ -372,7 +372,7 @@

Base Time Window

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

Beta License: AGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

This module provides base classes and models to manage time windows diff --git a/jsonifier/README.rst b/jsonifier/README.rst index c0661fd352d..4f003a6d222 100644 --- a/jsonifier/README.rst +++ b/jsonifier/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + ========= JSONifier ========= @@ -7,13 +11,13 @@ JSONifier !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:cbf418975463b6a5ff3ae89fdd5b77a2f9c2ad8c23f82869ce51846f94bff7ce + !! source digest: sha256:a064cec295d1e9072c772cfaaaeee217cc7da886fa33b319d2ebbae819ceffc9 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/license-LGPL--3-blue.png :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html :alt: License: LGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github diff --git a/jsonifier/__manifest__.py b/jsonifier/__manifest__.py index 9c9c9e2f7ea..8049e03fc10 100644 --- a/jsonifier/__manifest__.py +++ b/jsonifier/__manifest__.py @@ -6,7 +6,7 @@ { "name": "JSONifier", "summary": "JSON-ify data for all models", - "version": "18.0.1.1.0", + "version": "18.0.1.1.1", "category": "Uncategorized", "website": "https://github.com/OCA/server-tools", "author": "Akretion, ACSONE, Camptocamp, Odoo Community Association (OCA)", diff --git a/jsonifier/static/description/index.html b/jsonifier/static/description/index.html index 9044815608d..2b81d84fe46 100644 --- a/jsonifier/static/description/index.html +++ b/jsonifier/static/description/index.html @@ -3,7 +3,7 @@ -JSONifier +README.rst -

-

JSONifier

+
+ + +Odoo Community Association + +
+

JSONifier

-

Beta License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

+

Beta License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

This module adds a ‘jsonify’ method to every model of the ORM. It works on the current recordset and requires a single argument ‘parser’ that specify the field to extract.

@@ -522,9 +527,9 @@

JSONifier

-

Usage

+

Usage

-

with_fieldname parameter

+

with_fieldname parameter

The with_fieldname option of jsonify() method, when true, will inject on the same level of the data “_fieldname_$field” keys that will contain the field name, in the language of the current user.

@@ -551,7 +556,7 @@

with_fieldname parameter

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -559,9 +564,9 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • Akretion
  • ACSONE
  • @@ -569,7 +574,7 @@

    Authors

-

Contributors

+

Contributors

-

Other credits

+

Other credits

The migration of this module from 17.0 to 18.0 was financially supported by Camptocamp.

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -600,5 +605,6 @@

Maintainers

+
diff --git a/module_auto_update/README.rst b/module_auto_update/README.rst index e306ef24c2a..c7ebe2be4ff 100644 --- a/module_auto_update/README.rst +++ b/module_auto_update/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + ================== Module Auto Update ================== @@ -7,13 +11,13 @@ Module Auto Update !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:b346c35002421982ddef8e3463e21ac3982e69ce94502b48ab0c36081e2e0ed5 + !! source digest: sha256:9b311524bac19f1ecc8c1a062062ec9f48babacc7a8133590332743de41cab16 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png :target: https://odoo-community.org/page/development-status :alt: Production/Stable -.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/license-LGPL--3-blue.png :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html :alt: License: LGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github diff --git a/module_auto_update/__manifest__.py b/module_auto_update/__manifest__.py index 7eeb64d6699..ece382c1876 100644 --- a/module_auto_update/__manifest__.py +++ b/module_auto_update/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Module Auto Update", "summary": "Automatically update Odoo modules", - "version": "18.0.1.0.0", + "version": "18.0.1.0.1", "category": "Extra Tools", "website": "https://github.com/OCA/server-tools", "author": "LasLabs, " diff --git a/module_auto_update/static/description/index.html b/module_auto_update/static/description/index.html index ef418a4bebf..5e2b0179536 100644 --- a/module_auto_update/static/description/index.html +++ b/module_auto_update/static/description/index.html @@ -3,7 +3,7 @@ -Module Auto Update +README.rst -
-

Module Auto Update

+
+ + +Odoo Community Association + +
+

Module Auto Update

-

Production/Stable License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

+

Production/Stable License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

This addon provides mechanisms to compute sha1 hashes of installed addons, and save them in the database. It also provides a method that exploits these mechanisms to update a database by upgrading only the @@ -393,7 +398,7 @@

Module Auto Update

-

Configuration

+

Configuration

This module supports the following system parameters:

  • module_auto_update.exclude_patterns: comma-separated list of file @@ -406,7 +411,7 @@

    Configuration

    checksums.

-

Usage

+

Usage

The main method provided by this module is upgrade_changed_checksum on ir.module.module. It runs a database upgrade for all installed modules for which the hash has changed since the last successful run of @@ -428,7 +433,7 @@

Usage

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -436,9 +441,9 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • LasLabs
  • Juan José Scarafía
  • @@ -447,7 +452,7 @@

    Authors

-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -471,5 +476,6 @@

Maintainers

+
diff --git a/rpc_helper/README.rst b/rpc_helper/README.rst index 72f4074a29c..75ba126583e 100644 --- a/rpc_helper/README.rst +++ b/rpc_helper/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + =========== Disable RPC =========== @@ -7,13 +11,13 @@ Disable RPC !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:a4e80621f60f9df5e0de43002c62f60ebd89bda221a9e5c31ffa35e3cc4dd9f7 + !! source digest: sha256:d71c6c86a2635b277c84c2a0eeeb2fd97802d45117fe1204a3314cc158f09b6d !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/license-LGPL--3-blue.png :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html :alt: License: LGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github diff --git a/rpc_helper/__manifest__.py b/rpc_helper/__manifest__.py index cf1324355c5..bb04abac0e5 100644 --- a/rpc_helper/__manifest__.py +++ b/rpc_helper/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Disable RPC", "summary": """Helpers for disabling RPC calls""", - "version": "18.0.1.0.1", + "version": "18.0.1.0.2", "development_status": "Beta", "license": "LGPL-3", "website": "https://github.com/OCA/server-tools", diff --git a/rpc_helper/static/description/index.html b/rpc_helper/static/description/index.html index 4a93d38e452..4d964698859 100644 --- a/rpc_helper/static/description/index.html +++ b/rpc_helper/static/description/index.html @@ -3,7 +3,7 @@ -Disable RPC +README.rst -
-

Disable RPC

+
+ + +Odoo Community Association + +
+

Disable RPC

-

Beta License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

+

Beta License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

Provide helpers to authorize RPC calls.

Table of contents

@@ -391,7 +396,7 @@

Disable RPC

-

Configuration

+

Configuration

Enable debug mode and go to “Technical -> Database Structure -> Models”.

Open the model that you like to configure and go to the tab “RPC config”.

@@ -415,9 +420,9 @@

Configuration

better readability.

-

Usage

+

Usage

-

Via code

+

Via code

Decorate an Odoo model class like this:

 from odoo.addons.rpc_helper.decorator import disable_rpc
@@ -435,12 +440,12 @@ 

Via code

-

Via ir.model configuration

+

Via ir.model configuration

See “Configuration” section.

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -448,15 +453,15 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • Camptocamp
-

Contributors

+

Contributors

@@ -466,12 +471,12 @@

Contributors

-

Other credits

+

Other credits

The migration of this module from 16.0 to 18.0 was financially supported by Camptocamp.

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -486,5 +491,6 @@

Maintainers

+
diff --git a/upgrade_analysis/README.rst b/upgrade_analysis/README.rst index 296db86379e..1209f220f65 100644 --- a/upgrade_analysis/README.rst +++ b/upgrade_analysis/README.rst @@ -11,7 +11,7 @@ Upgrade Analysis !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:7d83347c5c453bd132f25afe4f88b33bab0a7eb4f4b94796a52e6e9b57d311cc + !! source digest: sha256:c2c27b7d71aa3928b322fe32b128516efa8781bf4a35166acbc3671263c254a4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/upgrade_analysis/__manifest__.py b/upgrade_analysis/__manifest__.py index 659d15bc582..b26753091a0 100644 --- a/upgrade_analysis/__manifest__.py +++ b/upgrade_analysis/__manifest__.py @@ -5,7 +5,7 @@ "name": "Upgrade Analysis", "summary": "Performs a difference analysis between modules" " installed on two different Odoo instances", - "version": "18.0.1.4.3", + "version": "18.0.1.4.4", "category": "Migration", "author": "Therp BV, Opener B.V., GRAP, Odoo Community Association (OCA)", "maintainers": ["StefanRijnhart", "legalsylvain"], diff --git a/upgrade_analysis/static/description/index.html b/upgrade_analysis/static/description/index.html index 0f23746d713..375e8044e36 100644 --- a/upgrade_analysis/static/description/index.html +++ b/upgrade_analysis/static/description/index.html @@ -372,7 +372,7 @@

Upgrade Analysis

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:7d83347c5c453bd132f25afe4f88b33bab0a7eb4f4b94796a52e6e9b57d311cc +!! source digest: sha256:c2c27b7d71aa3928b322fe32b128516efa8781bf4a35166acbc3671263c254a4 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

This module provides the tool to generate the database analysis files