From 08febd5101b269f3a11fb058aa225ccb1726df2f Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Mon, 6 Mar 2023 15:23:12 +0100 Subject: [PATCH 1/3] component: add RegistryNotReadyError Sounds valueable to have a specific type of error rather than a KeyError when something break because no registry is ready. --- component/core.py | 13 ++++++++----- component/exception.py | 4 ++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/component/core.py b/component/core.py index 45ee64069..aa4cb5250 100644 --- a/component/core.py +++ b/component/core.py @@ -23,7 +23,7 @@ from odoo import models from odoo.tools import LastOrderedSet, OrderedSet -from .exception import NoComponentError, SeveralComponentError +from .exception import NoComponentError, RegistryNotReadyError, SeveralComponentError _logger = logging.getLogger(__name__) @@ -252,14 +252,17 @@ def __init__( dbname = self.env.cr.dbname try: self.components_registry = _component_databases[dbname] - except KeyError: - _logger.error( + except KeyError as exc: + msg = ( "No component registry for database %s. " "Probably because the Odoo registry has not been built " - "yet.", + "yet." + ) + _logger.error( + msg, dbname, ) - raise + raise RegistryNotReadyError(msg) from exc self._propagate_kwargs = ["collection", "model_name", "components_registry"] for attr_name, value in kwargs.items(): setattr(self, attr_name, value) diff --git a/component/exception.py b/component/exception.py index 3883282e8..cb4c67853 100644 --- a/component/exception.py +++ b/component/exception.py @@ -12,3 +12,7 @@ class NoComponentError(ComponentException): class SeveralComponentError(ComponentException): """More than one component have been found""" + + +class RegistryNotReadyError(ComponentException): + """Component registry not ready yet for given DB.""" From adaf47f6bf509cf17f7a979246729a3db61c579e Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Mon, 6 Mar 2023 15:35:26 +0100 Subject: [PATCH 2/3] component: add is_component_registry_ready Handy function to allow depending modules to check for registry readyness w/o exposing internals. --- component/tests/__init__.py | 1 + component/tests/test_utils.py | 20 ++++++++++++++++++++ component/utils.py | 14 ++++++++++++++ 3 files changed, 35 insertions(+) create mode 100644 component/tests/test_utils.py create mode 100644 component/utils.py diff --git a/component/tests/__init__.py b/component/tests/__init__.py index de5a88a91..29c286e26 100644 --- a/component/tests/__init__.py +++ b/component/tests/__init__.py @@ -2,3 +2,4 @@ from . import test_component from . import test_lookup from . import test_work_on +from . import test_utils diff --git a/component/tests/test_utils.py b/component/tests/test_utils.py new file mode 100644 index 000000000..f630a83e6 --- /dev/null +++ b/component/tests/test_utils.py @@ -0,0 +1,20 @@ +# Copyright 2023 Camptocamp SA +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html) + +from unittest import mock + +from odoo.addons.component.utils import is_component_registry_ready + +from .common import TransactionComponentRegistryCase + + +class TestUtils(TransactionComponentRegistryCase): + def test_registry_ready(self): + path = "odoo.addons.component.utils.get_component_registry" + with mock.patch(path) as mocked: + mocked.return_value = None + self.assertFalse(is_component_registry_ready(self.env.cr.dbname)) + self._setup_registry(self) + mocked.return_value = self.comp_registry + self.assertTrue(is_component_registry_ready(self.env.cr.dbname)) + self._teardown_registry(self) diff --git a/component/utils.py b/component/utils.py new file mode 100644 index 000000000..66e955125 --- /dev/null +++ b/component/utils.py @@ -0,0 +1,14 @@ +# Copyright 2023 Camptocamp SA +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html) + +from .core import _component_databases + + +def get_component_registry(dbname): + return _component_databases.get(dbname) + + +def is_component_registry_ready(dbname): + """Return True if the registry is ready to be used.""" + comp_registry = get_component_registry(dbname) + return comp_registry.ready if comp_registry else False From 491a548bef8696f923dc6c71da1e973123cc4f7c Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Mon, 6 Mar 2023 15:35:57 +0100 Subject: [PATCH 3/3] component: update contributors Contributing and maitaining since a while... ;) --- component/readme/CONTRIBUTORS.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/component/readme/CONTRIBUTORS.rst b/component/readme/CONTRIBUTORS.rst index 60a076dc1..60d861306 100644 --- a/component/readme/CONTRIBUTORS.rst +++ b/component/readme/CONTRIBUTORS.rst @@ -1,2 +1,3 @@ * Guewen Baconnier * Laurent Mignon +* Simone Orsi