--- /dev/null
+"""psycopg 1.1.x compatibility module
+
+This module uses the new style connection and cursor types to build a psycopg
+1.1.1.x compatibility layer. It should be considered a temporary hack to run
+old code while porting to psycopg 2. Import it as follows::
+
+ from psycopg2 import psycopg1 as psycopg
+"""
+# psycopg/psycopg1.py - psycopg 1.1.x compatibility module
+#
+# Copyright (C) 2003-2004 Federico Di Gregorio <fog@debian.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2, or (at your option) any later
+# version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTIBILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+
+import _psycopg as _2psycopg
+from psycopg2.extensions import cursor as _2cursor
+from psycopg2.extensions import connection as _2connection
+
+from psycopg2 import *
+del connect
+
+
+def connect(*args, **kwargs):
+ """connect(dsn, ...) -> new psycopg 1.1.x compatible connection object"""
+ kwargs['connection_factory'] = connection
+ conn = _2psycopg.connect(*args, **kwargs)
+ conn.set_isolation_level(2)
+ return conn
+
+class connection(_2connection):
+ """psycopg 1.1.x connection."""
+
+ def cursor(self):
+ """cursor() -> new psycopg 1.1.x compatible cursor object"""
+ return _2connection.cursor(self, cursor_factory=cursor)
+
+ def autocommit(self, on_off=1):
+ """autocommit(on_off=1) -> switch autocommit on (1) or off (0)"""
+ if on_off > 0:
+ self.set_isolation_level(0)
+ else:
+ self.set_isolation_level(2)
+
+
+class cursor(_2cursor):
+ """psycopg 1.1.x cursor.
+
+ Note that this cursor implements the exact procedure used by psycopg 1 to
+ build dictionaries out of result rows. The DictCursor in the
+ psycopg.extras modules implements a much better and faster algorithm.
+ """
+
+ def __build_dict(self, row):
+ res = {}
+ for i in range(len(self.description)):
+ res[self.description[i][0]] = row[i]
+ return res
+
+ def dictfetchone(self):
+ row = _2cursor.fetchone(self)
+ if row:
+ return self.__build_dict(row)
+ else:
+ return row
+
+ def dictfetchmany(self, size):
+ res = []
+ rows = _2cursor.fetchmany(self, size)
+ for row in rows:
+ res.append(self.__build_dict(row))
+ return res
+
+ def dictfetchall(self):
+ res = []
+ rows = _2cursor.fetchall(self)
+ for row in rows:
+ res.append(self.__build_dict(row))
+ return res
+