From 96f703ff842d4b83e5431d4167d7ac6f40044c94 Mon Sep 17 00:00:00 2001 From: George Daramouskas Date: Tue, 31 Jan 2017 17:17:55 +0100 Subject: [PATCH] [ADD] web: warning on incompatible databases If a database is not an Odoo database or is not the same version Closes #15171 --- addons/web/controllers/main.py | 1 + addons/web/views/database_manager.html | 5 ++++- odoo/service/db.py | 24 ++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index de2e658c57d..e8ff09721bd 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -614,6 +614,7 @@ class Database(http.Controller): d['databases'] = [] try: d['databases'] = http.db_list() + d['incompatible_databases'] = odoo.service.db.list_db_incompatible(d['databases']) except odoo.exceptions.AccessDenied: monodb = db_monodb() if monodb: diff --git a/addons/web/views/database_manager.html b/addons/web/views/database_manager.html index f0b3c570c2c..e86fb9901a8 100644 --- a/addons/web/views/database_manager.html +++ b/addons/web/views/database_manager.html @@ -129,7 +129,10 @@ {% if databases %}
{% for db in databases %} - + + {% if db in incompatible_databases %} + + {% endif %} {{ db }} {% if manage %}
diff --git a/odoo/service/db.py b/odoo/service/db.py index d6ff8d15976..ef57f831f24 100644 --- a/odoo/service/db.py +++ b/odoo/service/db.py @@ -21,6 +21,8 @@ from odoo.exceptions import UserError import odoo.release import odoo.sql_db import odoo.tools +from odoo.sql_db import db_connect +from odoo.release import version_info _logger = logging.getLogger(__name__) @@ -342,6 +344,28 @@ def list_dbs(force=False): res.sort() return res +def list_db_incompatible(databases): + """"Check a list of databases if they are compatible with this version of Odoo + + :param databases: A list of existing Postgresql databases + :return: A list of databases that are incompatible + """ + incompatible_databases = [] + server_version = '.'.join(map(str, version_info[:2])) + for database_name in databases: + with closing(db_connect(database_name).cursor()) as cr: + cr.execute("SELECT 1 FROM information_schema.tables WHERE table_name='ir_module_module'") + if cr.fetchone(): + cr.execute("SELECT latest_version FROM ir_module_module WHERE name=%s", ('base',)) + base_version = cr.fetchone()[0] + # e.g. 10.saas~15 + if '.'.join(base_version.split('.')[:2]) != server_version: + incompatible_databases.append(database_name) + else: + incompatible_databases.append(database_name) + return incompatible_databases + + def exp_list(document=False): if not odoo.tools.config['list_db']: raise odoo.exceptions.AccessDenied()