summaryrefslogtreecommitdiff
path: root/openerp/sql_db.py
diff options
context:
space:
mode:
authorVo Minh Thu <vmt@openerp.com>2011-05-25 18:06:07 +0200
committerVo Minh Thu <vmt@openerp.com>2011-05-25 18:06:07 +0200
commit2f6dff76900a87221bd7c10bd761beffff4669bd (patch)
tree28e6ee319db178822ac651243e265168a41162c7 /openerp/sql_db.py
parent959ff88d646546e8e353bfb6467334df60dcac45 (diff)
parent16ac84af68d91b177394a2249f8b866e45ce3de3 (diff)
[MERGE] moved around some code (preparing for some refactoring) (large diff).
bzr revid: vmt@openerp.com-20110525160607-45pq13910rduijkk
Diffstat (limited to 'openerp/sql_db.py')
-rw-r--r--openerp/sql_db.py20
1 files changed, 15 insertions, 5 deletions
diff --git a/openerp/sql_db.py b/openerp/sql_db.py
index 8afd684d3f1..e759a13e1d3 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
@@ -68,17 +67,22 @@ sql_counter = 0
class Cursor(object):
IN_MAX = 1000 # decent limit on size of IN queries - guideline = Oracle limit
- __logger = logging.getLogger('db.cursor')
+ __logger = None
def check(f):
@wraps(f)
def wrapper(self, *args, **kwargs):
if self.__closed:
- raise psycopg2.OperationalError('Unable to use the cursor after having closed it')
+ msg = 'Unable to use a closed cursor.'
+ if self.__closer:
+ msg += ' It was closed at %s, line %s' % self.__closer
+ raise psycopg2.OperationalError(msg)
return f(self, *args, **kwargs)
return wrapper
def __init__(self, pool, dbname, serialized=False):
+ if self.__class__.__logger is None:
+ self.__class__.__logger = logging.getLogger('db.cursor')
self.sql_from_log = {}
self.sql_into_log = {}
@@ -100,6 +104,7 @@ class Cursor(object):
self.__caller = frame_codeinfo(currentframe(),2)
else:
self.__caller = False
+ self.__closer = False
def __del__(self):
if not self.__closed:
@@ -198,6 +203,8 @@ class Cursor(object):
if not self._obj:
return
+ if self.sql_log:
+ self.__closer = frame_codeinfo(currentframe(),3)
self.print_log()
if not self._serialized:
@@ -375,15 +382,18 @@ def dsn_are_equals(first, second):
return key(first) == key(second)
-_Pool = ConnectionPool(int(tools.config['db_maxconn']))
+_Pool = None
def db_connect(db_name):
+ global _Pool
+ if _Pool is None:
+ _Pool = ConnectionPool(int(tools.config['db_maxconn']))
currentThread().dbname = 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'):