summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Kreen2011-12-08 16:15:28 +0000
committerMarko Kreen2011-12-08 16:33:16 +0000
commitb1e3350a364282b22c69236af6a2b5654cae8b28 (patch)
tree20691aa41e602b8cc83a1a0acc7839da4439a47c
parent8227d443103bf209d7a5d60b8dd9cabe8452ac55 (diff)
skytools: seems psycopg2 isolation constants do change
Psycopg 2.4.2 moved them around. Stop hard-coding them, instead import from psycopg2.externsions Also have a symbol for repeatable read.
-rw-r--r--python/skytools/__init__.py7
-rw-r--r--python/skytools/psycopgwrapper.py24
-rw-r--r--python/skytools/scripting.py23
3 files changed, 24 insertions, 30 deletions
diff --git a/python/skytools/__init__.py b/python/skytools/__init__.py
index b2f1eae1..c424051d 100644
--- a/python/skytools/__init__.py
+++ b/python/skytools/__init__.py
@@ -35,6 +35,10 @@ _symbols = {
# skytools.psycopgwrapper
'connect_database': 'skytools.psycopgwrapper:connect_database',
'DBError': 'skytools.psycopgwrapper:DBError',
+ 'I_AUTOCOMMIT': 'skytools.psycopgwrapper:I_AUTOCOMMIT',
+ 'I_READ_COMMITTED': 'skytools.psycopgwrapper:I_READ_COMMITTED',
+ 'I_REPEATABLE_READ': 'skytools.psycopgwrapper:I_REPEATABLE_READ',
+ 'I_SERIALIZABLE': 'skytools.psycopgwrapper:I_SERIALIZABLE',
# skytools.querybuilder
'PLPyQuery': 'skytools.querybuilder:PLPyQuery',
'PLPyQueryBuilder': 'skytools.querybuilder:PLPyQueryBuilder',
@@ -69,9 +73,6 @@ _symbols = {
'DBScript': 'skytools.scripting:DBScript',
'signal_pidfile': 'skytools.scripting:signal_pidfile',
'UsageError': 'skytools.scripting:UsageError',
- 'I_AUTOCOMMIT': 'skytools.scripting:I_AUTOCOMMIT',
- 'I_READ_COMMITTED': 'skytools.scripting:I_READ_COMMITTED',
- 'I_SERIALIZABLE': 'skytools.scripting:I_SERIALIZABLE',
# skytools.skylog
'getLogger': 'skytools.skylog:getLogger',
# skytools.sockutil
diff --git a/python/skytools/psycopgwrapper.py b/python/skytools/psycopgwrapper.py
index 923b6f39..8c6d90b6 100644
--- a/python/skytools/psycopgwrapper.py
+++ b/python/skytools/psycopgwrapper.py
@@ -54,21 +54,25 @@ Plain .fetchall() / .fetchone() give exact same result.
"""
-# no exports
-__all__ = ['connect_database', 'DBError']
+__all__ = ['connect_database', 'DBError', 'I_AUTOCOMMIT', 'I_READ_COMMITTED',
+ 'I_REPEATABLE_READ', 'I_SERIALIZABLE']
-##from psycopg2.psycopg1 import connect as _pgconnect
-# psycopg2.psycopg1.cursor is too backwards compatible,
-# to the point of avoiding optimized access.
-# only backwards compat thing we need is dict* methods
-
-import sys, socket
-import psycopg2.extensions, psycopg2.extras
-from psycopg2 import Error as DBError
+import sys
+import socket
+import psycopg2.extensions
+import psycopg2.extras
import skytools
+from psycopg2 import Error as DBError
from skytools.sockutil import set_tcp_keepalive
+
+I_AUTOCOMMIT = psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT
+I_READ_COMMITTED = psycopg2.extensions.ISOLATION_LEVEL_READ_COMMITTED
+I_REPEATABLE_READ = psycopg2.extensions.ISOLATION_LEVEL_REPEATABLE_READ
+I_SERIALIZABLE = psycopg2.extensions.ISOLATION_LEVEL_SERIALIZABLE
+
+
class _CompatRow(psycopg2.extras.DictRow):
"""Make DictRow more dict-like."""
__slots__ = ('_index',)
diff --git a/python/skytools/scripting.py b/python/skytools/scripting.py
index 558998c2..ad6a2fd6 100644
--- a/python/skytools/scripting.py
+++ b/python/skytools/scripting.py
@@ -18,7 +18,7 @@ except ImportError:
__pychecker__ = 'no-badexcept'
__all__ = ['BaseScript', 'signal_pidfile', 'UsageError', 'daemonize',
- 'DBScript', 'I_AUTOCOMMIT', 'I_READ_COMMITTED', 'I_SERIALIZABLE']
+ 'DBScript']
class UsageError(Exception):
"""User induced error."""
@@ -637,17 +637,6 @@ class BaseScript(object):
#: how old connections need to be closed
DEF_CONN_AGE = 20*60 # 20 min
-#: isolation level not set
-I_DEFAULT = -1
-
-#: isolation level constant for AUTOCOMMIT
-I_AUTOCOMMIT = 0
-#: isolation level constant for READ COMMITTED
-I_READ_COMMITTED = 1
-#: isolation level constant for SERIALIZABLE
-I_SERIALIZABLE = 2
-
-
class DBScript(BaseScript):
"""Base class for database scripts.
@@ -708,7 +697,7 @@ class DBScript(BaseScript):
elif params.get('autocommit', 0):
params['isolation_level'] = 0
elif not 'isolation_level' in params:
- params['isolation_level'] = I_READ_COMMITTED
+ params['isolation_level'] = skytools.I_READ_COMMITTED
if not 'max_age' in params:
params['max_age'] = max_age
@@ -933,7 +922,7 @@ class DBCachedConn(object):
self.conn_time = 0
self.max_age = max_age
self.autocommit = -1
- self.isolation_level = I_DEFAULT
+ self.isolation_level = -1
self.verbose = verbose
self.setup_func = setup_func
self.listen_channel_list = []
@@ -943,11 +932,11 @@ class DBCachedConn(object):
return None
return self.conn.cursor().fileno()
- def get_connection(self, isolation_level = I_DEFAULT, listen_channel_list = []):
+ def get_connection(self, isolation_level = -1, listen_channel_list = []):
# default isolation_level is READ COMMITTED
if isolation_level < 0:
- isolation_level = I_READ_COMMITTED
+ isolation_level = skytools.I_READ_COMMITTED
# new conn?
if not self.conn:
@@ -978,7 +967,7 @@ class DBCachedConn(object):
for ch in new_clist:
if ch not in self.listen_channel_list:
curs.execute("LISTEN %s" % skytools.quote_ident(ch))
- if self.isolation_level != I_AUTOCOMMIT:
+ if self.isolation_level != skytools.I_AUTOCOMMIT:
self.conn.commit()
self.listen_channel_list = new_clist[:]