From 03e44375feaabb70c3d8118721d50b957f4c443e Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Thu, 14 Nov 2019 15:00:34 +0000 Subject: [PATCH] [FIX] registry: dependencies of custom fields may not exist Ignore exceptions when resolving dependencies in that case. This reimplements a behavior from former versions. closes odoo/odoo#40300 X-original-commit: 826c86e9ab31963e410887a30326f45bcfadf5ea Signed-off-by: Christophe Simonis --- odoo/modules/registry.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/odoo/modules/registry.py b/odoo/modules/registry.py index 8ceeb74e4ac..19124738624 100644 --- a/odoo/modules/registry.py +++ b/odoo/modules/registry.py @@ -16,9 +16,8 @@ import threading import odoo from .. import SUPERUSER_ID from odoo.sql_db import TestCursor -from odoo.tools import (assertion_report, config, existing_tables, - lazy_classproperty, lazy_property, table_exists, - topological_sort, OrderedSet) +from odoo.tools import (assertion_report, config, existing_tables, ignore, + lazy_classproperty, lazy_property, OrderedSet) from odoo.tools.lru import LRU _logger = logging.getLogger(__name__) @@ -249,13 +248,15 @@ class Registry(Mapping): model._setup_fields() # determine field dependencies - Model = odoo.models.Model - dependencies = { - field: set(field.resolve_depends(model)) - for model in models - if isinstance(model, Model) - for field in model._fields.values() - } + dependencies = {} + for model in models: + if model._abstract: + continue + for field in model._fields.values(): + # dependencies of custom fields may not exist; ignore that case + exceptions = (Exception,) if field.manual else () + with ignore(*exceptions): + dependencies[field] = set(field.resolve_depends(model)) # determine transitive dependencies def transitive_dependencies(field, seen=[]):