diff --git a/lib/__init__.py b/lib/__init__.py index cf8c06ae..fd13b5a2 100644 --- a/lib/__init__.py +++ b/lib/__init__.py @@ -59,7 +59,7 @@ from psycopg2._psycopg import NotSupportedError, OperationalError from psycopg2._psycopg import _connect, apilevel, threadsafety, paramstyle from psycopg2._psycopg import __version__ -from psycopg2 import tz +from psycopg2 import tz, _py3 # Register default adapters. @@ -147,7 +147,7 @@ def connect(dsn=None, if port is not None: items.append(('port', port)) - items.extend([(k, v) for (k, v) in kwargs.iteritems() if v is not None]) + items.extend([(k, v) for (k, v) in _py3.iteritems(kwargs) if v is not None]) if dsn is not None and items: raise TypeError( diff --git a/lib/_py3.py b/lib/_py3.py new file mode 100644 index 00000000..fd051144 --- /dev/null +++ b/lib/_py3.py @@ -0,0 +1,19 @@ +import sys + +PY3 = sys.version_info[0] == 3 + + +if PY3: + import _thread + + def iteritems(d, **kw): + return iter(d.items(**kw)) + + thread = _thread +else: + import thread as _thread + + def iteritems(d, **kw): + return iter(d.iteritems(**kw)) + + thread = _thread diff --git a/lib/errorcodes.py b/lib/errorcodes.py index 12c300f6..5e67c876 100644 --- a/lib/errorcodes.py +++ b/lib/errorcodes.py @@ -29,6 +29,9 @@ This module contains symbolic names for all PostgreSQL error codes. # http://www.postgresql.org/docs/current/static/errcodes-appendix.html # +from psycopg2 import _py3 + + def lookup(code, _cache={}): """Lookup an error code or class code and return its symbolic name. @@ -38,7 +41,7 @@ def lookup(code, _cache={}): return _cache[code] # Generate the lookup map at first usage. - for k, v in globals().iteritems(): + for k, v in _py3.iteritems(globals()): if isinstance(v, str) and len(v) in (2, 5): _cache[v] = k diff --git a/lib/extras.py b/lib/extras.py index 69de6147..4ab596f6 100644 --- a/lib/extras.py +++ b/lib/extras.py @@ -26,7 +26,6 @@ and classes until a better place in the distribution is found. # License for more details. import os as _os -import sys as _sys import time as _time import re as _re @@ -37,6 +36,7 @@ except: import psycopg2 from psycopg2 import extensions as _ext +from psycopg2 import _py3 from psycopg2.extensions import cursor as _cursor from psycopg2.extensions import connection as _connection from psycopg2.extensions import adapt as _A @@ -191,7 +191,7 @@ class DictRow(list): self._index = data[1] # drop the crusty Py2 methods - if _sys.version_info[0] > 2: + if _py3.PY3: items = iteritems; del iteritems keys = iterkeys; del iterkeys values = itervalues; del itervalues @@ -788,7 +788,7 @@ def register_hstore(conn_or_curs, globally=False, unicode=False, array_oid = tuple([x for x in array_oid if x]) # create and register the typecaster - if _sys.version_info[0] < 3 and unicode: + if not _py3.PY3 and unicode: cast = HstoreAdapter.parse_unicode else: cast = HstoreAdapter.parse diff --git a/lib/pool.py b/lib/pool.py index 4f858ab1..24e9ea8f 100644 --- a/lib/pool.py +++ b/lib/pool.py @@ -26,6 +26,7 @@ This module implements thread-safe (and not) connection pools. import psycopg2 import psycopg2.extensions as _ext +from psycopg2 import _py3 class PoolError(psycopg2.Error): @@ -204,8 +205,7 @@ class PersistentConnectionPool(AbstractConnectionPool): # we we'll need the thread module, to determine thread ids, so we # import it here and copy it in an instance variable - import thread - self.__thread = thread + self.__thread = _py3.thread def getconn(self): """Generate thread id and return a connection."""