[REF] openerp.pooler/openerp.sql_db: cleaner dependencies:

- openerp.pooler no longer provides get_db_only, which is a provided by sql_db
- openerp.sql_db does not rely anymore on netsvc, which is goog as it was
making a circular import. The downside is that db_close callers have to clean
also the Agent themselves.

bzr revid: vmt@openerp.com-20110420141407-au0oanwjc0t15vy5
This commit is contained in:
Vo Minh Thu 2011-04-20 16:14:07 +02:00
parent f96d58c9c6
commit 0e1186dd3d
5 changed files with 11 additions and 18 deletions

View File

@ -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:

View File

@ -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]

View File

@ -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')

View File

@ -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'):

View File

@ -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