diff options
author | Marko Kreen | 2011-12-08 16:15:28 +0000 |
---|---|---|
committer | Marko Kreen | 2011-12-08 16:33:16 +0000 |
commit | b1e3350a364282b22c69236af6a2b5654cae8b28 (patch) | |
tree | 20691aa41e602b8cc83a1a0acc7839da4439a47c | |
parent | 8227d443103bf209d7a5d60b8dd9cabe8452ac55 (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__.py | 7 | ||||
-rw-r--r-- | python/skytools/psycopgwrapper.py | 24 | ||||
-rw-r--r-- | python/skytools/scripting.py | 23 |
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[:] |