diff --git a/openerp/osv/osv.py b/openerp/osv/osv.py index 222c08db930..5d2e457f965 100644 --- a/openerp/osv/osv.py +++ b/openerp/osv/osv.py @@ -26,6 +26,7 @@ import orm import openerp.netsvc as netsvc import openerp.pooler as pooler +import openerp.sql_db as sql_db import copy import logging from psycopg2 import IntegrityError, errorcodes @@ -91,7 +92,7 @@ class object_proxy(netsvc.Service): ids = args[3] else: ids = [] - cr = pooler.get_db_only(dbname).cursor() + cr = sql_db.db_connect(db_name).cursor() return src(obj, cr, uid, ids, context=(ctx or {})) except Exception: pass @@ -102,7 +103,7 @@ class object_proxy(netsvc.Service): # be returned, it is the best we have. try: - cr = pooler.get_db_only(dbname).cursor() + cr = sql_db.db_connect(db_name).cursor() res = translate(cr, name=False, source_type=ttype, lang=lang, source=src) if res: diff --git a/openerp/pooler.py b/openerp/pooler.py index 3c1b263ef13..0de5f832494 100644 --- a/openerp/pooler.py +++ b/openerp/pooler.py @@ -19,6 +19,8 @@ # ############################################################################## +import sql_db + pool_dic = {} def get_db_and_pool(db_name, force_demo=False, status=None, update_module=False, pooljobs=True): @@ -26,7 +28,7 @@ def get_db_and_pool(db_name, force_demo=False, status=None, update_module=False, if not status: status={} - db = get_db_only(db_name) + db = sql_db.db_connect(db_name) if db_name in pool_dic: pool = pool_dic[db_name] @@ -66,18 +68,6 @@ def restart_pool(db_name, force_demo=False, status=None, update_module=False): return get_db_and_pool(db_name, force_demo, status, update_module=update_module) -def get_db_only(db_name): - """Return a database connection.""" - # ATTENTION: - # do not put this import outside this function - # sql_db must not be loaded before the logger is initialized. - # sql_db import psycopg2.tool which create a default logger if there is not. - # this resulting of having the logs outputed twice... - import openerp.sql_db as sql_db - db = sql_db.db_connect(db_name) - return db - - def get_db(db_name): """Return a database connection. The corresponding osv_pool is initialize.""" return get_db_and_pool(db_name)[0] diff --git a/openerp/service/web_services.py b/openerp/service/web_services.py index 2455d250a94..95194679198 100644 --- a/openerp/service/web_services.py +++ b/openerp/service/web_services.py @@ -154,6 +154,7 @@ class db(netsvc.ExportService): def exp_drop(self, db_name): sql_db.close_db(db_name) + openerp.netsvc.Agent.cancel(db_name) logger = netsvc.Logger() db = sql_db.db_connect('template1') @@ -256,6 +257,7 @@ class db(netsvc.ExportService): def exp_rename(self, old_name, new_name): sql_db.close_db(old_name) + openerp.netsvc.Agent.cancel(db_name) logger = netsvc.Logger() db = sql_db.db_connect('template1') diff --git a/openerp/sql_db.py b/openerp/sql_db.py index 8afd684d3f1..4b1d8aab794 100644 --- a/openerp/sql_db.py +++ b/openerp/sql_db.py @@ -54,7 +54,6 @@ psycopg2.extensions.register_type(psycopg2.extensions.new_type((700, 701, 1700,) import tools from tools.func import wraps, frame_codeinfo -from netsvc import Agent from datetime import datetime as mdt from datetime import timedelta import threading @@ -382,8 +381,8 @@ def db_connect(db_name): return Connection(_Pool, db_name) def close_db(db_name): + """ You might want to call openerp.netsvc.Agent.cancel(db_name) along this function.""" _Pool.close_all(dsn(db_name)) - Agent.cancel(db_name) tools.cache.clean_caches_for_db(db_name) ct = currentThread() if hasattr(ct, 'dbname'): diff --git a/openerp/tools/translate.py b/openerp/tools/translate.py index 9723135ff49..5761ba87cc0 100644 --- a/openerp/tools/translate.py +++ b/openerp/tools/translate.py @@ -27,6 +27,7 @@ import itertools import locale import os import openerp.pooler as pooler +import openerp.sql_db as sql_db import re import logging import tarfile @@ -160,7 +161,7 @@ class GettextAlias(object): # find current DB based on thread/worker db name (see netsvc) db_name = getattr(threading.currentThread(), 'dbname', None) if db_name: - return pooler.get_db_only(db_name) + return sql_db.db_connect(db_name) def _get_cr(self, frame): is_new_cr = False