[REF] openerp.pooler/openerp.sql_db: cleaner dependencies:
authorVo Minh Thu <vmt@openerp.com>
Wed, 20 Apr 2011 14:14:07 +0000 (16:14 +0200)
committerVo Minh Thu <vmt@openerp.com>
Wed, 20 Apr 2011 14:14:07 +0000 (16:14 +0200)
- 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

openerp/osv/osv.py
openerp/pooler.py
openerp/service/web_services.py
openerp/sql_db.py
openerp/tools/translate.py

index 222c08d..5d2e457 100644 (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:
index 3c1b263..0de5f83 100644 (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]
index 2455d25..9519467 100644 (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')
index 8afd684..4b1d8aa 100644 (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'):
index 9723135..5761ba8 100644 (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