This commit was generated by cvs2svn to compensate for changes in r431,
authorMark Huang <mlhuang@cs.princeton.edu>
Wed, 8 Nov 2006 21:37:49 +0000 (21:37 +0000)
committerMark Huang <mlhuang@cs.princeton.edu>
Wed, 8 Nov 2006 21:37:49 +0000 (21:37 +0000)
which included commits to RCS files with non-trunk default branches.

223 files changed:
psycopg2/AUTHORS [new file with mode: 0644]
psycopg2/ChangeLog [new file with mode: 0644]
psycopg2/INSTALL [new file with mode: 0644]
psycopg2/LICENSE [new file with mode: 0644]
psycopg2/MANIFEST [new file with mode: 0644]
psycopg2/MANIFEST.in [new file with mode: 0644]
psycopg2/PKG-INFO [new file with mode: 0644]
psycopg2/README [new file with mode: 0644]
psycopg2/ZPsycopgDA/DA.py [new file with mode: 0644]
psycopg2/ZPsycopgDA/__init__.py [new file with mode: 0644]
psycopg2/ZPsycopgDA/db.py [new file with mode: 0644]
psycopg2/ZPsycopgDA/dtml/add.dtml [new file with mode: 0644]
psycopg2/ZPsycopgDA/dtml/browse.dtml [new file with mode: 0644]
psycopg2/ZPsycopgDA/dtml/edit.dtml [new file with mode: 0644]
psycopg2/ZPsycopgDA/dtml/table_info.dtml [new file with mode: 0644]
psycopg2/ZPsycopgDA/icons/bin.gif [new file with mode: 0644]
psycopg2/ZPsycopgDA/icons/date.gif [new file with mode: 0644]
psycopg2/ZPsycopgDA/icons/datetime.gif [new file with mode: 0644]
psycopg2/ZPsycopgDA/icons/field.gif [new file with mode: 0644]
psycopg2/ZPsycopgDA/icons/float.gif [new file with mode: 0644]
psycopg2/ZPsycopgDA/icons/int.gif [new file with mode: 0644]
psycopg2/ZPsycopgDA/icons/stable.gif [new file with mode: 0644]
psycopg2/ZPsycopgDA/icons/table.gif [new file with mode: 0644]
psycopg2/ZPsycopgDA/icons/text.gif [new file with mode: 0644]
psycopg2/ZPsycopgDA/icons/time.gif [new file with mode: 0644]
psycopg2/ZPsycopgDA/icons/view.gif [new file with mode: 0644]
psycopg2/ZPsycopgDA/icons/what.gif [new file with mode: 0644]
psycopg2/ZPsycopgDA/pool.py [new file with mode: 0644]
psycopg2/debian/changelog [new file with mode: 0644]
psycopg2/debian/control [new file with mode: 0644]
psycopg2/debian/copyright [new file with mode: 0644]
psycopg2/debian/rules [new file with mode: 0755]
psycopg2/doc/ChangeLog-1.x [new file with mode: 0644]
psycopg2/doc/HACKING [new file with mode: 0644]
psycopg2/doc/SUCCESS [new file with mode: 0644]
psycopg2/doc/TODO [new file with mode: 0644]
psycopg2/doc/api-screen.css [new file with mode: 0644]
psycopg2/doc/api/epydoc.css [new file with mode: 0644]
psycopg2/doc/api/index.html [new file with mode: 0644]
psycopg2/doc/api/private/__builtin__.list-class.html [new file with mode: 0644]
psycopg2/doc/api/private/__builtin__.object-class.html [new file with mode: 0644]
psycopg2/doc/api/private/__builtin__.type-class.html [new file with mode: 0644]
psycopg2/doc/api/private/datetime.tzinfo-class.html [new file with mode: 0644]
psycopg2/doc/api/private/epydoc.css [new file with mode: 0644]
psycopg2/doc/api/private/exceptions.Exception-class.html [new file with mode: 0644]
psycopg2/doc/api/private/exceptions.StandardError-class.html [new file with mode: 0644]
psycopg2/doc/api/private/frames.html [new file with mode: 0644]
psycopg2/doc/api/private/help.html [new file with mode: 0644]
psycopg2/doc/api/private/index.html [new file with mode: 0644]
psycopg2/doc/api/private/indices.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2-module.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.DataError-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.DatabaseError-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.Error-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.IntegrityError-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.InterfaceError-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.InternalError-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.NotSupportedError-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.OperationalError-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.ProgrammingError-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.Warning-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2._psycopg-module.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2._psycopg.ISQLQuote-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2._psycopg.connection-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2._psycopg.cursor-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.extensions-module.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.extras-module.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.extras.DictConnection-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.extras.DictCursor-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.extras.DictRow-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.extras.SQL_IN-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.pool-module.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.pool.AbstractConnectionPool-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.pool.PersistentConnectionPool-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.pool.PoolError-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.pool.SimpleConnectionPool-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.pool.ThreadedConnectionPool-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.psycopg1-module.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.psycopg1.connection-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.psycopg1.cursor-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.tz-module.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.tz.FixedOffsetTimezone-class.html [new file with mode: 0644]
psycopg2/doc/api/private/psycopg2.tz.LocalTimezone-class.html [new file with mode: 0644]
psycopg2/doc/api/private/toc-everything.html [new file with mode: 0644]
psycopg2/doc/api/private/toc-psycopg2-module.html [new file with mode: 0644]
psycopg2/doc/api/private/toc-psycopg2._psycopg-module.html [new file with mode: 0644]
psycopg2/doc/api/private/toc-psycopg2.extensions-module.html [new file with mode: 0644]
psycopg2/doc/api/private/toc-psycopg2.extras-module.html [new file with mode: 0644]
psycopg2/doc/api/private/toc-psycopg2.pool-module.html [new file with mode: 0644]
psycopg2/doc/api/private/toc-psycopg2.psycopg1-module.html [new file with mode: 0644]
psycopg2/doc/api/private/toc-psycopg2.tz-module.html [new file with mode: 0644]
psycopg2/doc/api/private/toc.html [new file with mode: 0644]
psycopg2/doc/api/private/trees.html [new file with mode: 0644]
psycopg2/doc/api/public/__builtin__.list-class.html [new file with mode: 0644]
psycopg2/doc/api/public/__builtin__.object-class.html [new file with mode: 0644]
psycopg2/doc/api/public/__builtin__.type-class.html [new file with mode: 0644]
psycopg2/doc/api/public/datetime.tzinfo-class.html [new file with mode: 0644]
psycopg2/doc/api/public/epydoc.css [new file with mode: 0644]
psycopg2/doc/api/public/exceptions.Exception-class.html [new file with mode: 0644]
psycopg2/doc/api/public/exceptions.StandardError-class.html [new file with mode: 0644]
psycopg2/doc/api/public/frames.html [new file with mode: 0644]
psycopg2/doc/api/public/help.html [new file with mode: 0644]
psycopg2/doc/api/public/index.html [new file with mode: 0644]
psycopg2/doc/api/public/indices.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2-module.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.DataError-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.DatabaseError-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.Error-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.IntegrityError-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.InterfaceError-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.InternalError-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.NotSupportedError-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.OperationalError-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.ProgrammingError-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.Warning-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2._psycopg-module.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.extensions-module.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.extras-module.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.extras.DictConnection-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.extras.DictCursor-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.extras.DictRow-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.extras.SQL_IN-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.pool-module.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.pool.AbstractConnectionPool-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.pool.PersistentConnectionPool-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.pool.PoolError-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.pool.SimpleConnectionPool-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.pool.ThreadedConnectionPool-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.psycopg1-module.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.psycopg1.connection-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.psycopg1.cursor-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.tz-module.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.tz.FixedOffsetTimezone-class.html [new file with mode: 0644]
psycopg2/doc/api/public/psycopg2.tz.LocalTimezone-class.html [new file with mode: 0644]
psycopg2/doc/api/public/toc-everything.html [new file with mode: 0644]
psycopg2/doc/api/public/toc-psycopg2-module.html [new file with mode: 0644]
psycopg2/doc/api/public/toc-psycopg2._psycopg-module.html [new file with mode: 0644]
psycopg2/doc/api/public/toc-psycopg2.extensions-module.html [new file with mode: 0644]
psycopg2/doc/api/public/toc-psycopg2.extras-module.html [new file with mode: 0644]
psycopg2/doc/api/public/toc-psycopg2.pool-module.html [new file with mode: 0644]
psycopg2/doc/api/public/toc-psycopg2.psycopg1-module.html [new file with mode: 0644]
psycopg2/doc/api/public/toc-psycopg2.tz-module.html [new file with mode: 0644]
psycopg2/doc/api/public/toc.html [new file with mode: 0644]
psycopg2/doc/api/public/trees.html [new file with mode: 0644]
psycopg2/doc/async.txt [new file with mode: 0644]
psycopg2/doc/extensions.html [new file with mode: 0644]
psycopg2/doc/extensions.rst [new file with mode: 0644]
psycopg2/examples/binary.py [new file with mode: 0644]
psycopg2/examples/copy_from.py [new file with mode: 0644]
psycopg2/examples/copy_to.py [new file with mode: 0644]
psycopg2/examples/cursor.py [new file with mode: 0644]
psycopg2/examples/dialtone.py [new file with mode: 0644]
psycopg2/examples/dict.py [new file with mode: 0644]
psycopg2/examples/dt.py [new file with mode: 0644]
psycopg2/examples/encoding.py [new file with mode: 0644]
psycopg2/examples/fetch.py [new file with mode: 0644]
psycopg2/examples/lastrowid.py [new file with mode: 0644]
psycopg2/examples/mogrify.py [new file with mode: 0644]
psycopg2/examples/myfirstrecipe.py [new file with mode: 0644]
psycopg2/examples/notify.py [new file with mode: 0644]
psycopg2/examples/simple.py [new file with mode: 0644]
psycopg2/examples/somehackers.jpg [new file with mode: 0644]
psycopg2/examples/threads.py [new file with mode: 0644]
psycopg2/examples/tz.py [new file with mode: 0644]
psycopg2/examples/usercast.py [new file with mode: 0644]
psycopg2/examples/whereareyou.jpg [new file with mode: 0644]
psycopg2/lib/__init__.py [new file with mode: 0644]
psycopg2/lib/extensions.py [new file with mode: 0644]
psycopg2/lib/extras.py [new file with mode: 0644]
psycopg2/lib/pool.py [new file with mode: 0644]
psycopg2/lib/psycopg1.py [new file with mode: 0644]
psycopg2/lib/tz.py [new file with mode: 0644]
psycopg2/psycopg/adapter_asis.c [new file with mode: 0644]
psycopg2/psycopg/adapter_asis.h [new file with mode: 0644]
psycopg2/psycopg/adapter_binary.c [new file with mode: 0644]
psycopg2/psycopg/adapter_binary.h [new file with mode: 0644]
psycopg2/psycopg/adapter_datetime.c [new file with mode: 0644]
psycopg2/psycopg/adapter_datetime.h [new file with mode: 0644]
psycopg2/psycopg/adapter_list.c [new file with mode: 0644]
psycopg2/psycopg/adapter_list.h [new file with mode: 0644]
psycopg2/psycopg/adapter_mxdatetime.c [new file with mode: 0644]
psycopg2/psycopg/adapter_mxdatetime.h [new file with mode: 0644]
psycopg2/psycopg/adapter_pboolean.c [new file with mode: 0644]
psycopg2/psycopg/adapter_pboolean.h [new file with mode: 0644]
psycopg2/psycopg/adapter_qstring.c [new file with mode: 0644]
psycopg2/psycopg/adapter_qstring.h [new file with mode: 0644]
psycopg2/psycopg/config.h [new file with mode: 0644]
psycopg2/psycopg/connection.h [new file with mode: 0644]
psycopg2/psycopg/connection_int.c [new file with mode: 0644]
psycopg2/psycopg/connection_type.c [new file with mode: 0644]
psycopg2/psycopg/cursor.h [new file with mode: 0644]
psycopg2/psycopg/cursor_int.c [new file with mode: 0644]
psycopg2/psycopg/cursor_type.c [new file with mode: 0644]
psycopg2/psycopg/microprotocols.c [new file with mode: 0644]
psycopg2/psycopg/microprotocols.h [new file with mode: 0644]
psycopg2/psycopg/microprotocols_proto.c [new file with mode: 0644]
psycopg2/psycopg/microprotocols_proto.h [new file with mode: 0644]
psycopg2/psycopg/pgtypes.h [new file with mode: 0644]
psycopg2/psycopg/pgversion.h [new file with mode: 0644]
psycopg2/psycopg/pqpath.c [new file with mode: 0644]
psycopg2/psycopg/pqpath.h [new file with mode: 0644]
psycopg2/psycopg/psycopg.h [new file with mode: 0644]
psycopg2/psycopg/psycopgmodule.c [new file with mode: 0644]
psycopg2/psycopg/python.h [new file with mode: 0644]
psycopg2/psycopg/typecast.c [new file with mode: 0644]
psycopg2/psycopg/typecast.h [new file with mode: 0644]
psycopg2/psycopg/typecast_array.c [new file with mode: 0644]
psycopg2/psycopg/typecast_basic.c [new file with mode: 0644]
psycopg2/psycopg/typecast_binary.c [new file with mode: 0644]
psycopg2/psycopg/typecast_binary.h [new file with mode: 0644]
psycopg2/psycopg/typecast_builtins.c [new file with mode: 0644]
psycopg2/psycopg/typecast_datetime.c [new file with mode: 0644]
psycopg2/psycopg/typecast_mxdatetime.c [new file with mode: 0644]
psycopg2/scripts/buildtypes.py [new file with mode: 0644]
psycopg2/scripts/ext2html.py [new file with mode: 0755]
psycopg2/scripts/makedocs.py [new file with mode: 0755]
psycopg2/scripts/maketypes.sh [new file with mode: 0755]
psycopg2/setup.cfg [new file with mode: 0644]
psycopg2/setup.py [new file with mode: 0644]
psycopg2/tests/dbapi20.py [new file with mode: 0644]
psycopg2/tests/extras_dictcursor.py [new file with mode: 0644]
psycopg2/tests/test_psycopg2_dbapi20.py [new file with mode: 0644]
psycopg2/tests/types_basic.py [new file with mode: 0644]

diff --git a/psycopg2/AUTHORS b/psycopg2/AUTHORS
new file mode 100644 (file)
index 0000000..44c77fc
--- /dev/null
@@ -0,0 +1,8 @@
+Main authors:
+  Federico Di Gregorio <fog@debian.org>
+
+For the win32 port:
+  Jason Erickson <jerickso@indian.com> (most of his changes are still in 2.0)
+
+Additional Help:
+  
diff --git a/psycopg2/ChangeLog b/psycopg2/ChangeLog
new file mode 100644 (file)
index 0000000..b273e20
--- /dev/null
@@ -0,0 +1,1219 @@
+2006-09-02  Federico Di Gregorio  <fog@initd.org>
+
+       * Release 2.0.5.1.
+
+       * psycopg/cursor_type.c: applied patch from Jason Erickson to
+       build on MSVC and older gcc.
+
+2006-09-01  Federico Di Gregorio  <fog@initd.org>
+
+       * Release 2.0.5.
+
+       * Fixed patch from #119, see tracker for details.
+
+       * Preparing release 2.0.5.
+
+       * psycopg/psycopgmodule.c: fixed filling of connection errors
+       to include OperationalError.
+
+       * setup.py: removed pydatetime option from initialize_options
+       to make sure that the value in setup.cfg is used.
+
+       * psycopg/psycopgmodule.c: applied patch from jdahlin (#120)
+       to have .connect() accept either a string or int as the port
+       parameter.
+
+       * psycopg/adapter_binary.c: applied patch from jdahlin (#119)
+       to fix the segfault on empty binary buffers.
+
+       * psycopg/connection_type.c: added .status attribute to expose
+       the internal status.
+
+       * psycopg/pqpath.c: applied patch from intgr (#117) to fix
+       segfault on null queries.
+
+       * psycopg/cursor_type.c: applied patch from intgr (#116) to
+       fix bad keyword naming and segfault in .executemany().
+
+       * ZPsycopgDA/DA.py: applied ImageFile patch from Charlie
+       Clark.
+
+       * lib/pool.py: applied logging patch from Charlie Clark.
+       It will probably get a makeup and be moved to the top-level
+       module later.
+
+2006-08-02  Federico Di Gregorio  <fog@initd.org>
+
+       * Release 2.0.4.
+
+       * Fixed bug in float conversion (check for NULL string was
+       erroneously removed in 2.0.3!)
+
+2006-07-31  Federico Di Gregorio  <fog@initd.org>
+
+       * Release 2.0.3.
+
+       * psycopg/cursor_type.c: applied patch from jbellis (#113) to
+       allow column selection in .copy_from().
+
+       * psycopg/psycopgmodule.c: fixed memory leak in custom exceptions
+       (applied patch from #114).
+
+2006-07-26  Federico Di Gregorio  <fog@initd.org>
+
+       * psycopg/adapter_datetime.c (pydatetime_str): fixed error
+       in conversion of microseconds for intervals and better algo
+       (thanks to Mario Frasca.)
+
+2006-06-18  Federico Di Gregorio  <fog@initd.org>
+
+       * psycopg/adapter_binary.c: same as below.
+
+        * psycopg/adapter_qstring.c: does not segfault anymore if 
+       .getquoted() is called without preparing the qstring with 
+       the connection.
+
+2006-06-15  Federico Di Gregorio  <fog@initd.org>
+
+       * psycopg/typecast_basic.c: fixed problem with bogus
+       conversion when importing gtk (that was crazy, I didn't
+       understand why it happened but the new code just fixes it.)
+
+       * ZPsycopgDA/db.py: better type analisys, using an hash
+       instead of a series of if (variation on patch from Charlie
+       Clark.)
+
+2006-06-11  Federico Di Gregorio  <fog@initd.org>
+
+       * Release 2.0.2.
+
+       * psycopg/typecast_array.c (typecast_array_cleanup): fixed a
+       problem with typecast_array_cleanup always returning the new
+       string length shorter by 1 (Closes: #93).
+
+       * psycopg/adapter_binary.c: as below.
+
+       * psycopg/adapter_qstring.c: wrapped #warning in #ifdef __GCC__
+       because other compilers don't have it and it will just break
+       compilation (patch from jason, our great win32 builder).
+
+       * psycopg/adapter_list.c: applied patch to adapt an empty list
+       into an empty array and not to NULL (from iGGy, closes: #108).
+
+       * psycopg/cursor_type.c: applied patch from wkv to avoid
+       under-allocating query space when the parameters are not of the
+       right type (Closes: #110).
+
+       * psycopg/connection_int.c: applied patch from wkv to avoid off 
+       by one allocation of connection encoding string (Closes: #109).
+
+2006-06-09  Federico Di Gregorio  <fog@initd.org>
+
+        * Release 2.0.1.
+
+       * Fixed some buglets in ZPsycopgDA (was unable to load due
+       to shorter version number in psycopg module.)
+
+2006-06-08  Federico Di Gregorio  <fog@initd.org>
+       
+       * Release 2.0.
+
+       * ZPsycopgDA/DA.py: removed Browse table for 2.0 release; we'll
+       add it back later.
+
+2006-05-26  Federico Di Gregorio  <fog@initd.org>
+
+       * Applied better PostgreSQL patch from AA.
+
+2006-05-24  Federico Di Gregorio  <fog@initd.org>
+
+       * Enabled 8.1.4 security fix only when the version is >= 8.1.4, fall
+       back to old code otherwise.
+       
+       * psycopg/adapter_qstring.c: now quote using PQescapeStringConn if
+       available. 
+
+       * psycopg/adapter_binary.c: now quote using PQescapeByteaConn if
+       available. 
+
+2006-04-38  Federico Di Gregorio  <fog@initd.org>
+
+       * setup.py: fixed little problem with mx_include_dir as suggested
+       by kvc (this closes #102).
+
+2006-04-24  Federico Di Gregorio  <fog@initd.org>
+
+       * psycopg/adapter_pboolean.c: added the possibility to format boolean
+       values as "true" and "false" instead of "'t'" and "'f'".
+
+2006-03-08  Federico Di Gregorio  <fog@initd.org>
+
+       * lib/extras.py: added .next() to DictCursot to support iteration.
+
+2006-03-02  Federico Di Gregorio  <fog@initd.org>
+
+       * psycopg/typecast_array.c (typecast_array_tokenize): removed cast
+       to build without warnings on 64 bit arches.
+
+2006-02-11  Federico Di Gregorio  <fog@initd.org>
+
+       * Release 2.0 beta 8.
+
+       * psycopg/config.h: applied patch from Jason to fix handle leak on
+       win32, as documented in #92.
+
+2006-02-11  Federico Di Gregorio  <fog@initd.org>
+
+       * Release 2.0 beta 7.
+
+       * psycopg/psycopgmodule.c: applied fix for memory overflow in
+       connect() (reported by solt, #91.)
+
+       * setup.py: applied patch from lbruno.
+
+2006-01-11  Federico Di Gregorio  <fog@initd.org>
+
+       * setup.py: does not report an error in pg_config unless the pg_config
+       was explicitly set (allows for building with old options.) 
+
+2006-01-06  Daniele Varrazzo  <daniele.varrazzo@gmail.com>
+
+       * setup.py: libpq.dll not used anymore. win32 setup uses pg_config too.
+
+2006-01-05  Federico Di Gregorio  <fog@initd.org>
+
+       * psycopg/psycopgmodule.c (psyco_set_error): added function to set extra
+       parameters on ProgrammingError instances. Also modified all occurances of
+       PyErr_SetString(ProgrammingError,...) to psycopg_set_error(). 
+
+       * setup.{cfg,py}: we now use pg_config to locate PostgreSQL libraries
+       and headers (modified patch from lbruno, see #70.)
+
+2006-01-01  Federico Di Gregorio  <fog@initd.org>
+
+       * Preparing release 2 beta 7.
+
+       * MANIFEST.in: we now distrbute pre-built documentation (still need
+       to add to setup.py the code necessary to build docs as part of the
+       build process.)
+
+       * psycopg/connection_int.c: PostgreSQL encoding names are now force
+       uppercase (after all PostgreSQL documentation reports them this way.)
+
+2005-12-11 Federico Di Gregorio <fog@initd.org>
+
+       * psycopg/typecast_array.c (typecast_array_cleanup): added functio
+       to cleanup the "[...]=" part of an array result. This probably will
+       need some more work for nested arrays but it fixed every test I was
+       able to write. (Closes: #80)
+
+2005-12-11  Federico Di Gregorio  <fog@initd.org>
+
+       * setup.py: half-applied patch from Tavis to specify mx_include_dir
+       in setup.cfg.
+
+       * psycopg/typecast.c (typecast_parse_time): cz limit in the while
+       loop is 6, not 5. This solve the problem with "fractionary" time zones
+       and fixes #78. 
+
+2005-12-06  Federico Di Gregorio  <fog@initd.org>
+
+       * lib/extras.py: added .callproc() to DictCursor as suggested
+       by Philip Semanchuk.
+
+2005-11-29  Federico Di Gregorio  <fog@initd.org>
+
+       * MANIFEST.in: added docs/async.txt. (Closes: #75)
+
+2005-11-26  Daniele Varrazzo  <daniele.varrazzo@gmail.com>
+
+       * psycopg/psycopgmodule.c: fixed exceptions refcount.
+
+       * Fixed lots of doctrings and added Epydoc-generated docs support.
+
+2005-11-24  Federico Di Gregorio  <fog@initd.org>
+
+       * sandbox: added all the test and creash-me files to the repository.
+
+       * psycopg/typecast.c (typecast_dealloc): now directly calls
+       PyObject_Del to avoid to segfault.
+
+2005-11-20  Federico Di Gregorio  <fog@initd.org>
+
+       * psycopg/typecast.c: fixed problem with microseconds conversion by
+       applying slightly modified patch from Ronnie Mackay.
+
+2005-11-19  Federico Di Gregorio  <fog@initd.org>
+
+       * lib/extensions.py: COMMITED -> COMMITTED. (Closes: #73)
+
+       * doc/extensions.rst: included Daniele's work after minor cosmetic changes
+       like using the new constants instead of numbers for transaction isolation
+       levels.
+
+2005-11-17  Federico Di Gregorio  <fog@initd.org>
+
+       * ZPsycopgDA/pool.py: fixed connections leak by using the new name
+       (PersistentConnectionPool) for the old connection pool class.
+
+2005-11-16  Federico Di Gregorio  <fog@initd.org>
+
+       * Preparing release 2.0 beta 6.
+       
+       * psycopg/adapter_mxdatetime.c: fixed all problems with mx conversions.
+       
+       * psycopg/typecast.c: now the timezone is set correctly even if there
+       are no microseconds and/or the offset is 0;
+
+       * examples/encoding.py: fixed example by using python utf8 encoding for
+       the whole file.
+
+       * lib/__init__.py: very nice hack from Harald Armin Massa to allow
+       py2exe and similar tools to do their work without problems.
+
+2005-11-15  Federico Di Gregorio  <fog@initd.org>
+
+       * psycopg/psycopgmodule.c: now bails out with correct exception when one
+       of the needed modules can't be imported (should fix #32.)
+
+2005-11-14  Federico Di Gregorio  <fog@initd.org>
+
+       * psycopg/typecast.c: added typecast_parse_date and typecast_parse_time
+       functions to do locale-safe date/time parsing. This would probably also
+       speed-up psycopg a little bit.
+
+2005-11-07  Federico Di Gregorio  <fog@initd.org>
+
+       * psycopg/pqpath.c: fixed problem with uninitialized value (all this was
+       started by replacing calloc() calls with PyMem_Malloc().)
+
+2005-11-04  Federico Di Gregorio  <fog@initd.org>
+
+       * psycopg/typecast.c: a lot of changes:
+         - made typecast a new-style type
+         - removed coerce code and implemented the richcompare protocol that
+           allows to compare objects of different types
+         - much better __cmp__ method that allows to compare two typecast
+           objects and returns True if any two of the mapped oids match
+         - any object that can be used as an int works as right-hand operand
+           in __cmp__ operations 
+
+       * psycopg/typecast_datetime.c: now typecast_PYINTERVAL_cast limit the
+       scan to 'len' characters in the string (should fix #65.)
+
+2005-11-03  Federico Di Gregorio  <fog@initd.org>
+
+       * Applied patch from Daniele Varazzo to enable Decimal on Python
+       2.3 when the module is available (run-time check, nice.)
+       
+2005-10-26  Federico Di Gregorio  <fog@initd.org>
+
+       * setup.cfg: added include_dirs line for SUSE 9.3.
+
+2005-10-22  Federico Di Gregorio  <fog@initd.org>
+
+       * psycopg/cursor_type.c: added support for named cursors:
+         - .fetchXXX() methods now execute a FETCH if the cursor is named
+         - .execute() executes a DECLARE if the cursor is named
+         - .execute() fails if a named cursor is used in autocommit
+         - .executemany() can't be called on named cursors
+         - .scroll() executes a MOVE if the cursor is named
+         - .close() executes a CLOSE if the cursor is named
+         Also, a "transaction mark" was added to both the connection and the
+         cursor and an exception is raised when using a named cursor unless the
+         two marks correspond.
+
+       * psycopg/connection_int.c: snprintf->PyOS_snprintf.
+
+       * psycopg/psycopgmodule.c: snprintf->PyOS_snprintf.
+
+       * psycopg/cursor_type.c: changed self->query type from C string to
+       PyObject* to better manage queries in named cursors.
+
+       * psycopg/psycopgmodule.c: cleaned up exception names (now the errors
+       is printed as psycopg2.Error and not as the confusing
+       psycopg2._psycopg.Error.)
+
+2005-10-20  Federico Di Gregorio  <fog@initd.org>
+
+       * lib/pool.py: renamed ThreadedConnectionPool to PersistentConnectionPool
+       and added a connection pool that allows multiple connections per thread
+       as ThreadedConnectionPool (courtesy of Daniele Varrazzo.)
+
+2005-10-19  Federico Di Gregorio  <fog@initd.org>
+
+       * Releasing 2.0 beta 5.
+       
+       * psycopg/adapter_mxdatetime.c: reverted to old strftime method to format
+       mx.DateTime objects; the new method didn't worked in some corner-cases.
+       This makes impossible to have more than 2 decimal places for seconds but
+       at least we get the time right every time.
+
+2005-10-18  Federico Di Gregorio  <fog@initd.org>
+
+       * NOTIFY is back end working.
+
+       * psycopg/connection_type.c: fixed problem with initialization of
+       notifies list (also fixed small memory leak in connection dealloc.)
+
+       * examples/notify.py: added NOTIFY example.
+
+       * psycopg/cursor_type.c: added per-cursor type-casters dictionaries.
+
+2005-10-18  Federico Di Gregorio  <fog@initd.org>
+
+       * psycopg/typecast.c: temporary fix to typecasting objects to return
+       False for any comparaison except an integer in self.values (i.e., we
+       don't raise an exception anymore on a coerce error.) Epydoc is now
+       happy.
+
+       * psycopg/config.h: ZETA config.h patch from Charlie Clark.
+
+       * examples/threads.py: fixed small typo: psycopg -> psycopg2.
+
+       * Big cleanup of unsigned chars to tame gcc 4.
+
+       * Big cleanup of module names (i.e., psycopg2._psycopg everywhere.)
+       
+       * psycopg/config.h: added fake localtime_r for platforms missing it
+
+       * psycopg/cursor_type.c: cursors now have a FixedOffsetTimezone
+       tzinfo_factory by default.
+
+       * psycopg/adapter_datetime.c: added tzinfo argument to psycopg2.Time and
+       psycopg2.Timestamp. Also now TimestampFromTicks sets the tzinfo object
+       to psycopg2.tz.LOCAL.
+
+2005-10-17  Federico Di Gregorio  <fog@initd.org>
+
+       * psycopg/adapter_datetime.c: we now use localtime() instead of gmtime()
+       to accound for the local time-zone in timestamps.
+
+       * psycopg/connection_type.c: fixed docstring for .cursor().
+
+       * psycopg/psycopgmodule.c: added useful docstring for .connect().
+
+2005-10-08  Federico Di Gregorio  <fog@initd.org>
+
+       * psycopg/connection_type.c: isolation level upper bound set to 2.
+
+       * lib/psycopg1.py: explicitly set isolation level to 2 on .connect()
+       to mimic psycopg 1 behaviour.
+
+       * psycopg/connection_int.c: now set isolation level from
+       default_transaction_isolation backend environment value.
+
+       * psycopg/pqpath.c: removed serialization level 3: now everybody
+       (except me) has to use the mnemonics defined in psycopg2.extensions.
+
+       * lib/extensions.py: Added mnemonics for serialization levels.
+
+2005-10-02  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/cursor_type.c (psyco_curs_callproc): applied callproc
+       patch from Matt Goodall (added a check on _psyco_curs_execute
+       return value and substituted malloc/free with PyMem versions.) 
+
+2005-10-01  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/connection_int.c: fixed segfault by moving PyErr_Format
+       after GIL acquisition (closes: #50).
+
+       * psycopg/connection_type.c: applied patch from Matt Goodall to
+       fix some doc strings.
+
+2005-09-23  Federico Di Gregorio  <fog@debian.org>
+
+       * lib/pool.py: applied patch from piro to avoid the scan of the
+       whole connection array on getconn().
+
+2005-09-12  Federico Di Gregorio  <fog@initd.org>
+
+       * lib/pool.py: Applied psycopg->psycopg2 patch to from bug #35.
+
+       * ZpsycopgDA/db.py: fixed problem with OperationalError that
+       resulted in cryptic message to Zope users ("'OperationalError' is
+       not defined".)
+       
+2005-08-23  Federico Di Gregorio  <fog@debian.org>
+
+       * setup.py: applied patch from Daniele Varrazzo to avoid segfaults
+       when compiling with migw for Python 2.4.x.
+
+       * psycopg/adapter_mxdatetime.c (mxdatetime_str): ported code from 1.1.x
+       to convert mxDateTime object preserving the precision of fractional
+       seconds.
+
+2005-08-22  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/*.py: psycopg -> psycopg2. 
+
+       * setup.py: modified to install the module components under
+       psycopg2 on windows too (thanks to Daniele Varrazzo.)
+
+2005-08-07  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/config.h: added __sun__ to the symbols checked for round()
+
+2005-07-21  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/adapter_datetime.c (psyco_XXXFromTicks): fixed the 1900
+       years offset reported by Jeroen van Dongen (see ticket #33). 
+
+2005-07-17  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 2.0 beta 4.
+
+       * lib/extras.py (DictConnection.cursor): added DictConnection to
+       make easier to retrieve data in DictRows.
+
+2005-06-24  Federico Di Gregorio  <fog@initd.org>
+
+       * psycopg/typecast_datetime.c (typecast_PYINTERVAL_cast): applied patch
+       from Geert Jansen to fix interval bug due to overflow.
+
+2005-06-18  Federico Di Gregorio  <fog@initd.org>
+
+       * setup.cfg: some clarifications and include_dirs example for Mandrake.
+       
+       * ZPsycopgDA/DA.py: DTMLFile -> HTMLFile everywhere to fix zope
+       cut&paste problems.
+       
+       * MANIFEST.in: added missing files to do bdist_rpm.
+       
+       * lib/psycopg1.py: fixed .dictfetchrow() to return None if fetchone()
+       returns None instead of raising an exception.
+       
+       * ZPsycopgDA/icons: replaced corrupted icons with good ones. 
+
+2005-06-13  Federico Di Gregorio  <fog@initd.org>
+
+       * psycopg/psycopgmodule.c (psyco_connect): changed the port keyword
+       parameter type to int (instead of string); this should fix #23.
+       
+       * psycopg/cursor_type.c (_psyco_curs_execute): now checks for
+       empty queries and raise a ProgrammingError if appropriate (closes:
+       #24).
+       
+       * setup.py: psycopg module renamed to psycopg2.
+
+2005-06-02  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/cursor_type.c (_psyco_curs_execute): fixed segfault when
+       not passing string or unicode to .execute().
+
+2005-06-01  Federico Di Gregorio  <fog@debian.org>
+
+       * examples/fetch.py: added example about using DECLARE CURSOR.
+
+       * psycopg/adapter_datetime.c (psyco_TimestampFromTicks): "Hmmm,
+       looks like someone forgot that C expects months to start counting
+       from 0, but the Python date routines start counting from 1." That
+       was me: fixed.
+
+2005-05-31  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/cursor_type.c (_psyco_curs_execute): if a
+       UnicodeEncodeError is raised during the converion of a unicode
+       query we let it propagate insead of segfaulting.
+       
+2005-5-27  Federico Di Gregorio,  <fog@lana.initd.org>
+
+       * tests/types_basic.py: fixed float and binary tests.
+
+2005-05-26  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 2.0b3.
+
+       * ZPsycopgDA/db.py (DB.convert_description): isolated description
+       conversion (and fixed the conversion as per #18).
+
+       * ZPsycopgDA/DA.py: fixed again; this time Zope should work for
+       real. :/  Also fixed the type-casters (psycopg 2 added the extra
+       cursor parameter) as reported in #18.
+
+       * psycopg/psycopgmodule.c (init_psycopg): fixed Python 2.2 build. 
+
+2005-05-19  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 2.0b2.
+       
+       * lib/extras.py (DictRow): Some extra methods for DictRow.
+
+       * psycopg/cursor_type.c (_psyco_curs_execute): added explict check
+       to avoid using None as bound variables (very importand for cursor
+       subclasses calling cursor.execute(self, query, None).
+
+2005-05-18  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/DA.py (ALLOWED_PSYCOPG_VERSIONS): updated to work
+       with 2.0b2 only (will support only the exact version untill final
+       2.0 release.)
+
+       * setup.py: Applied combined patch from Daniele Varrazzo and Jason
+       Erickson to build on win32 using MSVC or mingw.
+
+2005-05-15  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/microprotocols.c (microprotocols_adapt): fixed memory
+       leak on None as suggested by gh (closes: #16).
+
+2005-05-10  Federico Di Gregorio  <fog@debian.org>
+
+       * lib/extras.py (DictRow): we now save a reference to the index
+       itself and not to the cursor to avoid problems while accessing
+       DictRow objects after reusing the cursor for a different query
+       (using  Kevin Jacobs db_row would be much better but DictRow is
+       just an example, right?)
+
+2005-05-09  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 2.0 beta 1.
+
+       * psycopg/typecast_datetime.c (typecast_PYDATETIME_cast): fixed a
+       typo (pyDateTimeModuleP->pyDateTimeTypeP) that was causing errors
+       with infinite datetime values.
+
+       * psycopg/adapter_binary.c (binary_str): Py_XINCREF on the buffer
+       that can be NULL on error.
+
+       * psycopg/typecast_binary.*: applied slightly modified
+       chunk/buffer object patch to allow round-trip of buffer objects
+       (BYTEA columns.) 
+
+       * psycopg/cursor_type.c (psyco_curs_executemany): applied slightly
+       fixed patch from wrobell to allow iterators in .executemany().
+
+2005-04-18  Federico Di Gregorio  <fog@debian.org>
+
+       * MANIFEST.in: included debian directory.
+
+2005-04-10  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/adapter_list.*: added list adapter. 
+
+       * psycopg/microprotocols.c (microprotocol_getquoted): moved
+       _mogrify_getquoted into utility function in the microprotocols
+       library.
+
+       * setup.py: Added extensive error message on missing datetime
+       headers.
+
+       * Applied mingw patch from Daniele Varazzo. 
+
+2005-04-03  Federico Di Gregorio  <fog@debian.org>
+
+       * lib/psycopg1.py (connection.autocommit): added compatibility
+       .autocommit() method.
+
+       * psycopg/psycopgmodule.c (psyco_connect): factory ->
+       connection_factory.
+
+       * lib/psycopg1.py: added psycopg 1.1.x compatibility module.
+
+2005-03-29  Federico Di Gregorio  <fog@debian.org>
+
+       * Applied patch to fix tuple count.
+       
+       * psycopg/pqpath.c (pq_is_busy): Staring from bug report from
+       Jason Erickson fixed segfaults due to calling Python function
+       without holding the GIL.
+2005-03-24  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/adapter_binary.c (binary_escape): propagated Andrea's
+       fix to binary adapter.
+
+       * psycopg/adapter_qstring.c (qstring_quote): applied patch from
+       Andrea Arcangeli to fix allocation failures (>4Gb) on 64 bit
+       arches.
+
+       * psycopg/typecast_array.c (typecast_array_tokenize): much better
+       tokenization code.
+
+2005-03-23  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/typecast_basic.c: all the basic casters now respect the
+       passed string length.
+
+       * psycopg/typecast.c (typecast_cast): set curs->caster to self
+       during the type-casting.
+
+       * psycopg/cursor_type.c: added "typecaster" attribute to the
+       cursor (this is safe, cursors can't be shared among threads and
+       the attribute is RO.)
+
+2005-03-22  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/typecast_array.c: added some more structure to implement
+       array typecasting.
+
+       * scripts/buildtypes.py: new version to include array data.
+
+2005-03-15  Federico Di Gregorio  <fog@debian.org>
+
+       * lib/extensions.py: Added AsIs import.
+
+2005-03-12  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/cursor.h: removed "qattr", not used anymore and added
+       "cast", holding the typecaster currently in use.
+
+       * Release 1.99.13.
+
+       * psycopg/cursor_type.c (psyco_curs_executemany): implemented as a
+       wrapper to extract python arguments and then call
+       _psyco_curs_execute().
+
+       * psycopg/cursor_type.c (_psyco_curs_execute): splitted away
+       python argument parsing from the real execute code, to later allow
+       for .executemany().
+
+       * psycopg/cursor_type.c (_psyco_curs_buildrow_fill): modified to
+       call typecast_cast().
+       
+       * psycopg/typecast.c (typecast_call/typecast_cast): modified
+       typecast_call to use the new typecast_cast that avoids one string
+       conversion on every cast.
+
+2005-03-04  Federico Di Gregorio  <fog@initd.org>
+
+       * Release 1.99.12.1.
+
+       * psycopg/adapter_asis.c (asis_str): changed call to PyObject_Repr
+       to PyObject_Str to avoid problems with long integers.
+
+2005-03-03  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/typecast.h: added array casting functions.
+
+       * scripts/maketypes.sh: does not generate pgversion.h anymore. 
+
+       * Updated all examples for the release.
+
+2005-03-02  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.99.12.
+       
+       * psycopg/adapter_*.c: added __conform__ to all adapters.
+       
+       * psycopg/adapter_qstring.c (qstring_quote): we now use
+       PyString_AsStringAndSize() instead of strlen() that would stop at
+       the first embedded \0 (but note that libpq quoting function will
+       truncate the string anyway!)
+       
+       * COPY TO implemented using both old and new (v3) protocol.
+
+       * psycopg/pqpath.c (_pq_copy_out_v3): implemented and working.
+
+       * psycopg/cursor_type.c (psyco_curs_copy_to): added cursor object
+       interface for copy_to.
+
+       * COPY FROM implemented using both old and new (v3) protocol.
+
+       * psycopg/config.h (Dprintf): declaration for asprintf is gone.
+
+       * psycopg/pqpath.c (_pq_copy_in_v3): implemented.
+
+2005-03-01  Federico Di Gregorio  <fog@debian.org>
+
+       * setup.py: now we generate a slighly more verbose version string
+       that embeds some of the compile options, to facilitate users' bug
+       reports.
+
+       * psycopg/cursor_type.c (psyco_curs_copy_from): we now use
+       PyOS_snprintf instead of asprintf. On some platforms this can be
+       bad (win32).. if that's your case, get a better platform. :/
+
+       * psycopg/microprotocols.c (microprotocols_adapt): fixed small
+       typo that made adaptation using __conform__ impossible.
+
+2005-02-28  Federico Di Gregorio  <fog@debian.org>
+
+       * lib/extras.py: removed AsIs adapter (now a built-in); also
+       removed prepare() method from the adapters that don't use it to
+       avoid an extra method call at mogrification time.
+
+       * psycopg/psycopgmodule.c (psyco_adapters_init): added
+       initialization of the AsIs adapter (adapts int, long, float and
+       *wonder* None!)
+
+       * psycopg/cursor_type.c (_mogrify_getquoted): reorganized the code
+       to adapt and then call .getquoted() to obtain the quoted data into
+       this new function.
+
+2005-2-27  Federico Di Gregorio  <fog@initd.org>
+
+       * examples/myfirstrecipe.py: fixed adapter registration. 
+
+2005-2-7  Federico Di Gregorio  <fog@initd.org>
+
+       * setup.py: added patch by Valentino Volonghi to build on MacOS X.
+
+2005-01-29  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/pqpath.c (_pq_fetch_tuples): fixed scale-related
+       segfault (*fourth* mail from Andrea. Another couple like this and
+       psycopg 2 will exit alpha at warp speed.)
+       
+       * psycopg/pqpath.c (pq_fetch): _pq_copy_out_3 -> _pq_copy_out_v3
+       (second and third mail from Andrea. :/)
+
+       * psycopg/cursor_type.c (_psyco_curs_has_write_check): added check
+       on .write() attribute, fixed compilation problems (first mail from
+       Andrea Arcangeli.)
+
+2005-01-20  Federico Di Gregorio  <fog@debian.org>
+
+       * lib/extensions.py (register_adapter): added register_adapter
+       function, exported ISQLQuote in psycopg.extensions.
+
+2005-01-18  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/pqpath.c (_pq_fetch_tuples): ported scale/precision fix
+       from psycopg 1.1.
+
+       * LICENSE: detailed licensing information. Re-licensed some parts
+       under BSD-like to allow integration is pysqlite.
+
+2005-01-13  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/db.py (DB.query
+       ): ported ZPsycopgDA connection fix
+       from psycopg 1.1.
+
+       * lib/*.py: added pydoc-friendly messages.
+
+2005-01-12  Federico Di Gregorio  <fog@debian.org>
+
+       * Added debian directory (thanks to W. Borgert who sent initial
+       patch based on cdbs.)
+
+2004-12-20  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/pqpath.c (pq_execute): removed multiple calls to
+       pq_fetch in syncronous DBAPI compatibility mode to solve rowcount
+       problem.
+
+2004-12-14  Federico Di Gregorio  <fog@debian.org>
+
+       * Mm.. release 1.99.11.
+
+       * psycopg/cursor_type.c (_psyco_curs_prefetch): fixed bug in
+       interaction between the .isready() method and
+       _psyco_curs_prefetch: isready now store away the pgres but leave
+       prefetch do its work.
+
+       * psycopg/*.c: changed the names of most of the psycopg's built-in
+       types to replect their position in the psycopg._psycopg module.
+
+2004-12-10  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/cursor_type.c: now *all* write or async accesses to the
+       connection object are arbitrated using the connection lock.
+       
+       * psycopg/cursor_type.c (psyco_curs_isready): now we reset the
+       current async cursor if it is ready, to allow other cursors to
+       .execute() without raising the "transaction in progress" error.
+
+       * psycopg/pqpath.c (pq_is_busy): gained status of high-level
+       function with its own blocking and locking.
+
+       * psycopg/cursor.h (EXC_IF_CURS_CLOSED): also checks the
+       connection (a closed connection implies a closed cursor.)
+
+       * psycopg/cursor_type.c: cursor's connection is correctly
+       INCREFfed and DECREFfed.
+
+       * psycopg/connection_type.c: removed the cursors list from the
+       connection object. It is not necessary anymore for the connection
+       to know about the cursors and the reference counting will keep the
+       connection alive (but possibly closed) until all cursors are
+       garbage collected.
+
+2004-11-20  Federico Di Gregorio  <fog@initd.org>
+
+       * psycopg/cursor_type.c (_mogrify): ported %% fix from 1.1.15. 
+
+2004-11-20  Federico Di Gregorio  <fog@initd.org>
+
+       * psycopg/cursor_type.c (psyco_curs_execute): added check to raise an
+       exception if a cursor tries to .execute() while an async query is
+       already in execution froma  different cursor. 
+
+2004-11-20  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/connection_type.c (psyco_conn_cursor): renamed 'cursor'
+       argument to 'cursor_factory'.
+
+2004-11-19  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/cursor_type.c (_psyco_curs_buildrow_fill): now standard
+       tuples are filled using PyTuple_SET_ITEM while extended types
+       (created via row_factory) are filled using PySequence_SetItem.
+       
+       * psycopg/cursor_type.c: changed cursor attribute name from
+       tuple_factory to row_factory.
+
+2004-10-14  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/cursor_type.c (_psyco_curs_buildrow_fill): now we use
+       PySequence_SetItem to avoid problems with containers created from
+       cursor's .tuple_factory attribute.
+
+       * lib/extras.py (DictCursor.execute): fixed stupid bug with cursor
+       setting self.tuplefactory instead of self.tuple_factory.
+
+2004-10-02  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.99.10.
+       
+       * psycopg/cursor_type.c (_psyco_curs_buildrow_*): unified normal
+       and factory code into the _psyco_curs_buildrow_fill function; no
+       more memory leaks here. 
+
+       * psycopg/config.h (round): added check for __FreeBSD__ (that
+       should be defined when compiling with gcc, I hope.)
+
+       * setup.py: removed a lot of code now in setup.cfg.
+
+2004-09-24  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/cursor_type.c (cursor_dealloc): fixed small memory leak
+       due to missing disposal of self->pgres.
+
+2004-9-14  Federico Di Gregorio  <fog@initd.org>
+
+       *  examples/dialtone.py: Added adapt() example by Valentino
+       Volonghi.
+
+2004-09-14  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/microprotocols.c (microprotocols_adapt): lots of changes
+       to the microprotocols layer (it is not micro anymore);
+       implementing almost all the PEP 246. The adapter registry is now
+       indexed by (type, protocol) and not by type alone.
+
+2004-09-13  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/cursor_type.c (_mogrify): and qattr is gone.
+
+2004-09-05  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.99.9 (or, the "twisting by the pool" release).
+
+       * psycopg/pqpath.c (_pq_fetch_tuples): changed to "static void"
+       instead of "static int", no ways for this function to fail.
+
+2004-09-04  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/pqpath.c (_pq_fetch_tuples): ported rowcount fix from
+       1.1.15.
+
+       * ZPsycopgDA/*: ZPsycopgDA back in action, using the new pooling
+       code.
+
+2004-08-29  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/typecast_basic.c (typecast_DECIMAL_cast): added DECIMAL
+       typecaster; it even works :).
+
+       * scripts/buildtypes.py (basic_types): added DECIMAL typecaster
+       for the NUMERIC oid.
+
+       * examples/threads.py: updated threads example to use pooling code. 
+
+       * lib/pool.py: added very simple and thread-safe connection
+       pooling class.
+
+       * psycopg/cursor_type.c (psyco_curs_fetchmany): fixed problem with
+       .fetchall() and .fetchmany() returning None instead of [] on empty
+       result sets.
+
+       * Release 1.99.8.
+
+2004-08-28  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/cursor_type.c (psyco_curs_execute): added processing of
+       unicode queries.
+
+       * examples/encoding.py: much better encoding example, also using
+       the new UNICODE typecaster.
+
+       * psycopg/typecast_basic.c (typecast_UNICODE_cast): added UNICODE
+       typecaster.
+
+       * lib/extensions.py: the encodings dictionary is not available by
+       default but can be accessed from the psycopg.extensions module.
+
+       * psycopg/adapter_qstring.h: remove encoding information from
+       qstring adapter and moved it into psycopg module.
+
+2004-08-26  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/cursor_type.c (_psyco_curs_prefetch): added check for
+       asynchronous fetch by wrong cursor.
+
+       * psycopg/pqpath.c (pq_fetch): fixed backend status message (bug
+       reported by Daniele Varrazzo.)
+
+2004-07-29  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/typecast_basic.c (typecast_BINARY_cast): reverted to
+       using strings instead of buffers when converting postgresql binary
+       objects (should *temporarily* fix corruption bug reported on
+       win32.)
+
+2004-07-21  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/cursor_type.c: removed __iter__ and next methods from
+       object methods and moved them where they do belong (tp_iter and
+       tp_iternext.) Bug reported by Daniele Varrazzo (again!)
+
+2004-07-19  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/typecast_datetime.c (typecast_PYINTERVAL_cast): replaced
+       round() with micro() when rounding seconds (fixes bugs reported by
+       Daniele Varrazzo.)
+
+2004-07-16  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/pqpath.c (pq_set_critical): allow for a custom message
+       insted of the one from PQerrorMessage.
+       (pq_resolve_critical): added argument to specify if connection is
+       to be closed (used to not close it during COPY FROM/TO criticals.)
+
+       * psycopg/cursor_type.c (psyco_curs_fileno, psyco_curs_isready):
+       added extension methods related to async queries. 
+
+2004-07-15  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.99.7.
+
+       * examples/tz.py: added example about time zones.
+
+       * psycopg/typecast_datetime.c (typecast_PYDATETIME_cast): create
+       FixedOffsetTimezone for postgresql "timestamp with time zone"
+       types.
+
+       * lib/tz.py: added (even more than) needed tzinfo classes.
+
+       * psycopg/typecast.c (typecast_call): changed typecast call code
+       to take the additional cursor parameter, needed for
+       cursor-dependent type casting (tzinfo & friends.)
+
+       * psycopg/cursor_type.c (_psyco_curs_buildrow_with_factory): added
+       use of tuple factories to fetcXXX methods.
+
+       * lib/extras.py: little extra goodies for psycopg.
+
+2004-07-14  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.99.6. 
+       
+       * psycopg/connection_type.c: added .dsn attribute to connection
+       objects.
+
+       * psycopg/cursor_type.c (psyco_curs_mogrify): added .mogrify()
+       method.
+
+       * psycopg/adapter_qstring.c: copy the connection encoding only if
+       wrapped object is unicode and added table of encodings.
+
+2004-07-13  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/cursor_type.c (_mogrify): moved Dprintf statement to
+       avoid dereferencing empty pointer (from 1.1.x)
+       (psyco_curs_execute): now we save the query in self->query instead
+       of freeing the memory ASAP.
+       (cursorObject_members): and we finally export the saved query
+       through the cursor members interface. that's all folks.
+
+       * lib/extensions.py: added extensions module to clearly separate
+       psycopg own extensions from DBAPI-2.0
+
+2004-07-10  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/typecast_datetime.c: ported interval fix from 1.1.x.
+
+2004-05-16  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/typecast_datetime.c (typecast_*_cast): fixed Value error
+       when seconds > 59 by setting minutes += 1 and seconds -= 60
+       (reported by Marcel Gsteiger.) 
+
+2004-04-24  Federico Di Gregorio  <fog@debian.org>
+
+       * ported time interval patch by Ross Cohen from 1.1.12.
+
+2004-04-19  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/typecast_datetime.c (typecast_PYDATE_cast): applied
+       patch from Jason Erickson: min and max taken from datetime.Date
+       type.
+       
+2004-04-18  Federico Di Gregorio  <fog@debian.org>
+
+       * Applied changes from Jason Erickson to build on win32; see his
+       (slightly edited) entry below. (Still builds on Linux :)
+
+       * psycopg/*.c: removed inclusion of pthread.h from all files
+       except psycopg/config.h to build on win32 without faking the file.
+
+2004-04-15  Jason Erickson <jerickso@stickpeople.com>
+        * setup.py: Various changes. The critical ones: 
+         - Make an empty pthread.h file so all the code doing an 
+           #include <pthread.h> will find something.
+         - Appended the winsock2 library and the PostgreSQL library to 
+           the library path.
+         - Setup the include path.
+         - Have the PSYCOPG_VERSION macro be included with quotes.
+        * config.h: Added/Cleaned up Win32 includes, defines, stub functions.
+        * typecast.h: Removed ';' after PyObject_HEAD in the
+       typecastObject structure since Microsoft Visual Studio does not
+       like it.
+
+2004-04-15  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.99.5 (bug-fixing and reorganization)
+
+       * setup.py et al.: moved psycopg to psycopg._psycopg to make
+       easier to provide high level python-only utilities (like the
+       promised pooling code). psycopg/__init__.py imports _psycopg and
+       make all the default DBAPI-2.0 stuff available. 
+
+2004-04-14  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/psycopgmodule.c (initpsycopg): wrapped initialization of
+       date/time adapters in #ifdefs to have psycopg compile without mx
+       or builtin datetime.
+
+2004-04-10  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.99.4.
+
+2004-04-09  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/typecast_builtins.c: changed DATE to not include
+       DATETIME types anymore.
+
+       * psycopg/adapter_datetime.c (pydatetime_str): switched from
+       strftime to isoformat to preserve fractional seconds.
+
+2004-04-08  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/psycopgmodule.c (psyco_connect): ported sslmode
+       parameter from 1.1 branch.
+
+       * psycopg/adapter_datetime.*: added python built-in datetime
+       adapters. also added the datetime typecasters (still using mx as
+       default).
+
+       * psycopg/typecast.h: removed aliases, they now live in the right
+       typecast_xxx.c file.
+
+2004-03-08  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.99.3 (alpha 4).
+
+       * examples/lastrowid.py: and the .lastrowid example is in. 
+
+       * psycopg/cursor_type.c (_mogrify): added call to .prepare()
+       method in both dict and sequence path.
+
+       * psycopg/connection_int.c (conn_set_client_encoding): added
+       encoding-change code.
+
+       * psycopg/adapter_qstring.c (qstring_quote): added hard-coded
+       support for utf8 and latin1 encodings.
+
+2004-03-01  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/connection_int.c (conn_close): does not use libpq
+       functions on NULL pgconn (this can happen when conn_close is
+       called after a failed PQconnect.)
+
+2004-02-29  Federico Di Gregorio  <fog@debian.org> 
+
+       * Release 1.99.2 (alpha 3).
+       
+       * psycopg/cursor_type.c: added .rownumber and .connection
+       attributes. Also added .scroll(), .next() and .__iter__() methods
+       (see DBAPI2-.0 extensions on PEP.)
+
+       * psycopg/connection_type.c (psyco_conn_set_isolation_level):
+       added connection method .set_isolation_level(). Also added all
+       error objects to the connection (see DBAPI2-.0 extensions on PEP.)
+
+       * psycopg/connection_int.c (conn_switch_isolation_level): added
+       isolation level switching code.
+
+       * setup.py: removed all references to PSYCOPG_NEWSTYLE: support
+       for python < 2.2 has been dropped.
+
+       * typecast_basic.c (typecast_BINARY_cast): now binary objects are
+       returned as true buffers.
+
+       * adapter_binary.*: added adapter for buffers and binary (bytea)
+       objects.
+
+       * Release 1.99.1 (alpha 2).
+
+       * adapter_mxdatetime.*: added adapters for all mx.DateTime types.
+
+2004-02-28  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor_type.c (_mogrify): complete rework of the mogrification
+       code to use the microprotocols_adapt function.
+
+       * typecast_basic.c (typecast_BOOLEAN_cast): we now return real
+       Py_True and Py_False values.
+
+       * microprotocols.h: added very simple microprotocols
+       implementation to allow for python->postgresql types registry.
+
+2004-01-05  Federico Di Gregorio  <fog@debian.org>
+
+       * connection_int.c (conn_commit/conn_rollback): added code to
+       commit/rollback and connection methods. 
+
+2004-01-04  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor_type.c (psyco_curs_fetchone): added fetchone method.
+
+2004-01-03  Federico Di Gregorio  <fog@debian.org>
+
+       * added (empty) INSTALL file.
+
+       * cursor_type.c (cursor_dealloc): added qattr for custom object
+       quoting using a callable attribute.
+       (_mogrify): ported new, fixed mogrification code from 1.1.12.
+
+2003-08-01  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor_type.c (_mogrify_sequence): added sequence mogrification,
+       can be done better, on the dict model.
+
+2003-07-28  Federico Di Gregorio  <fog@debian.org>
+
+       * typeobj_qstring.c: added quoted strings (can use both own code,
+       like psycopg 1.x or PQescapeString from lipq.)
+
+2003-07-21  Federico Di Gregorio  <fog@debian.org>
+
+       * connection_type.c (psyco_conn_close): added .close()
+       method. wow.
+
+       * cursor_*.c: added basic cursor interface (new-style.)
+
+2003-07-20  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg/*: beginning of new source layout. if you think this
+       changelog is somewhat empty, you're right. look at
+       doc/ChangeLog-1.x for psycopg 1.x changelog just before the
+       branch.
+
+
diff --git a/psycopg2/INSTALL b/psycopg2/INSTALL
new file mode 100644 (file)
index 0000000..873dbfa
--- /dev/null
@@ -0,0 +1,48 @@
+Compiling and installing psycopg
+********************************
+
+** Important note: if you plan to use psyopg2 in a multithreaed application
+   make sure that your libpq has been compiled with the --with-thread-safety
+   option. psycopg2 will work correctly even with a non-thread-safe libpq but
+   libpq will leak memory.
+
+While psycopg 1.x used autoconf for its build process psycopg 2 switched to
+the more pythoning setup.py. Currently both psycopg's author and distutils
+have some limitations so the file setup.cfg is almost unused and most build
+options are hidden in setup.py. Before building psycopg look at setup.cfg file
+and change any settings to follow your system (or taste); then:
+
+    python setup.py build
+
+to build in the local directory; and:
+
+    python setup.py install
+    
+to install system-wide.
+
+
+Using setuptools and EasyInstall
+================================
+
+If setuptools are installed on your system you can easily create an egg for
+psycopg and install it. Download the source distribution (if you're reading
+this file you probably already have) and then edit setup.cfg to your taste
+and build from the source distribution top-level directory using:
+
+    easy_install .
+
+
+Compiling under Windows with mingw32
+====================================
+
+You can compile psycopg under Windows platform with mingw32
+(http://www.mingw.org/) compiler. MinGW is also shipped with IDEs such as
+Dev-C++ (http://www.bloodshed.net/devcpp.html) and Code::Blocks
+(http://www.codeblocks.org). gcc binaries should be in your PATH.
+
+You need a PostgreSQL with include and libary files installed. At least v8.0 is required.
+
+First you need to create a libpython2X.a as described in 
+http://starship.python.net/crew/kernr/mingw32/Notes.html. Then run:
+
+    python setup.py build_ext --compiler=mingw32 install
diff --git a/psycopg2/LICENSE b/psycopg2/LICENSE
new file mode 100644 (file)
index 0000000..b20b282
--- /dev/null
@@ -0,0 +1,60 @@
+psycopg and the GPL
+===================
+
+psycopg 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 of the License, or
+(at your option) any later version. See file COPYING for details.
+
+As a special exception, specific permission is granted for the GPLed
+code in this distribition to be linked to OpenSSL and PostgreSQL libpq
+without invoking GPL clause 2(b).
+
+Note that the GPL was chosen to avoid proprietary adapters based on
+psycopg code. Using psycopg in a proprietary product (even bundling
+psycopg with the proprietary product) is fine as long as:
+
+ 1. psycopg is called from Python only using only the provided API
+    (i.e., no linking with C code and no C modules based on it); and
+
+ 2. all the other points of the GPL are respected (you offer a copy
+    of psycopg's source code, and so on.)
+
+Alternative licenses
+====================
+
+If you prefer you can use the Zope Database Adapter ZPsycopgDA (i.e.,
+every file inside the ZPsycopgDA directory) user the ZPL license as
+published on the Zope web site, http://www.zope.org/Resources/ZPL.
+
+Also, the following BSD-like license applies (at your option) to the
+files following the pattern psycopg/adapter*.{h,c} and
+psycopg/microprotocol*.{h,c}:
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+    claim that you wrote the original software. If you use this
+    software in a product, an acknowledgment in the product documentation
+    would be appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not
+    be misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+psycopg is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+Proprietary licenses
+====================
+
+A non-exclusive license is available for companies that want to include
+psycopg in their proprietary products without respecting the spirit of the
+GPL. The price of the license is one day of development done by the author,
+at the consulting fee he applies to his usual customers at the day of the
+request.
diff --git a/psycopg2/MANIFEST b/psycopg2/MANIFEST
new file mode 100644 (file)
index 0000000..c8538ea
--- /dev/null
@@ -0,0 +1,222 @@
+AUTHORS
+ChangeLog
+INSTALL
+LICENSE
+MANIFEST
+MANIFEST.in
+README
+setup.cfg
+setup.py
+ZPsycopgDA/DA.py
+ZPsycopgDA/__init__.py
+ZPsycopgDA/db.py
+ZPsycopgDA/pool.py
+ZPsycopgDA/dtml/add.dtml
+ZPsycopgDA/dtml/browse.dtml
+ZPsycopgDA/dtml/edit.dtml
+ZPsycopgDA/dtml/table_info.dtml
+ZPsycopgDA/icons/bin.gif
+ZPsycopgDA/icons/date.gif
+ZPsycopgDA/icons/datetime.gif
+ZPsycopgDA/icons/field.gif
+ZPsycopgDA/icons/float.gif
+ZPsycopgDA/icons/int.gif
+ZPsycopgDA/icons/stable.gif
+ZPsycopgDA/icons/table.gif
+ZPsycopgDA/icons/text.gif
+ZPsycopgDA/icons/time.gif
+ZPsycopgDA/icons/view.gif
+ZPsycopgDA/icons/what.gif
+debian/changelog
+debian/control
+debian/copyright
+debian/rules
+doc/ChangeLog-1.x
+doc/HACKING
+doc/SUCCESS
+doc/TODO
+doc/api-screen.css
+doc/async.txt
+doc/extensions.html
+doc/extensions.rst
+doc/api/epydoc.css
+doc/api/index.html
+doc/api/private/__builtin__.list-class.html
+doc/api/private/__builtin__.object-class.html
+doc/api/private/__builtin__.type-class.html
+doc/api/private/datetime.tzinfo-class.html
+doc/api/private/epydoc.css
+doc/api/private/exceptions.Exception-class.html
+doc/api/private/exceptions.StandardError-class.html
+doc/api/private/frames.html
+doc/api/private/help.html
+doc/api/private/index.html
+doc/api/private/indices.html
+doc/api/private/psycopg2-module.html
+doc/api/private/psycopg2.DataError-class.html
+doc/api/private/psycopg2.DatabaseError-class.html
+doc/api/private/psycopg2.Error-class.html
+doc/api/private/psycopg2.IntegrityError-class.html
+doc/api/private/psycopg2.InterfaceError-class.html
+doc/api/private/psycopg2.InternalError-class.html
+doc/api/private/psycopg2.NotSupportedError-class.html
+doc/api/private/psycopg2.OperationalError-class.html
+doc/api/private/psycopg2.ProgrammingError-class.html
+doc/api/private/psycopg2.Warning-class.html
+doc/api/private/psycopg2._psycopg-module.html
+doc/api/private/psycopg2._psycopg.ISQLQuote-class.html
+doc/api/private/psycopg2._psycopg.connection-class.html
+doc/api/private/psycopg2._psycopg.cursor-class.html
+doc/api/private/psycopg2.extensions-module.html
+doc/api/private/psycopg2.extras-module.html
+doc/api/private/psycopg2.extras.DictConnection-class.html
+doc/api/private/psycopg2.extras.DictCursor-class.html
+doc/api/private/psycopg2.extras.DictRow-class.html
+doc/api/private/psycopg2.extras.SQL_IN-class.html
+doc/api/private/psycopg2.pool-module.html
+doc/api/private/psycopg2.pool.AbstractConnectionPool-class.html
+doc/api/private/psycopg2.pool.PersistentConnectionPool-class.html
+doc/api/private/psycopg2.pool.PoolError-class.html
+doc/api/private/psycopg2.pool.SimpleConnectionPool-class.html
+doc/api/private/psycopg2.pool.ThreadedConnectionPool-class.html
+doc/api/private/psycopg2.psycopg1-module.html
+doc/api/private/psycopg2.psycopg1.connection-class.html
+doc/api/private/psycopg2.psycopg1.cursor-class.html
+doc/api/private/psycopg2.tz-module.html
+doc/api/private/psycopg2.tz.FixedOffsetTimezone-class.html
+doc/api/private/psycopg2.tz.LocalTimezone-class.html
+doc/api/private/toc-everything.html
+doc/api/private/toc-psycopg2-module.html
+doc/api/private/toc-psycopg2._psycopg-module.html
+doc/api/private/toc-psycopg2.extensions-module.html
+doc/api/private/toc-psycopg2.extras-module.html
+doc/api/private/toc-psycopg2.pool-module.html
+doc/api/private/toc-psycopg2.psycopg1-module.html
+doc/api/private/toc-psycopg2.tz-module.html
+doc/api/private/toc.html
+doc/api/private/trees.html
+doc/api/public/__builtin__.list-class.html
+doc/api/public/__builtin__.object-class.html
+doc/api/public/__builtin__.type-class.html
+doc/api/public/datetime.tzinfo-class.html
+doc/api/public/epydoc.css
+doc/api/public/exceptions.Exception-class.html
+doc/api/public/exceptions.StandardError-class.html
+doc/api/public/frames.html
+doc/api/public/help.html
+doc/api/public/index.html
+doc/api/public/indices.html
+doc/api/public/psycopg2-module.html
+doc/api/public/psycopg2.DataError-class.html
+doc/api/public/psycopg2.DatabaseError-class.html
+doc/api/public/psycopg2.Error-class.html
+doc/api/public/psycopg2.IntegrityError-class.html
+doc/api/public/psycopg2.InterfaceError-class.html
+doc/api/public/psycopg2.InternalError-class.html
+doc/api/public/psycopg2.NotSupportedError-class.html
+doc/api/public/psycopg2.OperationalError-class.html
+doc/api/public/psycopg2.ProgrammingError-class.html
+doc/api/public/psycopg2.Warning-class.html
+doc/api/public/psycopg2._psycopg-module.html
+doc/api/public/psycopg2.extensions-module.html
+doc/api/public/psycopg2.extras-module.html
+doc/api/public/psycopg2.extras.DictConnection-class.html
+doc/api/public/psycopg2.extras.DictCursor-class.html
+doc/api/public/psycopg2.extras.DictRow-class.html
+doc/api/public/psycopg2.extras.SQL_IN-class.html
+doc/api/public/psycopg2.pool-module.html
+doc/api/public/psycopg2.pool.AbstractConnectionPool-class.html
+doc/api/public/psycopg2.pool.PersistentConnectionPool-class.html
+doc/api/public/psycopg2.pool.PoolError-class.html
+doc/api/public/psycopg2.pool.SimpleConnectionPool-class.html
+doc/api/public/psycopg2.pool.ThreadedConnectionPool-class.html
+doc/api/public/psycopg2.psycopg1-module.html
+doc/api/public/psycopg2.psycopg1.connection-class.html
+doc/api/public/psycopg2.psycopg1.cursor-class.html
+doc/api/public/psycopg2.tz-module.html
+doc/api/public/psycopg2.tz.FixedOffsetTimezone-class.html
+doc/api/public/psycopg2.tz.LocalTimezone-class.html
+doc/api/public/toc-everything.html
+doc/api/public/toc-psycopg2-module.html
+doc/api/public/toc-psycopg2._psycopg-module.html
+doc/api/public/toc-psycopg2.extensions-module.html
+doc/api/public/toc-psycopg2.extras-module.html
+doc/api/public/toc-psycopg2.pool-module.html
+doc/api/public/toc-psycopg2.psycopg1-module.html
+doc/api/public/toc-psycopg2.tz-module.html
+doc/api/public/toc.html
+doc/api/public/trees.html
+examples/binary.py
+examples/copy_from.py
+examples/copy_to.py
+examples/cursor.py
+examples/dialtone.py
+examples/dict.py
+examples/dt.py
+examples/encoding.py
+examples/fetch.py
+examples/lastrowid.py
+examples/mogrify.py
+examples/myfirstrecipe.py
+examples/notify.py
+examples/simple.py
+examples/somehackers.jpg
+examples/threads.py
+examples/tz.py
+examples/usercast.py
+examples/whereareyou.jpg
+lib/__init__.py
+lib/extensions.py
+lib/extras.py
+lib/pool.py
+lib/psycopg1.py
+lib/tz.py
+psycopg/adapter_asis.c
+psycopg/adapter_asis.h
+psycopg/adapter_binary.c
+psycopg/adapter_binary.h
+psycopg/adapter_datetime.c
+psycopg/adapter_datetime.h
+psycopg/adapter_list.c
+psycopg/adapter_list.h
+psycopg/adapter_mxdatetime.c
+psycopg/adapter_mxdatetime.h
+psycopg/adapter_pboolean.c
+psycopg/adapter_pboolean.h
+psycopg/adapter_qstring.c
+psycopg/adapter_qstring.h
+psycopg/config.h
+psycopg/connection.h
+psycopg/connection_int.c
+psycopg/connection_type.c
+psycopg/cursor.h
+psycopg/cursor_int.c
+psycopg/cursor_type.c
+psycopg/microprotocols.c
+psycopg/microprotocols.h
+psycopg/microprotocols_proto.c
+psycopg/microprotocols_proto.h
+psycopg/pgtypes.h
+psycopg/pgversion.h
+psycopg/pqpath.c
+psycopg/pqpath.h
+psycopg/psycopg.h
+psycopg/psycopgmodule.c
+psycopg/python.h
+psycopg/typecast.c
+psycopg/typecast.h
+psycopg/typecast_array.c
+psycopg/typecast_basic.c
+psycopg/typecast_binary.c
+psycopg/typecast_binary.h
+psycopg/typecast_builtins.c
+psycopg/typecast_datetime.c
+psycopg/typecast_mxdatetime.c
+scripts/buildtypes.py
+scripts/ext2html.py
+scripts/makedocs.py
+scripts/maketypes.sh
+tests/dbapi20.py
+tests/extras_dictcursor.py
+tests/test_psycopg2_dbapi20.py
+tests/types_basic.py
diff --git a/psycopg2/MANIFEST.in b/psycopg2/MANIFEST.in
new file mode 100644 (file)
index 0000000..457004c
--- /dev/null
@@ -0,0 +1,12 @@
+recursive-include psycopg *.c *.h
+recursive-include lib *.py
+recursive-include tests *.py
+recursive-include ZPsycopgDA *.py *.gif *.dtml
+recursive-include examples *.py somehackers.jpg whereareyou.jpg
+recursive-include debian *
+recursive-include doc TODO HACKING SUCCESS ChangeLog-1.x async.txt
+recursive-include scripts *.py *.sh
+include scripts/maketypes.sh scripts/buildtypes.py
+include AUTHORS README INSTALL LICENSE ChangeLog 
+include PKG-INFO MANIFEST.in MANIFEST setup.py setup.cfg
+recursive-include doc *.rst *.css *.html
diff --git a/psycopg2/PKG-INFO b/psycopg2/PKG-INFO
new file mode 100644 (file)
index 0000000..2fab953
--- /dev/null
@@ -0,0 +1,35 @@
+Metadata-Version: 1.0
+Name: psycopg2
+Version: 2.0.5.1
+Summary: Python-PostgreSQL Database Adapter
+Home-page: http://initd.org/tracker/psycopg
+Author: Federico Di Gregorio
+Author-email: fog@initd.org
+License: GPL with exceptions or ZPL
+Download-URL: http://initd.org/pub/software/psycopg2
+Description: psycopg is a PostgreSQL database adapter for the Python programming
+        language. This is version 2, a complete rewrite of the original code to
+        provide new-style classes for connection and cursor objects and other sweet
+        candies. Like the original, psycopg 2 was written with the aim of being
+        very small and fast, and stable as a rock.
+        
+        psycopg is different from the other database adapter because it was
+        designed for heavily multi-threaded applications that create and destroy
+        lots of cursors and make a conspicuous number of concurrent INSERTs or
+        UPDATEs. psycopg 2 also provide full asycronous operations for the really
+        brave programmer.
+        
+Platform: any
+Classifier: Development Status :: 4 - Beta
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: GNU General Public License (GPL)
+Classifier: License :: OSI Approved :: Zope Public License
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: C
+Classifier: Programming Language :: SQL
+Classifier: Topic :: Database
+Classifier: Topic :: Database :: Front-Ends
+Classifier: Topic :: Software Development
+Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Classifier: Operating System :: Microsoft :: Windows
+Classifier: Operating System :: Unix
diff --git a/psycopg2/README b/psycopg2/README
new file mode 100644 (file)
index 0000000..4e4a0e9
--- /dev/null
@@ -0,0 +1,39 @@
+psycopg - Python-PostgreSQL Database Adapter
+********************************************
+
+psycopg is a PostgreSQL database adapter for the Python programming
+language. This is version 2, a complete rewrite of the original code to
+provide new-style classes for connection and cursor objects and other
+sweet candies. Like the original, psycopg 2 was written with the aim of
+being very small and fast, and stable as a rock.
+
+psycopg is different from the other database adapter because it was
+designed for heavily multi-threaded applications that create and destroy
+lots of cursors and make a conspicuous number of concurrent INSERTs or
+UPDATEs. psycopg 2 also provide full asycronous operations for the really
+brave programmer.
+
+There are confirmed reports of psycopg 1.x compiling and running on Linux
+and FreeBSD on i386, Solaris, MacOS X and win32 architectures. psycopg 2
+does not introduce build-wise incompatible changes so it should be able to
+compile on all architectures just as its predecessor did.
+
+Now go read the INSTALL file. More information about psycopg extensions to
+the DBAPI-2.0 is available in the files located in the doc/ direcory.
+
+psycopg is free software ("free as in freedom" but I like beer too.)
+Licensing information is available in the LICENSE file.
+
+
+Contributors
+------------
+
+A short list of contributors to psycopg2 follows (if you feel you belong
+to this list and you can't find yourself here just drop me a mail):
+
+ * Kudos to piro for all the documentation work.
+
+ * Peter Fein contributed a logging connection/cursor class that even if it
+   was not used directly heavily influenced the implementation currently in
+   psycopg2.extras.
+   
diff --git a/psycopg2/ZPsycopgDA/DA.py b/psycopg2/ZPsycopgDA/DA.py
new file mode 100644 (file)
index 0000000..2a0f4dd
--- /dev/null
@@ -0,0 +1,375 @@
+# ZPsycopgDA/DA.py - ZPsycopgDA Zope product: Database Connection
+#
+# Copyright (C) 2004 Federico Di Gregorio <fog@initd.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.
+#
+# Or, at your option this program (ZPsycopgDA) can be distributed under the
+# Zope Public License (ZPL) Version 1.0, as published on the Zope web site,
+# http://www.zope.org/Resources/ZPL.
+#
+# 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 LICENSE file for details.
+
+
+ALLOWED_PSYCOPG_VERSIONS = ('2.0.1', '2.0.2', '2.0.3', '2.0.4', '2.0.5')
+
+import sys
+import time
+import db
+import re
+
+import Acquisition
+import Shared.DC.ZRDB.Connection
+
+from db import DB
+from Globals import HTMLFile
+from ExtensionClass import Base
+from App.Dialogs import MessageDialog
+from DateTime import DateTime
+
+# Build Zope version in a float for later cheks
+import App
+zope_version = App.version_txt.getZopeVersion()
+zope_version = float("%s.%s" %(zope_version[:2]))
+
+# ImageFile is deprecated in Zope >= 2.9
+if zope_version < 2.9:
+     from ImageFile import ImageFile
+else:
+     from App.ImageFile import ImageFile 
+
+# import psycopg and functions/singletons needed for date/time conversions
+
+import psycopg2
+from psycopg2 import NUMBER, STRING, ROWID, DATETIME
+from psycopg2.extensions import INTEGER, LONGINTEGER, FLOAT, BOOLEAN, DATE
+from psycopg2.extensions import TIME, INTERVAL
+from psycopg2.extensions import new_type, register_type
+
+
+# add a new connection to a folder
+
+manage_addZPsycopgConnectionForm = HTMLFile('dtml/add',globals())
+
+def manage_addZPsycopgConnection(self, id, title, connection_string,
+                                 zdatetime=None, tilevel=2,
+                                 check=None, REQUEST=None):
+    """Add a DB connection to a folder."""
+    self._setObject(id, Connection(id, title, connection_string,
+                                   zdatetime, check, tilevel))
+    if REQUEST is not None: return self.manage_main(self, REQUEST)
+
+
+# the connection object
+
+class Connection(Shared.DC.ZRDB.Connection.Connection):
+    """ZPsycopg Connection."""
+    _isAnSQLConnection = 1
+    
+    id                = 'Psycopg2_database_connection' 
+    database_type     = 'Psycopg2'
+    meta_type = title = 'Z Psycopg 2 Database Connection'
+    icon              = 'misc_/conn'
+
+    def __init__(self, id, title, connection_string,
+                 zdatetime, check=None, tilevel=2, encoding=''):
+        self.zdatetime = zdatetime
+        self.id = str(id)
+        self.edit(title, connection_string, zdatetime,
+                  check=check, tilevel=tilevel, encoding=encoding)
+        
+    def factory(self):
+        return DB
+
+    ## connection parameters editing ##
+    
+    def edit(self, title, connection_string,
+             zdatetime, check=None, tilevel=2, encoding=''):
+        self.title = title
+        self.connection_string = connection_string
+        self.zdatetime = zdatetime
+        self.tilevel = tilevel
+        self.encoding = encoding
+
+        self.set_type_casts()
+        
+        if check: self.connect(self.connection_string)
+
+    manage_properties = HTMLFile('dtml/edit', globals())
+
+    def manage_edit(self, title, connection_string,
+                    zdatetime=None, check=None, tilevel=2, encoding='UTF-8',
+                    REQUEST=None):
+        """Edit the DB connection."""
+        self.edit(title, connection_string, zdatetime,
+                  check=check, tilevel=tilevel, encoding=encoding)
+        if REQUEST is not None:
+            msg = "Connection edited."
+            return self.manage_main(self,REQUEST,manage_tabs_message=msg)
+
+    def connect(self, s):
+        try:
+            self._v_database_connection.close()
+        except:
+            pass
+
+        # check psycopg version and raise exception if does not match
+        if psycopg2.__version__[:5] not in ALLOWED_PSYCOPG_VERSIONS:
+            raise ImportError("psycopg version mismatch (imported %s)" %
+                              psycopg2.__version__)
+
+        self.set_type_casts()
+        self._v_connected = ''
+        dbf = self.factory()
+        
+        # TODO: let the psycopg exception propagate, or not?
+        self._v_database_connection = dbf(
+            self.connection_string, self.tilevel, self.encoding)
+        self._v_database_connection.open()
+        self._v_connected = DateTime()
+
+        return self
+
+    def set_type_casts(self):
+        # note that in both cases order *is* important
+        if self.zdatetime:
+            # use zope internal datetime routines
+            register_type(ZDATETIME)
+            register_type(ZDATE)
+            register_type(ZTIME)
+        else:
+            # use the standard
+            register_type(DATETIME)
+            register_type(DATE)
+            register_type(TIME)
+
+    ## browsing and table/column management ##
+
+    manage_options = Shared.DC.ZRDB.Connection.Connection.manage_options
+    # + (
+    #    {'label': 'Browse', 'action':'manage_browse'},)
+
+    #manage_tables = HTMLFile('dtml/tables', globals())
+    #manage_browse = HTMLFile('dtml/browse', globals())
+
+    info = None
+    
+    def table_info(self):
+        return self._v_database_connection.table_info()
+
+
+    def __getitem__(self, name):
+        if name == 'tableNamed':
+            if not hasattr(self, '_v_tables'): self.tpValues()
+            return self._v_tables.__of__(self)
+        raise KeyError, name
+
+    def tpValues(self):
+        res = []
+        conn = self._v_database_connection
+        for d in conn.tables(rdb=0):
+            try:
+                name = d['TABLE_NAME']
+                b = TableBrowser()
+                b.__name__ = name
+                b._d = d
+                b._c = c
+                try:
+                    b.icon = table_icons[d['TABLE_TYPE']]
+                except:
+                    pass
+                r.append(b)
+            except:
+                pass
+        return res
+
+
+## database connection registration data ##
+
+classes = (Connection,)
+
+meta_types = ({'name':'Z Psycopg 2 Database Connection',
+               'action':'manage_addZPsycopgConnectionForm'},)
+
+folder_methods = {
+    'manage_addZPsycopgConnection': manage_addZPsycopgConnection,
+    'manage_addZPsycopgConnectionForm': manage_addZPsycopgConnectionForm}
+
+__ac_permissions__ = (
+    ('Add Z Psycopg Database Connections',
+     ('manage_addZPsycopgConnectionForm', 'manage_addZPsycopgConnection')),)
+
+# add icons
+
+misc_={'conn': ImageFile('Shared/DC/ZRDB/www/DBAdapterFolder_icon.gif')}
+
+for icon in ('table', 'view', 'stable', 'what', 'field', 'text', 'bin',
+             'int', 'float', 'date', 'time', 'datetime'):
+    misc_[icon] = ImageFile('icons/%s.gif' % icon, globals())
+
+
+## zope-specific psycopg typecasters ##
+
+# convert an ISO timestamp string from postgres to a Zope DateTime object
+def _cast_DateTime(iso, curs):
+    if iso:
+        return DateTime(re.split("GMT\+?|GMT-?", iso)[0])
+       
+    # this will split us into [date, time, GMT/AM/PM(if there)]
+    #    dt = str.split(' ')
+    #    if len(dt) > 1:
+    #        # we now should split out any timezone info
+    #        dt[1] = dt[1].split('-')[0]
+    #        dt[1] = dt[1].split('+')[0]
+    #        return DateTime(' '.join(dt[:2]))
+    #    else:
+    #        return DateTime(dt[0])
+
+# convert an ISO date string from postgres to a Zope DateTime object
+def _cast_Date(iso, curs):
+    if iso:
+        return DateTime(iso)
+
+# Convert a time string from postgres to a Zope DateTime object.
+# NOTE: we set the day as today before feeding to DateTime so
+# that it has the same DST settings.
+def _cast_Time(iso, curs):
+    if iso:
+        return DateTime(time.strftime('%Y-%m-%d %H:%M:%S',
+                                      time.localtime(time.time())[:3]+
+                                      time.strptime(iso[:8], "%H:%M:%S")[3:]))
+
+# NOTE: we don't cast intervals anymore because they are passed
+# untouched to Zope.
+def _cast_Interval(iso, curs):
+    return iso
+
+ZDATETIME = new_type((1184, 1114), "ZDATETIME", _cast_DateTime)
+ZINTERVAL = new_type((1186,), "ZINTERVAL", _cast_Interval)
+ZDATE = new_type((1082,), "ZDATE", _cast_Date)
+ZTIME = new_type((1083,), "ZTIME", _cast_Time)
+
+
+## table browsing helpers ##
+
+class TableBrowserCollection(Acquisition.Implicit):
+    pass
+
+class Browser(Base):
+    def __getattr__(self, name):
+        try:
+            return self._d[name]
+        except KeyError:
+            raise AttributeError, name
+
+class values:
+    def len(self):
+        return 1
+
+    def __getitem__(self, i):
+        try:
+            return self._d[i]
+        except AttributeError:
+            pass
+        self._d = self._f()
+        return self._d[i]
+
+class TableBrowser(Browser, Acquisition.Implicit):
+    icon = 'what'
+    Description = check = ''
+    info = HTMLFile('table_info', globals())
+    menu = HTMLFile('table_menu', globals())
+
+    def tpValues(self):
+        v = values()
+        v._f = self.tpValues_
+        return v
+
+    def tpValues_(self):
+        r=[]
+        tname=self.__name__
+        for d in self._c.columns(tname):
+            b=ColumnBrowser()
+            b._d=d
+            try: b.icon=field_icons[d['Type']]
+            except: pass
+            b.TABLE_NAME=tname
+            r.append(b)
+        return r
+            
+    def tpId(self): return self._d['TABLE_NAME']
+    def tpURL(self): return "Table/%s" % self._d['TABLE_NAME']
+    def Name(self): return self._d['TABLE_NAME']
+    def Type(self): return self._d['TABLE_TYPE']
+
+    manage_designInput=HTMLFile('designInput',globals())
+    def manage_buildInput(self, id, source, default, REQUEST=None):
+        "Create a database method for an input form"
+        args=[]
+        values=[]
+        names=[]
+        columns=self._columns
+        for i in range(len(source)):
+            s=source[i]
+            if s=='Null': continue
+            c=columns[i]
+            d=default[i]
+            t=c['Type']
+            n=c['Name']
+            names.append(n)
+            if s=='Argument':
+                values.append("<dtml-sqlvar %s type=%s>'" %
+                              (n, vartype(t)))
+                a='%s%s' % (n, boboType(t))
+                if d: a="%s=%s" % (a,d)
+                args.append(a)
+            elif s=='Property':
+                values.append("<dtml-sqlvar %s type=%s>'" %
+                              (n, vartype(t)))
+            else:
+                if isStringType(t):
+                    if find(d,"\'") >= 0: d=join(split(d,"\'"),"''")
+                    values.append("'%s'" % d)
+                elif d:
+                    values.append(str(d))
+                else:
+                    raise ValueError, (
+                        'no default was given for <em>%s</em>' % n)
+
+class ColumnBrowser(Browser):
+    icon='field'
+
+    def check(self):
+        return ('\t<input type=checkbox name="%s.%s">' %
+                (self.TABLE_NAME, self._d['Name']))
+    def tpId(self): return self._d['Name']
+    def tpURL(self): return "Column/%s" % self._d['Name']
+    def Description(self):
+        d=self._d
+        if d['Scale']:
+            return " %(Type)s(%(Precision)s,%(Scale)s) %(Nullable)s" % d
+        else:
+            return " %(Type)s(%(Precision)s) %(Nullable)s" % d
+
+table_icons={
+    'TABLE': 'table',
+    'VIEW':'view',
+    'SYSTEM_TABLE': 'stable',
+    }
+
+field_icons={
+    NUMBER.name: 'i',
+    STRING.name: 'text',
+    DATETIME.name: 'date',
+    INTEGER.name: 'int',
+    FLOAT.name: 'float',
+    BOOLEAN.name: 'bin',
+    ROWID.name: 'int'
+    }
diff --git a/psycopg2/ZPsycopgDA/__init__.py b/psycopg2/ZPsycopgDA/__init__.py
new file mode 100644 (file)
index 0000000..0af0ceb
--- /dev/null
@@ -0,0 +1,31 @@
+# ZPsycopgDA/__init__.py - ZPsycopgDA Zope product
+#
+# Copyright (C) 2004 Federico Di Gregorio <fog@initd.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.
+#
+# Or, at your option this program (ZPsycopgDA) can be distributed under the
+# Zope Public License (ZPL) Version 1.0, as published on the Zope web site,
+# http://www.zope.org/Resources/ZPL.
+#
+# 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 LICENSE file for details.
+
+__doc__ = "ZPsycopg Database Adapter Registration." 
+__version__ = '2.0'
+
+import DA
+
+def initialize(context):
+    context.registerClass(
+        DA.Connection,
+        permission = 'Add Z Psycopg 2 Database Connections',
+        constructors = (DA.manage_addZPsycopgConnectionForm,
+                        DA.manage_addZPsycopgConnection),
+        icon = SOFTWARE_HOME + '/Shared/DC/ZRDB/www/DBAdapterFolder_icon.gif')
diff --git a/psycopg2/ZPsycopgDA/db.py b/psycopg2/ZPsycopgDA/db.py
new file mode 100644 (file)
index 0000000..9a0b4b0
--- /dev/null
@@ -0,0 +1,206 @@
+# ZPsycopgDA/db.py - query execution
+#
+# Copyright (C) 2004 Federico Di Gregorio <fog@initd.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.
+#
+# Or, at your option this program (ZPsycopgDA) can be distributed under the
+# Zope Public License (ZPL) Version 1.0, as published on the Zope web site,
+# http://www.zope.org/Resources/ZPL.
+#
+# 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 LICENSE file for details.
+
+from Shared.DC.ZRDB.TM import TM
+from Shared.DC.ZRDB import dbi_db
+
+from ZODB.POSException import ConflictError
+
+import site
+import pool
+
+import psycopg2
+from psycopg2.extensions import INTEGER, LONGINTEGER, FLOAT, BOOLEAN, DATE, TIME
+from psycopg2 import NUMBER, STRING, ROWID, DATETIME 
+
+
+# the DB object, managing all the real query work
+
+class DB(TM, dbi_db.DB):
+    
+    _p_oid = _p_changed = _registered = None
+
+    def __init__(self, dsn, tilevel, enc='utf-8'):
+        self.dsn = dsn
+        self.tilevel = tilevel
+        self.encoding = enc
+        self.failures = 0
+        self.calls = 0
+        self.make_mappings()
+
+    def getconn(self, create=True):
+        conn = pool.getconn(self.dsn)
+        conn.set_isolation_level(int(self.tilevel))
+        return conn
+
+    def putconn(self, close=False):
+        try:
+            conn = pool.getconn(self.dsn, False)
+        except AttributeError:
+            pass
+        pool.putconn(self.dsn, conn, close)
+        
+    def getcursor(self):
+        conn = self.getconn()
+        return conn.cursor()
+
+    def _finish(self, *ignored):
+        try:
+            conn = self.getconn(False)
+            conn.commit()
+            self.putconn()
+        except AttributeError:
+            pass
+            
+    def _abort(self, *ignored):
+        try:
+            conn = self.getconn(False)
+            conn.rollback()
+            self.putconn()
+        except AttributeError:
+            pass
+
+    def open(self):
+        # this will create a new pool for our DSN if not already existing,
+        # then get and immediately release a connection
+        self.getconn()
+        self.putconn()
+        
+    def close(self):
+        # FIXME: if this connection is closed we flush all the pool associated
+        # with the current DSN; does this makes sense?
+        pool.flushpool(self.dsn)
+
+    def sortKey(self):
+        return 1
+
+    def make_mappings(self):
+        """Generate the mappings used later by self.convert_description()."""
+        self.type_mappings = {}
+       for t, s in [(INTEGER,'i'), (LONGINTEGER, 'i'), (NUMBER, 'n'),  
+                    (BOOLEAN,'n'), (ROWID, 'i'),
+                    (DATETIME, 'd'), (DATE, 'd'), (TIME, 'd')]:
+            for v in t.values:
+               self.type_mappings[v] = (t, s)
+
+    def convert_description(self, desc, use_psycopg_types=False):
+        """Convert DBAPI-2.0 description field to Zope format."""
+        items = []
+        for name, typ, width, ds, p, scale, null_ok in desc:
+           m = self.type_mappings.get(typ, (STRING, 's'))
+            items.append({
+                'name': name,
+                'type': use_psycopg_types and m[0] or m[1],
+                'width': width,
+                'precision': p,
+                'scale': scale,
+                'null': null_ok,
+                })
+        return items
+
+    ## tables and rows ##
+
+    def tables(self, rdb=0, _care=('TABLE', 'VIEW')):
+        self._register()
+        c = self.getcursor()
+        c.execute(
+            "SELECT t.tablename AS NAME, 'TABLE' AS TYPE "
+            "  FROM pg_tables t WHERE tableowner <> 'postgres' "
+            "UNION SELECT v.viewname AS NAME, 'VIEW' AS TYPE "
+            "  FROM pg_views v WHERE viewowner <> 'postgres' "
+            "UNION SELECT t.tablename AS NAME, 'SYSTEM_TABLE\' AS TYPE "
+            "  FROM pg_tables t WHERE tableowner = 'postgres' "
+            "UNION SELECT v.viewname AS NAME, 'SYSTEM_TABLE' AS TYPE "
+            "FROM pg_views v WHERE viewowner = 'postgres'")
+        res = []
+        for name, typ in c.fetchall():
+            if typ in _care:
+                res.append({'TABLE_NAME': name, 'TABLE_TYPE': typ})
+        self.putconn()
+        return res
+
+    def columns(self, table_name):
+        self._register()
+        c = self.getcursor()
+        try:
+            r = c.execute('SELECT * FROM "%s" WHERE 1=0' % table_name)
+        except:
+            return ()
+        self.putconn()
+        return self.convert_description(c.description, True)
+    
+    ## query execution ##
+
+    def query(self, query_string, max_rows=None, query_data=None):
+        self._register()
+        self.calls = self.calls+1
+
+        desc = ()
+        res = []
+        nselects = 0
+
+        c = self.getcursor()
+
+        try:
+            for qs in [x for x in query_string.split('\0') if x]:
+                if type(qs) == unicode:
+                    if self.encoding:
+                        qs = qs.encode(self.encoding)
+                try:
+                    if query_data:
+                        c.execute(qs, query_data)
+                    else:
+                        c.execute(qs)
+                except psycopg2.OperationalError, e:
+                    try:
+                        self.close()
+                    except:
+                        pass
+                    self.open()
+                    try:
+                        if   query_data:
+                            c.execute(qs, query_data)
+                        else:
+                            c.execute(qs)
+                    except (psycopg2.ProgrammingError,
+                            psycopg2.IntegrityError), e:
+                        if e.args[0].find("concurrent update") > -1:
+                            raise ConflictError
+                        raise e
+                except (psycopg2.ProgrammingError, psycopg2.IntegrityError), e:
+                    if e.args[0].find("concurrent update") > -1:
+                        raise ConflictError
+                    raise e
+                if c.description is not None:
+                    nselects += 1
+                    if c.description != desc and nselects > 1:
+                        raise psycopg2.ProgrammingError(
+                            'multiple selects in single query not allowed')
+                    if max_rows:
+                        res = c.fetchmany(max_rows)
+                    else:
+                        res = c.fetchall()
+                    desc = c.description
+            self.failures = 0
+
+        except StandardError, err:
+            self._abort()
+            raise err
+        
+        return self.convert_description(desc), res
diff --git a/psycopg2/ZPsycopgDA/dtml/add.dtml b/psycopg2/ZPsycopgDA/dtml/add.dtml
new file mode 100644 (file)
index 0000000..c718ded
--- /dev/null
@@ -0,0 +1,96 @@
+<dtml-var manage_page_header>
+
+<dtml-var "manage_form_title(this(), _,
+           form_title='Add Z Psycopg 2 Database Connection',
+           help_product='ZPsycopgDA',
+           help_topic='ZPsycopgDA-Method-Add.stx'
+           )">
+
+<p class="form-help">
+A Zope Psycopg 2 Database Connection is used to connect and execute
+queries on a PostgreSQL database.
+</p>
+
+<p class="form-help"> 
+In the form below <em>Connection String</em> (also called the Data Source Name
+or DSN for short) is a string... (TODO: finish docs)
+</p>
+
+<form action="manage_addZPsycopgConnection" method="POST">
+<table cellspacing="0" cellpadding="2" border="0">
+  <tr>
+    <td align="left" valign="top">
+    <div class="form-label">
+    Id
+    </div>
+    </td>
+    <td align="left" valign="top">
+    <input type="text" name="id" size="40"
+           value="Psycopg2_database_connection" />
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top">
+    <div class="form-optional">
+    Title
+    </div>
+    </td>
+    <td align="left" valign="top">
+    <input type="text" name="title" size="40"
+        value="Z Psycopg 2 Database Connection"/>
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top">
+    <div class="form-label">
+    Connection string
+    </div>
+    </td>
+    <td align="left" valign="top">
+    <input type="text" name="connection_string" size="40" value="" />
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top">
+    <div class="form-label">
+    Connect immediately
+    </div>
+    </td>
+    <td align="left" valign="top">
+    <input type="checkbox" name="check" value="YES" checked="YES" />
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top">
+    <div class="form-label">
+    Use Zope's internal DateTime
+    </div>
+    </td>
+    <td align="left" valign="top">
+    <input type="checkbox" name="zdatetime" value="YES" checked="YES" />
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top">
+    <div class="form-label">
+    Transaction isolation level
+    </div>
+    </td>
+    <td align="left" valign="top">
+      <select name="tilevel:int">
+        <option value="1">Read committed</option>
+        <option value="2" selected="YES">Serializable</option>
+      </select>
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top" colspan="2">
+    <div class="form-element">
+    <input class="form-element" type="submit" name="submit" value=" Add " />
+    </div>
+    </td>
+  </tr>
+</table>
+</form>
+
+<dtml-var manage_page_footer>
diff --git a/psycopg2/ZPsycopgDA/dtml/browse.dtml b/psycopg2/ZPsycopgDA/dtml/browse.dtml
new file mode 100644 (file)
index 0000000..deffd0a
--- /dev/null
@@ -0,0 +1,11 @@
+<html>
+  <head><title><dtml-var title_or_id >tables</title></head>
+  <body bgcolor="#FFFFFF" link="#000099" vlink="#555555" alink="#77003B">
+    <dtml-var manage_tabs>
+    <dtml-tree header="info">
+      <IMG SRC="<dtml-var SCRIPT_NAME >/misc_/ZPsycopgDA/<dtml-var icon>"
+       ALT="<dtml-var Type>" BORDER="0">
+      <dtml-var Name><dtml-var Description>
+    </dtml-tree>
+  </body>
+</html>
diff --git a/psycopg2/ZPsycopgDA/dtml/edit.dtml b/psycopg2/ZPsycopgDA/dtml/edit.dtml
new file mode 100644 (file)
index 0000000..7cb371f
--- /dev/null
@@ -0,0 +1,67 @@
+<dtml-var manage_page_header>
+<dtml-var manage_tabs>
+
+<form action="manage_edit" method="POST">
+<table cellspacing="0" cellpadding="2" border="0">
+  <tr>
+    <td align="left" valign="top">
+    <div class="form-optional">
+    Title
+    </div>
+    </td>
+    <td align="left" valign="top">
+    <input type="text" name="title" size="40"
+        value="&dtml-title;"/>
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top">
+    <div class="form-label">
+    Connection string
+    </div>
+    </td>
+    <td align="left" valign="top">
+    <input type="text" name="connection_string" size="40"
+           value="&dtml-connection_string;" />
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top">
+    <div class="form-label">
+    Use Zope's internal DateTime
+    </div>
+    </td>
+    <td align="left" valign="top">
+    <input type="checkbox" name="zdatetime" value="YES"
+      <dtml-if expr="zdatetime">checked="YES"</dtml-if> />
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top">
+    <div class="form-label">
+    Transaction isolation level
+    </div>
+    </td>
+    <td align="left" valign="top">
+      <select name="tilevel:int">
+        <option value="1"
+                <dtml-if expr="tilevel==1">selected="YES"</dtml-if>>
+        Read committed</option>
+        <option value="2"
+                <dtml-if expr="tilevel==2">selected="YES"</dtml-if>>
+        Serializable</option>
+      </select>
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top" colspan="2">
+    <div class="form-element">
+    <input class="form-element" type="submit" name="submit"
+     value=" Save Changes " />
+    </div>
+    </td>
+  </tr>
+</table>
+</form>
+
+<dtml-var manage_page_footer>
diff --git a/psycopg2/ZPsycopgDA/dtml/table_info.dtml b/psycopg2/ZPsycopgDA/dtml/table_info.dtml
new file mode 100644 (file)
index 0000000..639c23f
--- /dev/null
@@ -0,0 +1,7 @@
+<dtml-var standard_html_header>
+
+<dtml-var TABLE_TYPE><dtml-if TABLE_OWNER>
+ owned by <dtml-var TABLE_OWNER></dtml-if>
+<dtml-if REMARKS><br><dtml-var REMARKS></dtml-if>
+
+<dtml-var standard_html_footer>
diff --git a/psycopg2/ZPsycopgDA/icons/bin.gif b/psycopg2/ZPsycopgDA/icons/bin.gif
new file mode 100644 (file)
index 0000000..e469126
Binary files /dev/null and b/psycopg2/ZPsycopgDA/icons/bin.gif differ
diff --git a/psycopg2/ZPsycopgDA/icons/date.gif b/psycopg2/ZPsycopgDA/icons/date.gif
new file mode 100644 (file)
index 0000000..0d88a57
Binary files /dev/null and b/psycopg2/ZPsycopgDA/icons/date.gif differ
diff --git a/psycopg2/ZPsycopgDA/icons/datetime.gif b/psycopg2/ZPsycopgDA/icons/datetime.gif
new file mode 100644 (file)
index 0000000..faa540b
Binary files /dev/null and b/psycopg2/ZPsycopgDA/icons/datetime.gif differ
diff --git a/psycopg2/ZPsycopgDA/icons/field.gif b/psycopg2/ZPsycopgDA/icons/field.gif
new file mode 100644 (file)
index 0000000..9bf8692
Binary files /dev/null and b/psycopg2/ZPsycopgDA/icons/field.gif differ
diff --git a/psycopg2/ZPsycopgDA/icons/float.gif b/psycopg2/ZPsycopgDA/icons/float.gif
new file mode 100644 (file)
index 0000000..dd42729
Binary files /dev/null and b/psycopg2/ZPsycopgDA/icons/float.gif differ
diff --git a/psycopg2/ZPsycopgDA/icons/int.gif b/psycopg2/ZPsycopgDA/icons/int.gif
new file mode 100644 (file)
index 0000000..ef2c5e3
Binary files /dev/null and b/psycopg2/ZPsycopgDA/icons/int.gif differ
diff --git a/psycopg2/ZPsycopgDA/icons/stable.gif b/psycopg2/ZPsycopgDA/icons/stable.gif
new file mode 100644 (file)
index 0000000..acdd37d
Binary files /dev/null and b/psycopg2/ZPsycopgDA/icons/stable.gif differ
diff --git a/psycopg2/ZPsycopgDA/icons/table.gif b/psycopg2/ZPsycopgDA/icons/table.gif
new file mode 100644 (file)
index 0000000..cce83be
Binary files /dev/null and b/psycopg2/ZPsycopgDA/icons/table.gif differ
diff --git a/psycopg2/ZPsycopgDA/icons/text.gif b/psycopg2/ZPsycopgDA/icons/text.gif
new file mode 100644 (file)
index 0000000..a2e5aab
Binary files /dev/null and b/psycopg2/ZPsycopgDA/icons/text.gif differ
diff --git a/psycopg2/ZPsycopgDA/icons/time.gif b/psycopg2/ZPsycopgDA/icons/time.gif
new file mode 100644 (file)
index 0000000..6d08915
Binary files /dev/null and b/psycopg2/ZPsycopgDA/icons/time.gif differ
diff --git a/psycopg2/ZPsycopgDA/icons/view.gif b/psycopg2/ZPsycopgDA/icons/view.gif
new file mode 100644 (file)
index 0000000..71b30de
Binary files /dev/null and b/psycopg2/ZPsycopgDA/icons/view.gif differ
diff --git a/psycopg2/ZPsycopgDA/icons/what.gif b/psycopg2/ZPsycopgDA/icons/what.gif
new file mode 100644 (file)
index 0000000..8b5516e
Binary files /dev/null and b/psycopg2/ZPsycopgDA/icons/what.gif differ
diff --git a/psycopg2/ZPsycopgDA/pool.py b/psycopg2/ZPsycopgDA/pool.py
new file mode 100644 (file)
index 0000000..05af0a5
--- /dev/null
@@ -0,0 +1,51 @@
+# ZPsycopgDA/pool.py - ZPsycopgDA Zope product: connection pooling
+#
+# Copyright (C) 2004 Federico Di Gregorio <fog@initd.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.
+#
+# Or, at your option this program (ZPsycopgDA) can be distributed under the
+# Zope Public License (ZPL) Version 1.0, as published on the Zope web site,
+# http://www.zope.org/Resources/ZPL.
+#
+# 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 LICENSE file for details.
+
+# all the connections are held in a pool of pools, directly accessible by the
+# ZPsycopgDA code in db.py
+
+import threading
+import psycopg2.pool
+
+_connections_pool = {}
+_connections_lock = threading.Lock()
+
+def getpool(dsn, create=True):
+    _connections_lock.acquire()
+    try:
+        if not _connections_pool.has_key(dsn) and create:
+            _connections_pool[dsn] = \
+                psycopg2.pool.PersistentConnectionPool(4, 200, dsn)
+    finally:
+        _connections_lock.release()
+    return _connections_pool[dsn]
+
+def flushpool(dsn):
+    _connections_lock.acquire()
+    try:
+        _connections_pool[dsn].closeall()
+        del _connections_pool[dsn]
+    finally:
+        _connections_lock.release()
+        
+def getconn(dsn, create=True):
+    return getpool(dsn, create=create).getconn()
+
+def putconn(dsn, conn, close=False):
+    getpool(dsn).putconn(conn, close=close)
diff --git a/psycopg2/debian/changelog b/psycopg2/debian/changelog
new file mode 100644 (file)
index 0000000..44d83dc
--- /dev/null
@@ -0,0 +1,12 @@
+psycopg2 (1.99.12.1-1) experimental; urgency=low
+
+  * Adapted from patches sent by W. Borgert.
+  * Renamed source package to psycopg2.
+
+ -- Federico Di Gregorio <fog@debian.org>  Fri,  4 Mar 2005 13:11:43 +0100
+
+psycopg2 (1.99.11-0.1) unstable; urgency=low
+  
+  * Experimental package.
+
+ -- W. Borgert <debacle@debian.org>  Sun, 09 Jan 2005 10:14:09 +0000
diff --git a/psycopg2/debian/control b/psycopg2/debian/control
new file mode 100644 (file)
index 0000000..9c63676
--- /dev/null
@@ -0,0 +1,51 @@
+Source: psycopg2
+Section: python
+Priority: optional
+Build-depends: postgresql-dev, debhelper (>> 3), python2.3-dev, cdbs
+Maintainer: Federico Di Gregorio <fog@debian.org>
+Standards-Version: 3.6.1.1
+
+Package: python-psycopg2
+Architecture: any
+Section: python
+Depends: python (>= 2.3), python (<< 2.4), python2.3-psycopg2
+Description: Python module for PostgreSQL [dummy package]
+ psycopg is a PostgreSQL database adapter for the Python programming
+ language. It was written from scratch with the aim of being very small
+ and fast, and stable as a rock. The main advantages of psycopg are that
+ it supports the full Python DBAPI-2.0 and being thread safe at level 2.
+ .
+ psycopg 2 is the next generation psycopg, implementing a much better
+ type system and even more DBAPI extensions:
+ .
+ * support for Python datetime and Decimal types;
+ * complete implementation of adapt() from PEP 246 to convert Python
+   types to PostgreSQL ones;
+ * COPY FROM/COPY TO support;
+ * inehritable connection and cursor objects and support for connection
+   and cursor factories;
+ * automatic encoding conversion and support for unicode queries.
+ .
+ This dummy package just depends on the right, default version of Python 
+ and psycopg 2.
+
+Package: python2.3-psycopg2
+Architecture: any
+Section: python
+Depends: ${shlibs:Depends}, python2.3
+Description: Python 2.3 module for PostgreSQL
+ psycopg is a PostgreSQL database adapter for the Python programming
+ language. It was written from scratch with the aim of being very small
+ and fast, and stable as a rock. The main advantages of psycopg are that
+ it supports the full Python DBAPI-2.0 and being thread safe at level 2.
+ .
+ psycopg 2 is the next generation psycopg, implementing a much better
+ type system and even more DBAPI extensions:
+ .
+ * support for Python datetime and Decimal types;
+ * complete implementation of adapt() from PEP 246 to convert Python
+   types to PostgreSQL ones;
+ * COPY FROM/COPY TO support;
+ * inehritable connection and cursor objects and support for connection
+   and cursor factories;
+ * automatic encoding conversion and support for unicode queries.
diff --git a/psycopg2/debian/copyright b/psycopg2/debian/copyright
new file mode 100644 (file)
index 0000000..c631915
--- /dev/null
@@ -0,0 +1,10 @@
+psycopg 2 can be downloaded from:
+
+    http://initd.org/pub/software/psycopg/ALPHA/
+
+Copyright (c) 2001-2005 Federico Di Gregorio <fog@debian.org>
+
+This program is distributed under the GNU GPL.
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License can be found in '/usr/share/common-licenses/GPL'.
diff --git a/psycopg2/debian/rules b/psycopg2/debian/rules
new file mode 100755 (executable)
index 0000000..98ad46f
--- /dev/null
@@ -0,0 +1,4 @@
+#!/usr/bin/make -f
+
+include /usr/share/cdbs/1/rules/debhelper.mk
+include /usr/share/cdbs/1/class/python-distutils.mk
diff --git a/psycopg2/doc/ChangeLog-1.x b/psycopg2/doc/ChangeLog-1.x
new file mode 100644 (file)
index 0000000..dadfc1b
--- /dev/null
@@ -0,0 +1,1744 @@
+2003-07-26  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.1.7.
+
+       * ZPsycopgDA/db.py: added _cursor method that checks for self.db
+       before returning a new cursor. Should fix problem reported with
+       Zope 2.7.  
+
+2003-07-23  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c: applied notify and fileno patch from Vsevolod Lobko.
+
+2003-07-20  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c (_mogrify_dict): applied (slightly modofied) patch from
+       Tobias Sargeant: now .execute() accept not only dictionaries but
+       every type that has a __getitem__ method.
+
+2003-07-13  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.1.6.
+
+       * cursor.c (psyco_curs_scroll): added scroll method, patch from
+       Jason D.Hildebrand.
+
+       * typemod.c (new_psyco_quotedstringobject): discard NUL characters
+       (\0) in quoted strings (fix problem reported by Richard Taylor.)
+
+2003-07-10  Federico Di Gregorio  <fog@debian.org>
+
+       * Added python-taylor.txt in doc directory: very nice introduction
+       to DBAPI programming by Richard Taylor.
+
+2003-07-09  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c (_psyco_curs_execute): another MT problem exposed and
+       fixed by Sebastien Bigaret (self->keeper->status still LOCKED
+       after a fatal error during PQexec call.)
+
+2003-06-23  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.1.5.1.
+
+       * ZPsycopgDA/db.py (DB.query): stupid error making ZPsycopgDA
+       unusable fixed (else->except).
+
+2003-06-22  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.1.5 candidate.
+
+       * cursor.c (psyco_curs_copy_to): now any object with the write
+       method can be used as a copy_to target.  
+
+2003-06-20  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c (psyco_curs_copy_from): applied patch to allow copy_to
+       from any object having a "readline" attribute (patch from Lex
+       Berezhny.) (psyco_curs_copy_from): another patch from Lex to make
+       psycopg raise an error on COPY FROM errors. 
+
+       * ZPsycopgDA/db.py (DB.query): if a query raise an exception,
+       first self._abort() is called to rollback current
+       "sub-transaction".  this is a backward-compatible change for
+       people that think continuing to work in the same zope transaction
+       after an exception is a Good Thing (TM).
+
+       * finally updated check_types.expected. checked by hand the
+       conversions work the right way.
+
+       * doc/examples/work.py: fixed example. note that it is a long time
+       (at least two releases) that psycopg does not END a transaction
+       initiated explicitly by the user while in autocommit mode.
+
+2003-06-19  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c (_mogrify_dict): fixed dictionary mogrification (patch
+       by Vsevolod Lobko.) (_psyco_curs_execute): fixed keeper status
+       trashing problem by letting only one thread at time play with
+       keeper->status (as suggested by Sebastien Bigaret.)
+
+2003-05-07  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.1.4.
+
+       * cursor.c: Added "statusmessage" attribute that holds the backend
+       message (modified lots of functions, look for self->status).
+
+2003-05-06  Federico Di Gregorio  <fog@debian.org>
+
+       * typemod.c (new_psyco_datetimeobject): moved Py_INCREF into
+       XXX_FromMx functions, to fix memory leak reported by Jim Crumpler.
+
+2003-04-11  Federico Di Gregorio  <fog@debian.org>
+
+       * module.h (PyObject_TypeCheck): fixed leak in python 2.1
+       (Guido van Rossum).
+
+2003-04-08  Federico Di Gregorio  <fog@debian.org>
+
+       * buildtypes.py (basic_types): removed LXTEXT (never user, does
+       not exists anymore.)
+
+2003-04-07  Federico Di Gregorio  <fog@debian.org>
+
+       * setup.py: added very lame setup.py script.
+
+2003-04-02  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.3. 
+
+       * psycopg.spec: Added (but modified) spec file by William
+       K. Volkman (again, this change was lost somewhere in time...)
+
+2003-04-01  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c (_psyco_curs_execute): psycopg was reporting everything
+       as IntegrityError; reported and fix suggested by Amin Abdulghani.
+
+2003-03-21  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c (psyco_curs_fetchone): debug statements sometimes made
+       psycopg segfault: fixed by a patch by Ken Simpson.
+
+2003-03-18  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c (alloc_keeper): patch from Dieter Maurer to unlock GIL
+       whaile calling PQconnectdb().
+
+2003-03-05  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.1.2.
+
+       * Applied cygwin patch from Hajime Nakagami.
+
+2003-02-25  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.1.2pre1.
+       
+       * cursor.c: added .lastrowid attribute to cursors (lastoid is
+       deprecated and will be removed sometime in the future.)
+
+       * cursor.c (begin_pgconn): implemented various isolation levels
+       (also, in abort_pgconn, commit_pgconn.)
+
+       * Added keyword parameters to psycopg.connect(): all take strings
+       (even port): database, host, port, user, password.
+       
+       * configure.in: fixed test for postgres version > 7.2.
+
+       * cursor.c (_psyco_curs_execute): removed if on pgerr in default
+       case (if we enter default pgerr can't be one of the cased ones.)
+       Also applied slightly modified patch from  William K. Volkman.
+
+2003-02-24  Federico Di Gregorio  <fog@debian.org>
+
+       * Merged in changes from 1.0.15.1 (see below for merged
+       ChangeLog.)
+
+2003-02-14  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.0.15.1.
+
+       * cursor.c (_mogrify_fmt): in some cases we where removing one
+       character too much from the format string, resulting in BIG BAD
+       BUG. <g> Fixed.
+
+2003-02-13  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.0.15. <g>
+       
+       * connection.c (_psyco_conn_close): now call dispose_pgconn on all
+       cursors, to make sure all phisical connections to the db are
+       closed (problem first reported by Amin Abdulghani.)
+
+       * DBAPI-2.0 fixed mainly due to Stuart Bishop:
+         - cursor.c (psyco_curs_setinputsizes): removed PARSEARGS, as
+           this method does nothing.
+         - cursor.c (psyco_curs_setoutputsize): .setoutputsize was
+           spelled .setoutputsizes! fixed. Also removed PARSEARGS, as this
+           method does nothing.
+
+2003-02-12  Federico Di Gregorio  <fog@debian.org>
+
+       * module.h (Dprintf): check on __APPLE__ to avoid variadic macros
+       on macos x (as reported by Stuart Bishop, btw, why gcc seems to
+       not support them on macos?)
+
+       * cursor.c (_mogrify_fmt): non-alphabetic characters are dropped
+       after the closing ")" until a real alphabetic, formatting one is
+       found. (Fix bug reported by Randall Randall.)
+
+2003-02-05  Federico Di Gregorio  <fog@debian.org>
+
+       * typeobj.c (psyco_INTERVAL_cast): patched again to take into
+       account leading zeroes.
+
+2003-02-02  Federico Di Gregorio  <fog@debian.org>
+
+       * Makefile.pre.in: applied patch from Albert Chin-A-Young to
+       define BLDSHARED.
+
+       * README: added explicit permission to link with OpenSSL.
+
+2003-01-30  Federico Di Gregorio  <fog@debian.org>
+
+       * config.h.in: applied patch from Albert Chin-A-Young to fix
+       asprintf prototype.
+
+2003-01-29  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c (_mogrify_seq): fixed little refcount leak, as
+       suggested by Yves Bastide.
+
+2003-01-24  Federico Di Gregorio  <fog@debian.org>
+
+       * Merged-in changes from 1.0.14.2 (emacs diff mode is great..)
+
+       * Release 1.0.14.2.
+
+       * ZPsycopgDA/db.py (DB.query): back to allowing up to 1000 db
+       errors before trying to reopen the connection by ourselves.
+       
+       * ZPsycopgDA/db.py: a false (None preferred, 0 allowed) max_rows
+       value now means "fetch all results".
+
+2003-01-22  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c (psyco_curs_fetchone): fixed little memory leak
+       reported by Dieter Maurer.
+
+2003-01-20  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/db.py (DB.tables/columns): added registration with
+       Zope's transaction machinery.
+
+       * Release 1.0.14.1.
+
+       * ZPsycopgDA/db.py: applied some fixes and cleanups by Dieter
+       Maurer (serialization problem were no more correctly detected!)
+
+       * Release 1.0.14.
+       
+       * Merged in 1.0.14.
+
+       * Import of 1.1.1 done.
+       
+       * Moved everything to cvs HEAD.
+
+2003-01-20  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/connectionAdd.dtml: fixed typo (thanks to Andrew
+       Veitch.)
+
+       * typeobj.c (psyco_INTERVAL_cast): applied patch from Karl Putland
+       to fix problems with fractional seconds.
+
+2002-12-03  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.0.14-pre2.
+
+       * module.h: added macro for PyObject_TypeCheck if python version <2.2.
+
+       * typeobj.c (psyco_DBAPITypeObject_coerce): added error message to
+       coercion errors.
+
+2002-12-02  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.0.14-pre1.
+
+       * ZPsycopgDA/db.py (DB.sortKey): added sortKey().
+       
+       * ZPsycopgDA/DA.py: applied a patch that was lost on hard disk
+       (sic), if you sent me a patch names psycopg-1.0.13.diff modifying
+       DA.py imports and want your name here, send me an email. :)
+       [btw, the patch fix the ImageFile import, getting it from Globals
+       as it is right.]
+
+       * typeobj.c (psyco_DBAPITypeObject_coerce): Fixed coerce segfault
+       by checking explicitly for all the allowed types.
+
+2002-11-25  Federico Di Gregorio  <fog@debian.org>
+
+       * doc/examples/*.py: added .rollback() to all exceptions before
+       deleteing the old table. 
+
+       * cursor.c: Apllied patch from John Goerzen (fix memory leak in
+       executemany).
+
+2002-10-25  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.0.13.
+
+       * connection.c (_psyco_conn_close): remove cursors from the list
+       starting from last and moving backward (as suggested by Jeremy
+       Hylton; this is not such a big gain because python lists are
+       *linked* lists, but not removing the element 0 makes the code a
+       little bit clear.)
+
+       * cursor.c (_psyco_curs_execute): now IntegrityError is raised
+       instead of ProgrammingError when adding NULL values to a non-NULL
+       column (suggested by Edmund Lian) and on referential integrity
+       violation (as per debian bug #165791.)
+
+       * typeobj.c (psyco_DATE_cast): now we use 999999 instead of
+       5867440 for very large (both signs) dates. This allow to re-insert
+       the DateTime object into postgresql (suggested by Zahid Malik.) 
+
+2002-09-13  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.0.12.
+
+       * Removed code to support COPY FROM/TO, will be added to new 1.1
+       branch to be released next week.
+
+       * cursor.c (_mogrify_seq): Fixed memory leak reported by Menno
+       Smits (values obtained by calling PySequence_GetItem are *new*
+       references!)
+
+2002-09-07  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c (_psyco_curs_execute): Added skeleton to support COPY
+       FROM/TO.
+
+2002-09-06  Federico Di Gregorio  <fog@debian.org>
+
+       * configure.in: if libcrypt can't be found we probably are on
+       MacOS X: check for libcrypto, as suggested by Aparajita Fishman.
+
+2002-09-03  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/db.py (DB.columns): Applied patch from Dieter Maurer
+       to allow the DA-browser to work with mixed case table names.
+
+2002-08-30  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/DA.py (cast_DateTime): Applied patch from Yury to fix
+       timestamps (before they were returned with time always set to 0.)
+
+2002-08-26  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.0.11.1 (to fix a %&£$"! bug in ZPsycopgDA not
+       accepting psycopg 1.0.11 as a valid version.
+
+       * Release 1.0.11.
+
+2002-08-22  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.0.11pre2.
+
+       * cursor.c (_psyco_curs_execute): fixed IntegrityError as reported
+       by Andy Dustman. (psyco_curs_execute): converting TypeError to
+       ProgrammingError on wrong number of % and/or aeguments. 
+
+       * doc/examples/integrity.py: added example and check for
+       IntegrityError.
+
+2002-08-08  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.0.11pre1.
+
+2002-08-06  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/DA.py (cast_DateTime): patched as suggested by Tom
+       Jenkins; now it shouldwork with time zones too.
+
+2002-08-01  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/DA.py (cast_DateTime): fixed problem with missing
+       AM/PM, as reported by Tom Jenkins.
+
+2002-07-23  Federico Di Gregorio  <fog@debian.org>
+
+       * Fixed buglets reported by Mike Coleman.
+
+2002-07-22  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.0.10.
+
+2002-07-14  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.0.10pre2.
+       
+       * typeobj.c (psyco_LONGINTEGER_cast): fixed bad segfault by
+       INCREFfing Py_None when it is the result of a NULL conversion.
+
+2002-07-04  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.0.10pre1.
+       
+       * buildtypes.py (basic_types): added TIMESTAMPTZ to the types
+       converted by the DATE builtin.
+       
+       * ZPsycopgDA/DA.py (Connection.connect): Added version check.
+
+2002-07-03  Federico Di Gregorio  <fog@debian.org>
+
+       * typeobj.c (psyco_XXX_cast): fixed bug reported by multiple users
+       by appliying Matt patch. 
+
+2002-06-30  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/DA.py (Connection.set_type_casts): applied patch from
+       Tom Jenkins to parse dates with TZ.
+
+2002-06-20  Federico Di Gregorio  <fog@debian.org>
+
+       * Preparing for release 1.0.9.
+
+       * Makefile.pre.in (dist): now we really include psycopg.spec.
+
+2002-06-17  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/db.py (_finish, _abort): fixed problem with
+       connection left in invalid state by applying Tom Jenkins patch.
+
+2002-06-06  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/db.py (DB._abort): fixed exception raising after an
+       error in execute triggerer deletion of self.db.
+
+2002-05-16  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c (psyco_curs_fetchone): None values passed to the
+       internal typecasters. 
+
+       * typeobj.c: added management of None to all the builtin
+       typecasters. 
+
+2002-04-29  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/DA.py (cast_Time): applied 'seconds as a float' patch
+       from Jelle.
+
+2002-04-23  Federico Di Gregorio  <fog@debian.org>
+
+        * Release 1.0.8.
+
+       * Makefile.pre.in: we now include win32 related files in the
+       distribution. 
+       
+       * connection.c (psyco_conn_destroy): fixed segfault reported by
+       Scott Leerssen (we were double calling _psyco_conn_close().)
+
+       * typemod.c (new_psyco_quotedstringobject): fixed memory stomping
+       catched by assert(); thanks to Matt Hoskins for reporting this
+       one.
+
+2002-04-22  Federico Di Gregorio  <fog@debian.org>
+
+       * configure.in: grmpf. we need a VERSION file for windows, we'll
+       use it for configue and debian/rules too. 
+
+       * Integrated win32 changes from Jason Erickson. Moved his
+       Readme.txt to README.win32, removed VERSION and DATE, patched
+       source where required. Renamed HISTORY to ChangeLog.win32, hoping
+       Jason will start adding changes to the real ChangeLog file.
+
+2002-04-07  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.0.7.1.
+       
+       * configure.in: fixed little bug as reported by ron.
+
+2002-04-05  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.0.7?
+       
+       * typemod.c (new_psyco_bufferobject): fixed encoding problem (0xff
+       now encoded as \377 and not \777.) Also encoding *all* chars as
+       quoted octal values to prevent "Invalid UNICODE character sequence
+       found" errors.
+
+       * Release 1.0.7. (Real this time.) (Ok, it was a joke....)
+
+2002-04-03  Federico Di Gregorio  <fog@debian.org>
+
+       * configure.in: fixed problem with postgres versions in the format
+       7.2.x (sic.)
+
+       * connection.c (psyco_conn_destroy): moved most of the destroy
+       stuff into its own function (_psyco_conn_close) and added a call
+       to it from psyco_conn_close. This should fix the "psycopg does not
+       release postgres connections on .close()" problem.
+
+2002-03-29  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.0.7. Delayed.
+       
+       * buildtypes.py (basic_types): added TIMESTAMPTZ postgres type to
+       the list of valid DATETIME types (incredible luck, no changes to
+       the parse are needed!)
+
+       * typeobj.c (psyco_DATE_cast): fixed wrong managment of sign in
+       infinity.
+
+2002-03-27  Federico Di Gregorio  <fog@debian.org>
+       
+       * configure.in (INSTALLOPTS): added AC_PROG_CPP test, now uses
+       AC_TRY_CPP to test for _all_ required mx includes.
+
+2002-03-19  Federico Di Gregorio  <fog@debian.org>
+
+       * configure.in: added check for both pg_config.h and config.h to
+       detect postgres version.
+
+       * cursor.c: now None values are correctly handled when the format
+       string is not %s but %d, etc.
+
+2002-03-08  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/DA.py: added MessageDialog import suggested by
+       Guido.
+
+2002-03-07  Federico Di Gregorio  <fog@debian.org>
+
+       * psycopg.spec: added RPM specs by William K. Volkman.
+
+       * Release 1.0.6.
+       
+       * configure.in: imported changes to allow postgres 7.2 builds from
+       unstable branch.
+
+2002-03-04  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.0.5.
+
+       * applied table browser patch from Andy Dustman. 
+
+2002-02-26  Federico Di Gregorio  <fog@debian.org>
+
+       * typeobj.c (psyco_DATE_cast): added management of infinity
+       values, this can be done in a better way, by accessing the
+       MaxDateTime and MinDateTime constants of the mx.DateTime module.
+
+2002-02-20  Federico Di Gregorio  <fog@debian.org>
+
+       * configure.in: Release 1.0.4.
+
+2002-02-12  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/db.py (DB.columns): fixed select to reenable column
+       expansion in table browsing.
+
+       * ZPsycopgDA/__init__.py: removed code that made psycopg think
+       double.  
+
+2002-02-11  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c (_mogrify_dict): removed Py_DECREF of Py_None,
+       references returned by PyDict_Next() are borrowed (thanks to
+       Michael Lausch for this one.)
+
+2002-02-08  Federico Di Gregorio  <fog@debian.org>
+
+       * A little bug slipped in ZPsycopgDA, releasing 1.0.3 immediately.
+
+        * Release 1.0.2.
+       
+       * tests/check_types.py (TYPES): added check for hundredths of a
+       second. 
+
+2002-02-07  Federico Di Gregorio  <fog@debian.org>
+
+       * typeobj.c (psyco_INTERVAL_cast): patched to correct wrong
+       interpretation of hundredths of a second (patch from
+       A. R. Beresford, kudos!)
+
+2002-01-31  Federico Di Gregorio  <fog@debian.org>
+
+       * FAQ: added.
+
+2002-01-16  Federico Di Gregorio  <fog@debian.org>
+
+       * Preparing for release 1.0.1.
+       
+       * cursor.c (alloc_keeper): removed ALLOW_THREADS wrapper around
+       PQconnectdb: libpq calls crypt() that is *not* reentrant.
+
+2001-12-19  Federico Di Gregorio  <fog@debian.org>
+
+       * typeobj.c (psyco_DBAPITypeObject_cmp): added check to simply
+       return false when two type objects are compared (type objects are
+       meaned to be compared to integers!)
+
+       * typeobj.c: fixed the memory leak reported by the guys at
+       racemi, for real this time. (added about 5 DECREFS and 2 INCREFS,
+       ouch!)
+       
+2001-12-17  Federico Di Gregorio  <fog@debian.org>
+
+       * typeobj.c (psyco_DBAPITypeObject_cmp): fixed memory leak by
+       using PyTuple_GET_ITEM (we are sure the tuple has at least one
+       element, we built it, after all...) (many thanks to Scott Leerssen
+       for reporting the *exact line* for this one.)
+
+2001-12-13  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c: fixed memory leak due to extra strdup (thanks
+       to Leonardo Rochael Almeida.)
+
+2001-11-14  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 1.0. 
+
+       * doc/README: added explanation about guide work in progess but
+       examples working.
+
+       * debian/*: lots of changes to release 1.0 in debian too.
+
+2001-11-12  Federico Di Gregorio  <fog@debian.org>
+
+       * RELEASE-1.0: added release file, to celebrate 1.0.
+
+       * tests/zope/typecheck.zexp: regression test on types for zope.
+
+2001-11-11  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/DA.py (cast_Interval): removed typecast of interval
+       into zope DateTime. intervals are reported as strings when using
+       zope DateTime and as DateTimeDeltas when using mx.
+
+2001-11-09  Federico Di Gregorio  <fog@debian.org>
+
+       * typeobj.c (psyco_INTERVAL_cast): complete rewrite of the
+       interval parsing code. now we don't use sscanf anymore and all is
+       done with custom code in a very tight and fast loop. 
+
+2001-11-08  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/DA.py (Connection.set_type_casts): added mx INTERVAL
+       type restore.
+
+       * ZPsycopgDA/db.py (DB.query): now we return column names even if
+       there are no rows in the result set. also, cleaned up a little bit
+       the code.
+
+2001-11-7  Federico Di Gregorio,  <fog@debian.org>
+
+       * Makefile.pre.in: fixed small problem with zcat on True64 
+       (thank you stefan.)
+
+2001-11-06  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/db.py (DB.query): added fix for concurrent update
+       from Chris Kratz.
+
+2001-11-05  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c: now we include postgres.h if InvalidOid is still
+       undefined after all other #includes.
+
+       * README: clarified use of configure args related to python
+       versions.
+
+       * aclocal.m4: patched to work with symlinks installations (thanks
+       to Stuart Bishop.)
+
+       * cursor.c (_psyco_curs_execute): now reset the keeper's status to
+       the old value and not to BEGIN (solve problem with autocommit not
+       switching back.)
+
+2001-11-01  Federico Di Gregorio  <fog@debian.org>
+
+       * doc/examples/dt.py: added example on how to use the date and
+       time constructors. 
+
+       * Makefile.pre.in (dist-zope): removed dependencies on GNU install
+       and tar commands. Also a little general cleanup on various targets.
+
+       * ZPsycopgDA/DA.py: fixed mx.DateTime importing. 
+
+2001-10-31  Federico Di Gregorio  <fog@debian.org>
+
+       * typemod.c (psyco_xxxFromMx): fixed bug in argument parsing (we
+       weren't usigng the right type object.) 
+
+       * aclocal.m4: now builds OPT and LDFLAGS on the values of the env
+       variables instead of overwriting them.
+
+       * Makefile.pre.in (CFLAGS): removed -Wall, you can add it back at
+       compile time with OPT="-Wall" ./configure ...
+
+       * Setup.in (OPT): removed -Wall.
+
+2001-10-30  Michele Comitini <mcm@initd.net>
+
+       * module.h: ANSI C compatibility patch from Daniel Plagge.
+       
+2001-10-30  Federico Di Gregorio  <fog@debian.org>
+
+       * README: added common building problems and solutions.
+
+       * configure.in: removed check for install command, already done by
+       james's aclocal.m4 for python. removed install-sh. removed -s from
+       INSTALLOPTS.
+
+2001-10-29  Federico Di Gregorio  <fog@debian.org>
+
+       * Makefile.pre.in (dist): removed examples/ directory from
+       distribution. 
+
+       * merge with cvs head. preparing to fork again on PSYCOPG-1-0 (i
+       admit BRANCH_1_0 was quite a silly name.)
+
+       * doc/examples/usercast.py: now works. 
+
+       * connection.c (curs_rollbackall): fixed little bug (exposed by
+       the deadlock below) by changing KEEPER_READY to KEEPER_READY.
+
+       * doc/examples/commit.py: deadlock problem solved, was the
+       example script, _not_ psycopg. pew... :)
+
+       * examples/*: removed the examples moved to doc/examples/.
+       
+       * doc/examples/commit.py,dictfetch.py: moved from examples/ and
+       changed to work for 1.0. unfortunately commit.py locks psycopg!!!
+
+2001-10-24  Federico Di Gregorio  <fog@debian.org>
+
+       * modified all files neede for the 1.0 release.
+
+       * configure.in (MXFLAGS): removed electric fence support.
+
+       * Makefile.pre.in (dist): now we remove CVS working files before
+       packing the tarball.
+
+        * tests: files in this directory are not coding examples, but
+       regression tests. we need a sufficient number of tests to follow
+       every single code path in psycopg at least once. first test is
+       about datatypes.
+       
+       * doc/examples: moved new example code to examples directory, old
+       tests and code samples will stay in examples/ until the manual will
+       be finished.
+
+2001-10-16  Federico Di Gregorio  <fog@debian.org>
+
+       * typeobj.c (psyco_INTERVAL_cast): completely revised interval
+       casting code. (psyco_TIME_cast): we use the unix epoch when the
+       date is undefined. 
+
+       * cursor.c (psyco_curs_executemany): modified sanity check to
+       accept sequences of tuples too and not just dictionaries.
+
+2001-10-15  Federico Di Gregorio  <fog@debian.org>
+
+       * typeobj.c (psyco_INTERVAL_cast): fixed bug caused by wrong
+       parsing on '1 day' (no hours, minutes and seconds.)
+
+2001-10-15  Michele Comitini  <mcm@initd.net>
+
+       * cursor.c (_execute): use the correct cast functions even on
+       retrival of binary cursors.
+
+2001-10-12  Federico Di Gregorio  <fog@debian.org>
+
+       * typemod.c (new_psyco_bufferobject): space not quoted anymore,
+       smarter formula to calculate realloc size.
+
+       * cursor.c (psyco_curs_fetchone): removed static tuple (using
+       static variable in multithreaded code is *crazy*, why did i do it? 
+       who knows...)
+
+       * typeobj.c (psyco_init_types): exports the binary converter (will
+       be used in cursor.c:_execute.)
+
+       * typeobj.h: added export of psyco_binary_cast object.
+
+2001-10-05  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c (_psyco_curs_execute): added missing Py_XDECREF on
+       casts list.
+
+       * Makefile.pre.in (dist): added install-sh file to the
+       distribution. 
+
+       * replaced PyMem_DEL with PyObject_Del where necessary.
+       
+       * connection.c (psyco_conn_destroy): added missing
+       pthread_mutex_destroy on keeper lock.
+
+2001-10-01  Michele Comitini  <mcm@initd.net>
+
+       * typemod.c(new_psyco_bufferobject()): using unsigned char for
+       binary objects to avoid too many chars escaped.  A quick and
+       simple formula to avoid memory wasting and too much reallocating
+       for the converted object.  Needs _testing_, but it is faster.
+
+       * cursor.c: #include <postgres.h>
+
+       * module.h: now debugging should be active only when asked by
+       ./configure --enable-devel
+       
+2001-09-29  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c (new_psyco_cursobject): added locking of connection,
+       still unsure if necessary.
+
+2001-09-26  Federico Di Gregorio  <fog@debian.org>
+
+       * configure.in: changed DEBUG into PSYCOTIC_DEBUG, to allow other
+       includes (postgres.h) to use the former. better compiler checks:
+       inline, ansi, gcc specific extensions. removed MXMODULE: we don't
+       need it anymore.
+
+       * general #include cleanup, should compile on MacOS X too.
+
+       * typeobj.c (psyco_DATE_cast): uses sscanf. should be faster too. 
+       (psyco_TIME_cast): dixit.
+
+       * applied patch from Daniel Plagge (SUN cc changes.)
+       
+2001-09-22  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/db.py (DB._finish, DB._begin): fix for the 
+       self.db == None problem.
+
+2001-09-19  Michele Comitini  <mcm@initd.net>
+
+       * typemod.c (new_psyco_bufferobject): better memory managment
+       (now it allocates only needed space dinamically).
+
+       * typeobj.c (psyco_BINARY_cast): ripped a useless check, now
+       it assumes that binary streams come out from the db correctly
+       escaped.  Should be a lot faster.
+
+2001-09-18  Federico Di Gregorio  <fog@debian.org>
+
+       * typeobj.c (psyco_INTERVAL_cast): fixed interval conversion
+       (hours were incorrectly converted into seconds.)
+
+2001-09-17  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c (_mogrify_seq, _mogrify_dict): added check for None
+       value and conversion of None -> NULL (fixes bug reported by Hamish
+       Lawson.)
+
+2001-09-12  Federico Di Gregorio  <fog@debian.org>
+
+       * module.c: added handles to new date and time conversion
+       functions (see below.)
+
+       * typemod.c (psyco_XXXFromMx): added conversion functions that
+       simply wrap the mxDateTime objects instead of creating
+       them. DBAPI-2.0 extension, off-curse. 
+
+2001-09-10  Federico Di Gregorio  <fog@debian.org>
+
+       * buildtypes.py: solved hidden bug by changing from dictionary to
+       list, to maintain ordering of types. sometimes (and just
+       sometimes) the type definitions were printed unsorted, resulting
+       is psycopg initializing the type system using the type objects in
+       the wrong order. you were getting float values from an int4
+       column? be happy, this is now fixed... 
+
+       * cursor.c (psyco_curs_lastoid): added method to get oid of the
+       last inserted row (it was sooo easy, it even works...) 
+
+2001-09-08  Federico Di Gregorio  <fog@debian.org>
+
+       * typeobj.c (psyco_INTERVAL_cast): added casting function for the
+       postgres INTERVAL and TINTERVAL types (create a DateTimeDelta
+       object.)  
+
+2001-09-05  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c: moved all calls to begin_pgconn to a single call in
+       _psyco_curs_execute, to leave the connection in a not-idle status
+       after a commit or a rollback. this should free a lot of resources
+       on the backend side. kudos to the webware-discuss mailing list
+       members and to Clark C. Evans who suggested a nice solution.
+       
+       * connection.c (curs_rollbackall, curs_commitall): removed calls
+       to begin_pgconn, see above. 
+
+       * module.c (initpsycopg): cleaned up mxDateTime importing; we now
+       use the right function from mxDateTime.h. Is not necessary anymore
+       to include our own mx headers. This makes psycopg to depend on
+       mxDateTime >= 2.0.0.
+
+2001-09-04  Federico Di Gregorio  <fog@debian.org>
+
+       * doc/*.tex: added documentation directory and skeleton of the
+       psycopg guide. 
+
+2001-09-03  Federico Di Gregorio  <fog@debian.org>
+
+       * merged in changes from HEAD (mostly mcm fixes to binary
+       objects.)
+
+       * preparing for release 0.99.6.
+
+2001-09-03  Michele Comitini  <mcm@initd.net>
+
+       * typemod.c: much faster Binary encoding routine.
+       
+       * typeobj.c: much faster Binary decoding routine.       
+
+2001-08-28  Michele Comitini  <mcm@initd.net>
+
+       * typemod.c: Working binary object to feed data to bytea type
+       fields.
+
+       * typeobj.c: Added BINARY typecast to extract data from
+       bytea type fields.
+
+       * cursor.c: Added handling for SQL binary  cursors.
+
+2001-08-3  Michele Comitini <mcm@initd.net>
+
+       * cursor.c: fixed DATESTYLE problem thanx to Steve Drees.
+
+2001-07-26  Federico Di Gregorio  <fog@debian.org>
+
+       * Makefile.pre.in: applied change suggested by Stefan H. Holek to
+       clobber and distclean targets.
+
+2001-07-23  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/db.py: fixed little bugs exposed by multiple select
+       changes, not we correctly import ListType and we don't override
+       the type() function with a variable. 
+
+2001-07-17  Federico Di Gregorio  <fog@debian.org>
+
+       * configure.in: Release 0.99.5.
+
+2001-07-12  Federico Di Gregorio  <fog@debian.org>
+
+       * debian/* fixed some little packaging problems.
+
+2001-07-11  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c, typeobj.c: removed some Py_INCREF on PyDict_SetItem
+       keys and values to avoid memory leaks.
+
+2001-07-03  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c (_mogrify_dict): added dictionary mogrification: all
+       Strings in the dictionary are translated into QuotedStrings. it
+       even works... (_mogrify_seq): added sequence mogrification and
+       code to automagically mogrify all strings passed to .execute(). 
+
+2001-07-02  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 0.99.4.
+
+       * typemod.c: added QuotedString class and methods.
+
+       * module.c: added QuotedString method to module psycopg.
+
+       * typemod.c: changed Binary objects into something usefull. now
+       the buffer object quotes the input by translatin every char into
+       its octal representation. this consumes 4x memory but guarantees
+       that even binary data containing '\0' can go into the Binary
+       object. 
+
+       * typemod.h: added definition of QuotedString object.
+       
+2001-06-28  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/db.py, ZPsycopgDA/DABase.py: applied patch sent by
+       yury to fix little buglet. 
+
+2001-06-22  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 0.99.3.
+       
+       * connection.c (new_psyco_connobject): now we strdup dsn, as a fix
+       for the problem reported by Jack Moffitt.
+
+       * Ok, this will be the stable branch from now on...
+
+       * Merged in stuff from 0.99.3. About to re-branch with a better
+       name (BRANCH_1_0)
+
+2001-06-20  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 0.99.3. Showstoppers for 1.0 are:
+           - documentation
+           - mxDateTime module loading
+           - bug reported by Yury.
+       
+       * Integrated patches from Michele:
+           - searching for libcrypt in configure now works
+           - removed memory leak in asprintf.c
+
+2001-06-15  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/__init__.py (initialize): applied patch from Jelle to
+       resolve problem with Zope 2.4.0a1.
+
+2001-06-14  Federico Di Gregorio  <fog@debian.org>
+
+       * configure.in: added code to check for missing functions (only
+       asprintf at now.)
+
+       * asprintf.c: added compatibility code for oses that does not have
+       the asprintf() function.
+
+2001-06-10  Federico Di Gregorio  <fog@debian.org>
+
+       * Branched PSYCOPG_0_99_3. Development will continue on the cvs
+       HEAD, final adjustements and bugfixing should go to this newly
+       created branch.
+
+2001-06-08  Michele Comitini  <mcm@initd.net>
+
+       * ZPsycopgDA/DA.py: DateTime casts simplified and corrected
+       as suggested by Yury.
+
+2001-06-05  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 0.99.2.
+
+       * Makefile.pre.in (dist): added typemod.h and typemod.c to
+       distribution.
+       
+       * cursor.c (commit_pgconn, abort_pgconn, begin_pgconn): resolved
+       segfault reported by Andre by changing PyErr_SetString invokations
+       into pgconn_set_critical. the problem was that the python
+       interpreter simply segfaults when we touch its internal data (like
+       exception message) inside an ALLOW_THREADS wrapper.
+
+       * now that we are 100% DBAPI-2.0 compliant is time for the
+       one-dot-o release (at last!) Para-pa-pa! This one is tagged
+       PSYCOPG_0_99_1 but you can call it 1.0pre1, if you better like. 
+       (A very long text just to say 'Release 0.99.1')
+
+       * typemod.[ch]: to reach complete DBAPI-2.0 compliance we
+       introduce some new objects returned by the constructors Date(),
+       Time(), Binary(), etc. Those objects are module-to-database only,
+       the type system still takes care of the database-to-python
+       conversion.
+
+2001-06-01  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 0.5.5.
+
+       * module.h: better error message when trying to commit on a
+       cursor derived from serialized connection.
+       
+       * ZPsycopgDA/db.py (DB.close): now self.cursor is set to None when
+       the connection is closed.
+
+       * module.c (initpsycopg): added missing (sic) DBAPI module
+       parameters (paramstyle, apilevel, threadsafety, etc...)
+
+2001-05-24  Michele Comitini  <mcm@initd.net>
+
+       * ZPsycopgDA: Support for Zope's internal DateTime, option
+       to leave mxDateTime is available on the management interface so
+       to switch with little effort :).
+
+       * cursor.c: more aggressive cleanup of postgres results
+       to avoid the risk of memory leaking.
+
+       * typeobj.c, connection.c: deleted some Py_INCREF which
+       wasted memory.
+
+2001-05-18  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 0.5.4.
+
+2001-05-17  Michele Comitini  <mcm@initd.net>
+
+       * ZPsycopgDA/db.py: The connection closed by the management
+       interface of zope now raises error instead of reopening itself.
+
+       * cursor.c (psyco_curs_close):  does not try to free the cursor
+       list, as it caused a segfault on subsequent operations on the same
+       cursor.
+
+2001-05-07  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 0.5.3.
+       
+       * Merged in changes from me and mcm.
+
+2001-05-06  Michele Comitini  <mcm@initd.net>
+
+       * ZPsycopgDA/db.py (DB.close): Fixes a bug report by Andre
+       Shubert, which was still open since there was a tiny typo in
+       method definition.
+
+       * ZPsycopgDA/DA.py (Connection.sql_quote__): overriding standard
+       sql_quote__ method to provide correct quoting (thank to Philip
+       Mayers and Casey Duncan for this bug report).
+
+2001-05-04  Federico Di Gregorio  <fog@debian.org>
+
+       * ZPsycopgDA/db.py: added .close() method (as suffested by Andre
+       Schubert.)
+
+2001-05-04  Michele Comitini  <mcm@initd.net>
+
+       * module.h: working on a closed object now raises an
+       InterfaceError.
+
+       * ZPsycopgDA/db.py: fixed problems with dead connections detection.
+
+       * ZPsycopgDA/__init__.py: corrected SOFTWARE_HOME bug for zope
+       icon.
+
+2001-05-04  Federico Di Gregorio  <fog@debian.org>
+
+       * examples/thread_test.py: now that the serialization bug is
+       fixed, it is clear that thread_test.py is bugged! added a commit()
+       after the creation of the first table to avoid loosing it on the
+       exception raised by the CREATE of an existing table_b.
+
+2001-05-03  Federico Di Gregorio  <fog@debian.org>
+
+       * connection.c (psyco_conn_cursor): reverted to old locking
+       policy, the new caused a nasty deadlock. apparently the multiple
+       connection problem has been solved as a side-effect of the other
+       fixes... (?!)
+
+       * module.h: removes stdkeeper field from connobject, we don't need
+       it anymore.
+
+       * cursor.c (dispose_pgconn): now sets self->keeper to NULL to
+       avoid decrementing the keeper refcnt two times when the cursor is
+       first closed and then destroyed.
+
+       * connection.c (psyco_conn_cursor): fixed little bug in cursor
+       creation: now the connection is locked for the entire duration of
+       the cursor creation, to avoid a new cursor to be created with a
+       new keeper due to a delay in assigning the stdmanager cursor.
+
+       * cursor.c: added calls to pgconn_set_critical() and to
+       EXC_IFCRITICAL() where we expect problems. Still segfaults but at
+       least raise an exception...
+       
+       * cursor.c (psyco_curs_autocommit): added exception if the
+       cursor's keeper is shared between more than 1 cursor.
+
+       * module.h (EXC_IFCRITICAL): added this macro that call
+       pgconn_resolve_critical) on critical errors.
+
+       * cursor.c (alloc_keeper): added check for pgres == NULL. 
+
+       * cursor.c (psyco_curs_destroy): merged psyco_curs_destroy() and
+       psyco_curs_close(): now both call _psyco_curs_close() and destroy
+       does only some extra cleanup.
+
+2001-05-03  Michele Comitini  <mcm@initd.net>
+
+       * ZPsycopgDA/db.py: Some cleanup to bring the zope product up to
+       date with the python module.  Some bugs found thanks to Andre
+       Schubert.  Now the ZDA should rely on the new serialized version
+       of psycopg.
+
+       * cursor.c: while looking for problems in the ZDA some come out
+       here, with the inability to handle dropping connection correctly.
+       This leads to segfaults and is not fixed yet for lack of time.
+       Some problems found in cursors not willing to share the same
+       connection even if they should.  Hopefully it should be fixed
+       soon.
+
+2001-04-26  Federico Di Gregorio  <fog@debian.org>
+
+       * fixed bug reported by Andre Schubert by adding a new cast
+       function for long integers (int8 postgresql type.) at now they are
+       converted to python LongIntegers: not sure f simply convert to
+       floats.
+
+       * michele applied patch from Ivo van der Wijk to make zpsycopgda
+       behave better when INSTANCE_HOME != SOFTWARE_HOME.
+
+       * cursor.c (_psyco_curs_execute): also fill the 'columns' field.
+
+       * module.h: added a 'columns' field to cursobject, to better
+       support the new dictionary fetch functions (dictfetchone(),
+       dictfetchmany(), dictfetchall().)
+
+       * cursor.c: added the afore-mentioned functions (function names
+       are not definitive, they will follow decisions on the DBAPI SIG.)
+
+2001-04-03  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 0.5.1.
+
+       * mcm fixed a nasty bug by correcting a typo in module.h.
+
+2001-03-30  Federico Di Gregorio  <fog@debian.org>
+
+       * module.c (psyco_connect): added `serialized' named argument to
+       the .connect() method (takes 1 or 0 and initialize the connection
+       to the right serialization state.)
+
+       * Makefile.pre.in (dist): fixed little bug, a missing -f argument
+       to rm.
+
+       * examples/thread_test.py: removed all extension cruft.
+
+       * examples/thread_test_x.py: this one uses extensions like the
+       per-cursor commit, autocommit, etc.
+
+       * README (psycopg): added explanation on how .serialize() works. 
+
+       * connection.c (psyco_conn_serialize): added cursor serialization
+       and .serialize() method on the connection object. now we are
+       definitely DBAPI-2.0 compliant.
+
+2001-03-20  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c (_psyco_curs_execute): replaced some fields in
+       description with None, as suggested on the DB-SIG ML.
+
+       * something like one hundred of little changes to allow cursors
+       share the same postgres connection. added connkeeper object and
+       pthread mutexes (both in connobject and connkeeper.) apparently it
+       works. this one will be 0.5.0, i think.
+
+2001-03-19  Michele Comitini  <mcm@initd.net>
+
+       * cursor.c: added mutexes, they do not interact well with python
+       threads :(.
+
+2001-03-16  Michele Comitini  <mcm@initd.net>
+
+       * ZPsycopgDA/db.py (ZDA): some fixes in table browsing.
+
+2001-03-16  Federico Di Gregorio  <fog@debian.org>
+
+       * suite/tables.postgresql (TABLE_DESCRIPTIONS): fixed some typos
+       introduced by copying by hand the type values from pg_type.h.
+
+       * suite/*: added some (badly) structured code to test for
+       DBAPI-2.0 compliance.
+       
+       * cursor.c (pgconn_notice_callback): now the NOTICE processor only
+       prints NOTICEs when psycopg has been compiled with the
+       --enable-devel switch. 
+
+       * connection.c: removed 'autocommit' attribute, now is a method as
+       specified in the DBAPI-2.0 document.
+
+2001-03-15  Federico Di Gregorio  <fog@debian.org>
+
+       * connection.c (curs_commitall): splitted for cycle in two to
+       avoid the "bad snapshot" problem.
+
+2001-03-14  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 0.4.6.
+       
+       * cursor.c (_psyco_curs_execute): fixed nasty bug, there was an
+       free(query) left from before the execute/callproc split.
+
+       * Preparing for 0.4.6.
+
+2001-03-13  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c (psyco_curs_execute): fixed some memory leaks in
+       argument parsing (the query string was not free()ed.)
+       (psyco_curs_callproc): implemented callproc() method on cursors.
+       (_psyco_curs_execute): this is the function that does the real
+       stuff for callproc() and execute().
+       (pgconn_notice_*): added translation of notices into python
+       exceptions (do we really want that?) 
+
+       * configure.in: removed some cruft (old comments and strncasecmp()
+       check)
+
+2001-03-12  Federico Di Gregorio  <fog@debian.org>
+
+       * examples/thread_test.py: added moronic argument parsing: now you
+       can give the dsn string on the command line... :(
+
+       * Release 0.4.5.
+
+2001-03-10  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c (request_pgconn): added code to set datestyle to ISO on
+       new connections (many thanks to Yury <yura@vpcit.ru> for the code,
+       i changed it just a little bit to raise an exception on error.)
+
+2001-03-09  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 0.4.4.
+
+       * ZPsycopgDA/db.py: michele fixed a nasty bug here. 
+
+2001-03-08  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 0.4.3.
+
+2001-03-07  Federico Di Gregorio  <fog@debian.org>
+
+       * Makefile.pre.in (dist): typeobj_builtins.c included for people
+       without pg_type.h. if you encounter type-casting problems like
+       results cast to the wrong type, simply "rm typeobj_builtins.c" and
+       rebuild.
+
+       * typeobj.c (psyco_*_cast): removed RETURNIFNULL() macro from all
+       the builtin casting functions. (psyco_STRING_cast) does not create
+       a new string anymore, simply Py_INCREF its argument and return it.
+
+       * cursor.c (psyco_curs_fetchone): removed strdup() call. added
+       PQgetisnull() test to differentiate between real NULLs and empty
+       strings.
+
+       * Removed cursor.py (mcm, put tests in examples) and fixed some
+       typos in the dtml code.
+
+2001-03-04  Michele Comitini  <mcm@initd.net>
+
+       * examples/commit_test.py: Modifications to test argument passing
+       and string substitution to cursor functions, nothing more.
+
+       * ZPsycopgDA/db.py: now it exploits some of the good features of
+       the psycopg driver, such as connection reusage and type
+       comparison.  Code is smaller although it handles (and
+       reports) errors much better.
+
+       * cursor.c: corrected a bug that left a closed cursor in the
+       cursor list of the connection.  Now cursors are removed from the
+       lists either when they are close or when they are destroyed.
+       Better connection (TCP) error reporting and handling.
+
+
+2001-03-02  Federico Di Gregorio  <fog@debian.org>
+
+       * examples commit_test.py: added code to test autocommit.
+       
+       * examples/thread_test.py (ab_select): modified select thread to
+       test autocommit mode.
+
+       * Release 0.4.1.
+       
+       * module.h, connection.c, cursor.c: added autocommit support.
+
+2001-02-28  Federico Di Gregorio  <fog@debian.org>
+
+       * Release 0.4.
+
+2001-02-27  Michele Comitini  <mcm@initd.net>
+
+       * cursor.py: cut some unuseful code in psyco_curs_fetchmany() and
+       psyco_curs_fetchall() inserted an assert in case someting goes
+       wrong.
+
+2001-02-27  Federico Di Gregorio  <fog@debian.org>
+
+       * debian/*: various changes to build both the python module and
+       the zope db adapter in different packages (respectively
+       python-psycopg and zope-psycopgda.)  
+
+       * examples/type_test.py: better and more modular tests. 
+
+       * typeobj.c: added DATE, TIME, DATETIME, BOOLEAN, BINARY and ROWID
+       types. (RETURNIFNULL) added NULL-test to builtin conversion
+       functions (using the RETURNIFNULL macro.)
+
+2001-02-26  Federico Di Gregorio  <fog@debian.org>
+
+       * releasing 0.3 (added NEWS file.)
+
+2001-02-26  Michele Comitini  <mcm@initd.net>
+
+       * cursor.c: fetchmany() some cleanup done.
+
+       * ZPsycopgDA/db.py, ZPsycopgDA/__init__.py, : fixes to make the
+       ZDA work some way.  WARNING WARNING WARNING the zda is still
+       alpha code, but we need some feed back on it so please give it
+       a try.
+       
+2001-02-26  Federico Di Gregorio  <fog@debian.org>
+
+       * typeobj.c (psyco_STRING_cast): fixed bad bad bad bug. we
+       returned the string without coping it and the type-system was more
+       than happy to Py_DECREF() it and trash the whole system. fixed at
+       last!
+
+       * module.h (Dprintf): added pid to every Dprintf() call, to
+       facilitate multi-threaded debug.
+
+2001-02-26  Michele Comitini  <mcm@initd.net>
+
+       * module.c: added code so that DateTime package need not to be
+       loaded to have mxDateTime.  This should avoid clashing with
+       DateTime from the zope distribution.
+
+       * cursor.c: setting error message in fetchmany when no more tuples
+       are left. This has to be fixed in fetch and fetchall to.
+
+2001-02-26  Federico Di Gregorio  <fog@debian.org>
+
+       * configure.in: stepped up version to 0.3, ready to release
+       tomorrow morning. added check for path to DateTime module. 
+
+       * examples/usercast_test.py: generate some random boxes and
+       points, select the boxes with at least one point inside and print
+       them converting the PostgeSQL output using a user-specified cast
+       object. nice. 
+
+2001-02-24  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c (psyco_curs_fetchone): now an error in the python
+       callback when typecasting results raise the correct exception.
+
+       * typeobj.c (psyco_DBAPITypeObject_call): removed extra Py_INCREF().
+
+2001-02-23  Federico Di Gregorio  <fog@debian.org>
+
+       * replaced every single instance of the string 'pgpy' with 'psyco'
+       (this was part of the general cleanup.)
+       
+       * type_test.py: added this little test program to the distribution
+       (use the new_type() method to create new instances of the type
+       objects.)  
+
+       * typeobj.c: general cleanup. fixed some bugs related to
+       refcounting (again!)
+
+       * cursor.c: general cleanup. (request_pgconn) simplified by adding
+       a support function (_extract_pgconn.)
+
+       * connection.c: general cleanup. replaced some ifs with asserts()
+       in utility functions when errors depend on programming errors and
+       not on runtime exceptions. (pgpy_conn_destroy) fixed little bug
+       when deleting available connections from the list.
+
+       * module.h: general cleanup.
+
+       * typeobj.h: general cleanup, better comments, made some function
+       declarations extern. 
+
+       * module.c: general cleanup, double-checked every function for
+       memory leaks. (pgpy_connect) removed unused variable 'connection'.
+
+2001-02-22  Federico Di Gregorio  <fog@debian.org>
+
+       * typeobj.c: fixed lots of bugs, added NUMBER type object. now the
+       basic tests in type_test.py work pretty well.
+
+       * cursor.c (pgpy_curs_fetchmany): fixed little bug, fetchmany()
+       reported one less row than available.
+
+       * fixed lots of bugs in typeobj.c, typeobj.h, cursor.c. apparently
+       now the type system works. it is time to clean up things a little
+       bit.
+
+2001-02-21  Federico Di Gregorio  <fog@debian.org>
+
+       * typeobj.c: separated type objects stuff from module.c
+       
+       * typeobj.h: separated type objects stuff from module.h 
+
+2001-02-19  Federico Di Gregorio  <fog@debian.org>
+
+       * cursor.c (pgpy_curs_fetchmany): now check size and adjust it to
+       be lesser or equal than the nuber of available rows.
+
+2001-02-18  Michele Comitini  <mcm@initd.net>
+
+       * module.c, module.h: added optional args maxconn and minconn to
+       connection functions
+
+       * cursor.c: better error checking in request_pgconn.
+
+       * connection.c: changed new_connect_obj to take as optional args
+       maxconn and minconn. Added the corresponding ro attributes to
+       connection objects.
+
+       * cursor.py: added some code to stress test cursor reusage.
+
+       * cursor.c: some fixes on closed cursors.
+
+       * connection.c: corrections on some assert calls.
+
+2001-02-16  Federico Di Gregorio  <fog@debian.org>
+
+       * configure.in: added --enable-priofile sqitch. changed VERSION to
+       0.2: preparing for a new release.
+
+       * cursor.c: added a couple of asserts.
+
+2001-02-16  Michele Comitini  <mcm@initd.net>
+
+       * cursor.c, connection.c: fixed the assert problem: assert must
+       take just the value to be tested! no assignemente must be done in
+       the argument of assert() otherwise is wiped when NDEBUG is set.
+
+       * module.h: some syntax error fixed.  Error in allocating a tuple
+       corrected in macro DBAPITypeObject_NEW().
+       
+       * module.c: pgpy_DBAPITypeObject_init() is not declared static anymore.
+
+       * cursor.c: executemany() now does not create and destroy tuples
+       for each list item, so it is much faster.
+
+2001-02-14  Michele Comitini  <mcm@initd.net>
+
+       * cursor.c:  added again Py_DECREF on the cpcon after disposing
+       it.  assert() with -DNDEBUG makes the driver segfault while it
+       should not.
+       
+
+2001-02-13  Federico Di Gregorio  <fog@debian.org>
+
+       * some of the memory leak were memprof errors, bleah. resumed some
+       old code, fixed segfault, fixed other bugs, improved speed. almost
+       ready for a new release.
+       
+       * connection.c (pgpy_conn_destroy): replaced some impossible ifs
+       with aseert()s.
+
+       * cursor.c (pgpy_curs_close): added Py_DECREF() to
+       self->descritpion to prevent a memory leak after an execute().
+
+       * connection.c (pgpy_conn_destroy): always access first element of
+       lists inside for cycles because removing items from the list makes
+       higher indices invalid.
+
+       * cursor.c (dispose_pgconn): fixed memory leak, there was a
+       missing Py_DECREF() after the addition of the C object wrapping
+       the postgresql connection to the list of available connections.
+
+       * cursor.c (dispose_pgconn): fixed another memory leak: an
+       orphaned cursor should call PQfinish() on its postgresql
+       connection because it has no python connection to give the
+       postgresql ine back.
+
+       * cursor.c (pgpy_curs_execute): added Py_DECREF() of description
+       tuple after adding it to self->description. this one fixes the
+       execute() memory leak.
+       
+       * cursor.c (pgpy_curs_fetchall): added missing Py_DECREF() on row
+       data (obtained from fetchone().) this fixes the last memory leak.
+       (thread_test.py now runs without leaking memory!)
+
+2001-02-12  Federico Di Gregorio  <fog@debian.org>
+
+       * INSTALL: removed wok cruft from head of this file.
+
+       * debian/rules: debianized the sources. python-psycopg is about to
+       enter debian. mxDateTime header locally included until the
+       maintainer of python-mxdatetime includes them in his package
+       (where they do belong.)
+
+       * autogen.sh: added option --dont-run-configure. 
+
+2001-02-09  Federico Di Gregorio  <fog@debian.org>
+
+       * module.c (initpsycopg): changed name of init function to match
+       new module name (also changed all the exception definitions.)
+
+       * README: updated psycopg description (we have a new name!)
+
+       * Ready for 0.1 release.
+
+2001-02-07  Michele Comitini  <mcm@initd.net>
+
+       * cursor.c: now executemany takes sequences and not just
+       tuples 
+
+2001-02-07  Federico Di Gregorio  <fog@debian.org>
+
+       * Makefile.pre.in: now dist target includes test programs
+       (thread_test.py) and README and INSTALL files. 
+
+       * configure.in: changed --with-devel to --enable-devel. little
+       cosmetical fixes to the option management.
+       
+       * connection.c, module.c, cursor.c, module.h: removed 'postgres/'
+       from #include directive. it is ./configure task to find the right
+       directory.
+
+       * thread_test.py: added thread testing program.
+
+2001-02-07  Michele Comitini  <mcm@initd.net>
+
+       * cursor.c: added code to allow threads during PQexec() calls.
+       
+       * cursor.c: added begin_pgconn to rollback() and commit()
+       so that the cursror is not in autocommit mode.
+
+       * cursor.c: added rollback() and commit() methods to cursor
+       objects.
+
+
+2001-02-07  Federico Di Gregorio  <fog@debian.org>
+
+       * connection.c (pgpy_conn_destroy): always delete item at index
+       0 and not i (because items shift in the list while deleting and
+       accessing items at len(list)/2 segfaults.)
+
+2001-02-07  Michele Comitini  <mcm@initd.net>
+
+       * connection.c: added some more checking to avoid
+       clearing of already cleared pgresults.  Calling curs_closall()
+       in conn_destroy() since cursors have to live even without
+       their parent connection, otherwise explicit deletion of
+       object referencing to those cursors can cause arbitrary code
+       to be executed.
+
+       * cursor.c: some more checking to avoid trying to close
+       already close pgconnections.
+
+2001-02-06  Federico Di Gregorio  <fog@debian.org> 
+
+       * Makefile.pre.in (CFLAGS): added -Wall to catch bad programming
+       habits. 
+
+       * cursor.c, connection.c: lots of fixes to the destroy stuff. now
+       all the cursor are destroyed *before* the connection goes away.
+
+       * cursor.c (request_pgconn): another idiot error done by not
+       replacing dsn with owner_conn->dsn. fixed.
+       (dispose_pgconn): commented if to guarantee that the connection is
+       returned to the pool of available connections.
+
+       * merged changes done by mcm.
+
+       * cursor.c: general cleanup and better debugging/error
+       messages. changed xxx_conn into xxx_pgconn where still
+       missing. some pretty big changes to the way pgconn_request()
+       allocates new connections.
+
+       * connection.c: removed all 'register' integers. obsolete, gcc
+       does a much better job optimizing cycles than a programmer
+       specifying how to use registers. 
+
+       * module.h: some general cleanup and better definition of DPrintf
+       macro. now the DEBUG variable can be specified at configure time by
+       the --with-devel switch to ./configure.
+
+2001-02-02  Michele Comitini  <mcm@initd.net>
+
+       * cursor.c (Repository): Added functions for managing a connection
+       pool. Segfaults.
+
+       * configure.in (Repository): removed check for mxdatetime headers.
+
+2001-01-24  Federico Di Gregorio  <fog@debian.org>
+
+       * first checkout from shinning new init.d cvs.
+
+       * autotoolized build system. note that the mx headers are missing
+       from the cvs, you should get them someplace else (this is the
+       right way to do it, just require the headers in the configure
+       script.)
+
+2001-01-21  Michele Comitini  <mcm@initd.net>
+
+       * cursor.c (Repository): commit, abort, begin functions now check
+       the right exit status of the command.
+
+       * connection.c (Repository): working commit() and rollback()
+       methods.
+
+2001-01-20  Michele Comitini  <mcm@initd.net>
+
+       * module.h (Repository): added member to cursor struct to handle
+       queries without output tuples.
+
+       * cursor.c (Repository): new working methods: executemany,
+       fetchone, fetchmany, fetchall.
+
+2001-01-18  Michele Comitini  <mcm@initd.net>
+
+       * cursor.c (Repository): close working. destroy calling close.
+       close frees pg structures correctly.
+
+       * connection.c (Repository): close method working.  destroy seems
+       working.
+
+2001-01-17  Michele Comitini  <mcm@initd.net>
+
+       * cursor.c (Repository): now each python cursor has its own
+       connection.  Each cursor works in a transaction block.
+
+       * connection.c (Repository): added cursor list to connection
+       object
+
+2001-01-14  Michele Comitini  <mcm@initd.net>
+
+       * cursor.c (Repository): Beginning of code to implement cursor
+       functionalities as specified in DBA API 2.0, through the use of
+       transactions not cursors.
+
+       * connection.c (Repository): Added some error checking code for pg
+       connection (will be moved to cursor?).
+
+2001-01-13  Michele Comitini  <mcm@initd.net>
+
+       * connection.c (Repository): Added error checking in connection
+       code to fail if connection to the db could not be opened.
+
+       * module.h (Repository): New macro to help creating
+       DBAPITypeObjects.
+
+       * module.c (Repository): DBAPITypeObject __cmp__ function is now
+       very simplified using recursion.
+
+       * module.h (Repository): "DBAPIObject" changed to
+       "DBAPITypeObject".
+
+       * module.c (Repository): Fixes for coerce function of DBAPIObjects
+       by Federico Di Gregorio <fog@initd.net>.
+       (Repository): Clean up and better naming for DBAPITypeObjects.
+
+2001-01-08  Michele Comitini  <mcm@initd.net>
+
+       * module.c (Repository): Corrected the exception hierarcy
+
+       * connection.c (Repository): Begun to use the connection objects
+       of libpq
+
+2001-01-07  Michele Comitini  <mcm@initd.net>
+
+       * module.c (Repository): Added the Date/Time functions.
+
+2001-01-06  Michele Comitini  <mcm@initd.net>
+
+       * cursor.c (Repository): Skeleton of cursor interface.  All
+       methods and attributes of cursor objects are now available
+       in python.  They do nothing now.
+
+2001-01-05  Michele Comitini  <mcm@initd.net>
+
+       * module.c (Repository): Test version; module loaded with 
+       exception defined.
+       
+2001-01-05  Michele Comitini  <mcm@initd.net>
+
+       * Setup.in (Repository): Setup file.
+
+       * Makefile.pre.in (Repository): from the python source.
+
+2001-01-05  Michele Comitini  <mcm@initd.net>
+
+       * module.c: Written some code for defining exceptions.
+       
+       * module.h: Static variable for exceptions.
+       
+2001-01-04  Michele Comitini  <mcm@initd.net>
+
+       * Changelog: pre-release just a few prototypes to get started.
+       
+
diff --git a/psycopg2/doc/HACKING b/psycopg2/doc/HACKING
new file mode 100644 (file)
index 0000000..f60474c
--- /dev/null
@@ -0,0 +1,43 @@
+General information
+*******************
+
+Some help to people wanting to hack on psycopg. First of all, note that
+*every* function in the psycopg module source code is prefixed by one of the
+following words:
+
+    psyco is used for function directly callable from python (i.e., functions
+        in the psycopg module itself.) the only notable exception is the
+        source code for the module itself, that uses "psyco" even for C-only
+        functions.
+
+    conn is used for functions related to connection objects.
+
+    curs is used for functions related to cursor objects.
+
+    typecast is used for typecasters and utility function related to
+        typecaster creation and registration.
+
+Pythonic definition of types and functions available from python are defined
+in *_type.c files. Internal functions, callable only from C are located in
+*_int.c files and extensions to the DBAPI can be found in the *_ext.c files.
+
+
+Patches
+*******
+
+If you submit a patch, please send a diff generated with the "-u" switch.
+Also note that I don't like that much cosmetic changes (like renaming
+already existing variables) and I will rewrap the patch to 78 columns
+anyway, so it is much better if you do that beforehand.
+
+
+The type system
+***************
+
+Simple types, like integers and strings, are converted to python base types
+(the conversion functions are in typecast_base.c). Complex types are
+converted to ad-hoc types, defined in the typeobj_*.{c,h} files. The
+conversion function are in the other typecast_*.c files. typecast.c defines
+the basic utility functions (available through the psycopg module) used when
+defining new typecasters from C and python.
+
diff --git a/psycopg2/doc/SUCCESS b/psycopg2/doc/SUCCESS
new file mode 100644 (file)
index 0000000..9ae91f5
--- /dev/null
@@ -0,0 +1,114 @@
+From:  Jack Moffitt <jack@xiph.org>
+To:    Psycopg Mailing List <psycopg@lists.initd.org>
+Subject:       Re: [Psycopg] preparing for 1.0
+Date:  22 Oct 2001 11:16:21 -0600      
+
+www.vorbis.com is serving from 5-10k pages per day with psycopg serving 
+data for most of that.  
+
+I plan to use it for several of our other sites, so that number will
+increase.
+
+I've never had a single problem (that wasn't my fault) besides those
+segfaults, and those are now gone as well, and I've been using psycopg
+since June (around 0.99.2?).
+
+jack.
+
+
+From:  Yury Don <gercon@vpcit.ru>
+To:    Psycopg Mailing List <psycopg@lists.initd.org>
+Subject:       Re: [Psycopg] preparing for 1.0
+Date:  23 Oct 2001 09:53:11 +0600      
+
+We use psycopg and psycopg zope adapter since fisrt public
+release (it seems version 0.4). Now it works on 3 our sites and in intranet
+applications. We had few problems, but all problems were quckly
+solved. The strong side of psycopg is that it's code is well organized
+and easy to understand. When I found a problem with non-ISO datestyle in first
+version of psycopg, it took for me 15 or 20 minutes to learn code and
+to solve the problem, even thouth my knowledge of c were poor.
+
+BTW, segfault with dictfetchall on particular data set (see [Psycopg]
+dictfetchXXX() problems) disappeared in 0.99.8pre2.
+
+-- 
+Best regards,
+Yury Don
+
+
+From:  Tom Jenkins <tjenkins@devis.com>
+To:    Federico Di Gregorio <fog@debian.org>
+Cc:    Psycopg Mailing List <psycopg@lists.initd.org>
+Subject:       Re: [Psycopg] preparing for 1.0
+Date:  23 Oct 2001 08:25:52 -0400
+       
+The US Govt Department of Labor's Office of Disability Employment
+Policy's DisabilityDirect website is run on zope and zpsycopg.
+
+
+From:  Scott Leerssen <sleerssen@racemi.com>
+To:    Federico Di Gregorio <fog@debian.org>
+Subject:       Re: [Psycopg] preparing for 1.0
+Date:  23 Oct 2001 09:56:10 -0400      
+
+Racemi's load management software infrastructure uses psycopg to handle
+complex server allocation decisions, plus storage and access of
+environmental conditions and accounting records for potentially
+thousands of servers.  Psycopg has, to this point, been the only
+Python/PostGreSQL interface that could handle the scaling required for
+our multithreaded applications.
+
+Scott
+
+
+From:  Andre Schubert <andre.schubert@geyer.kabeljournal.de>
+To:    Federico Di Gregorio <fog@debian.org>
+Cc:    Psycopg Mailing List <psycopg@lists.initd.org>
+Subject:       Re: [Psycopg] preparing for 1.0
+Date:  23 Oct 2001 11:46:07 +0200      
+
+i have changed the psycopg version to 0.99.8pre2 on all devel-machines
+and all segfaults are gone. after my holiday i wil change to 0.99.8pre2 
+or 1.0 on our production-server.
+this server contains several web-sites which are all connected to
+postgres over ZPsycopgDA.
+
+thanks as
+
+
+From:  Fred Wilson Horch <fhorch@ecoaccess.org>
+To:    <psycopg@lists.initd.org>
+Subject:       [Psycopg] Success story for psycopg
+Date:  23 Oct 2001 10:59:17 -0400
+       
+Due to various quirks of PyGreSQL and PoPy, EcoAccess has been looking for
+a reliable, fast and relatively bug-free Python-PostgreSQL interface for
+our project.
+
+Binary support in psycopg, along with the umlimited tuple size in
+PostgreSQL 7.1, allowed us to quickly prototype a database-backed file
+storage web application, which we're using for file sharing among our
+staff and volunteers.  Using a database backend instead of a file system
+allows us to easily enrich the meta-information associated with each file
+and simplifies our data handling routines.
+
+We've been impressed by the responsiveness of the psycopg team to bug
+reports and feature requests, and we're looking forward to using psycopg
+as the Python interface for additional database-backed web applications.
+
+Keep up the good work!
+-- 
+Fred Wilson Horch                       mailto:fhorch@ecoaccess.org
+Executive Director, EcoAccess           http://ecoaccess.org/
+
+
+From:  Damon Fasching <fasching@design.lbl.gov>
+To:    Michele Comitini <mcm@glisco.it>
+Cc:    fog@debian.org
+Subject:       Re: How does one create a database within Python using psycopg?
+Date:  25 Feb 2002 17:39:41 -0800
+
+[snip]
+btw I checked out 4 different Python-PostgreSQL packages.  psycopg is the
+only one which built and imported w/o any trouble!  (At least for me.)
diff --git a/psycopg2/doc/TODO b/psycopg2/doc/TODO
new file mode 100644 (file)
index 0000000..b20b276
--- /dev/null
@@ -0,0 +1,33 @@
+TODO list for psycopg 2 or later
+********************************
+
+Move items to the DONE section only after writing a test for the
+implementation. Also add a note on how the item was resolved.
+(Obviously I was joking about the test..)
+
+* Find a better way to compile the type-casting code instead of including it
+   in typecast.c directy. (Including is not that bad, but the need to touch
+   psycopg/typecast.c every time is bad bad bad.)
+
+* executemany() should _not_ take the async flag, remove it and force multiple
+   queries to be synchronous.
+
+* Fix all the docstrings.
+
+* Support the protocols API fully.
+
+* Unify the common code in typecast_datetime.c and typecast_mxdatetime.c.
+
+* Port typecasters to new-style classes.
+
+* Write a complete postgresql<->python encodings table.
+
+* Implement binary typecasters (should be easy, but it will take time.)
+
+DONE
+====
+
+* Convert type-casters to new-style types in Python 2.2+.
+
+* callproc() never worked, fix it or remove it and raise right exception.
+   [Removed callproc code, now an exception is raised.]
diff --git a/psycopg2/doc/api-screen.css b/psycopg2/doc/api-screen.css
new file mode 100644 (file)
index 0000000..22e8f7e
--- /dev/null
@@ -0,0 +1,138 @@
+/* Based on the Epydoc "default.css"\r
+** with some missing reST-related classes\r
+** and Python syntax support (from SilverCity)\r
+*/\r
+\r
+/* Body color */ \r
+body               { background: #ffffff; color: #000000; } \r
\r
+/* Tables */ \r
+table.summary, table.details, table.index\r
+                   { background: #e8f0f8; color: #000000; } \r
+tr.summary, tr.details, tr.index\r
+                   { background: #70b0f0; color: #000000;  \r
+                     text-align: left; font-size: 120%; } \r
+tr.group           { background: #c0e0f8; color: #000000;\r
+                     text-align: left; font-size: 120%;\r
+                     font-style: italic; } \r
+\r
+/* Documentation page titles */\r
+h2.module          { margin-top: 0.2em; }\r
+h2.class           { margin-top: 0.2em; }\r
\r
+/* Headings */\r
+h1.heading         { font-size: +140%; font-style: italic;\r
+                     font-weight: bold; }\r
+h2.heading         { font-size: +125%; font-style: italic;\r
+                     font-weight: bold; }\r
+h3.heading         { font-size: +110%; font-style: italic;\r
+                     font-weight: normal; }\r
+                    \r
+/* Base tree */\r
+pre.base-tree      { font-size: 80%; margin: 0; }\r
+\r
+/* TOC */\r
+p.toc { margin: 0; }\r
+\r
+/* Details Sections */\r
+table.func-details { background: #e8f0f8; color: #000000;\r
+                     border: 2px groove #c0d0d0;\r
+                     padding: 0 1em 0 1em; margin: 0.4em 0 0 0; }\r
+h3.func-detail     { background: transparent; color: #000000;\r
+                     margin: 0 0 1em 0; }\r
+\r
+table.var-details  { background: #e8f0f8; color: #000000;\r
+                     border: 2px groove #c0d0d0;\r
+                     padding: 0 1em 0 1em; margin: 0.4em 0 0 0; }\r
+h3.var-details     { background: transparent; color: #000000;\r
+                     margin: 0 0 1em 0; }\r
+\r
+/* Function signatures */\r
+.sig               { background: transparent; color: #000000;\r
+                     font-weight: bold; }  \r
+.sig-name          { background: transparent; color: #006080; }  \r
+.sig-arg, .sig-kwarg, .sig-vararg\r
+                   { background: transparent; color: #008060; }  \r
+.sig-default       { background: transparent; color: #602000; }  \r
+.summary-sig       { background: transparent; color: #000000; }  \r
+.summary-sig-name  { background: transparent; color: #204080; }\r
+.summary-sig-arg, .summary-sig-kwarg, .summary-sig-vararg\r
+                   { background: transparent; color: #008060; }  \r
+\r
+/* Doctest blocks */\r
+.py-src            { background: transparent; color: #000000; }\r
+.py-prompt         { background: transparent; color: #005050;\r
+                     font-weight: bold;}\r
+.py-string         { background: transparent; color: #006030; }\r
+.py-comment        { background: transparent; color: #003060; }\r
+.py-keyword        { background: transparent; color: #600000; }\r
+.py-output         { background: transparent; color: #404040; }\r
+div.code-block,\r
+pre.literal-block,\r
+pre.doctestblock   { background: #f4faff; color: #000000; \r
+                     padding: .5em; margin: 1em;\r
+                     border: 1px solid #708890; }\r
+table pre.doctestblock\r
+                   { background: #dce4ec; color: #000000; \r
+                     padding: .5em; margin: 1em;\r
+                     border: 1px solid #708890; }\r
+div.code-block     { font-family: monospace; }\r
+\r
+/* Variable values */\r
+pre.variable       { background: #dce4ec; color: #000000;\r
+                     padding: .5em; margin: 0;\r
+                     border: 1px solid #708890; }\r
+.variable-linewrap { background: transparent; color: #604000; }\r
+.variable-ellipsis { background: transparent; color: #604000; }\r
+.variable-quote    { background: transparent; color: #604000; }\r
+.re                { background: transparent; color: #000000; }\r
+.re-char           { background: transparent; color: #006030; }\r
+.re-op             { background: transparent; color: #600000; }\r
+.re-group          { background: transparent; color: #003060; }\r
+.re-ref            { background: transparent; color: #404040; }\r
+\r
+/* Navigation bar */ \r
+table.navbar       { background: #a0c0ff; color: #0000ff;\r
+                     border: 2px groove #c0d0d0; }\r
+th.navbar          { background: #a0c0ff; color: #0000ff; } \r
+th.navselect       { background: #70b0ff; color: #000000; } \r
+.nomargin          { margin: 0; }\r
+\r
+/* Links */ \r
+a:link             { background: transparent; color: #0000ff; }  \r
+a:visited          { background: transparent; color: #204080; }  \r
+a.navbar:link      { background: transparent; color: #0000ff; \r
+                     text-decoration: none; }  \r
+a.navbar:visited   { background: transparent; color: #204080; \r
+                     text-decoration: none; }  \r
+\r
+/* Admonitions */\r
+div.warning,\r
+div.note                { background-color: #c0e0f8;\r
+                          border: thin solid black;\r
+                          padding: 1em;\r
+                          margin-left: 1em;\r
+                          margin-right: 1em; }\r
+div.warning .first,\r
+div.note .first      { font-family: sans-serif;\r
+                          font-size: 110%;\r
+                          margin-right: 0.5em; }\r
+\r
+/* Lists */\r
+ul { margin-top: 0; }\r
+\r
+/* Python syntax */\r
+.p_character { color: olive; }\r
+.p_classname { color: blue; font-weight: bold; }\r
+.p_commentblock {color: gray; font-style: italic; }\r
+.p_commentline { color: green; font-style: italic; }\r
+.p_default {}\r
+.p_defname { color: #009999; font-weight: bold; }\r
+.p_identifier { color: black; }\r
+.p_number { color: #009999; }\r
+.p_operator { color: black; }\r
+.p_string { color: #7F007F; }\r
+.p_stringeol { color: #7F007F; }\r
+.p_triple { color: #7F0000; }\r
+.p_tripledouble { color: #7F0000; }\r
+.p_word { color: navy; font-weight: bold; }\r
diff --git a/psycopg2/doc/api/epydoc.css b/psycopg2/doc/api/epydoc.css
new file mode 100644 (file)
index 0000000..22e8f7e
--- /dev/null
@@ -0,0 +1,138 @@
+/* Based on the Epydoc "default.css"\r
+** with some missing reST-related classes\r
+** and Python syntax support (from SilverCity)\r
+*/\r
+\r
+/* Body color */ \r
+body               { background: #ffffff; color: #000000; } \r
\r
+/* Tables */ \r
+table.summary, table.details, table.index\r
+                   { background: #e8f0f8; color: #000000; } \r
+tr.summary, tr.details, tr.index\r
+                   { background: #70b0f0; color: #000000;  \r
+                     text-align: left; font-size: 120%; } \r
+tr.group           { background: #c0e0f8; color: #000000;\r
+                     text-align: left; font-size: 120%;\r
+                     font-style: italic; } \r
+\r
+/* Documentation page titles */\r
+h2.module          { margin-top: 0.2em; }\r
+h2.class           { margin-top: 0.2em; }\r
\r
+/* Headings */\r
+h1.heading         { font-size: +140%; font-style: italic;\r
+                     font-weight: bold; }\r
+h2.heading         { font-size: +125%; font-style: italic;\r
+                     font-weight: bold; }\r
+h3.heading         { font-size: +110%; font-style: italic;\r
+                     font-weight: normal; }\r
+                    \r
+/* Base tree */\r
+pre.base-tree      { font-size: 80%; margin: 0; }\r
+\r
+/* TOC */\r
+p.toc { margin: 0; }\r
+\r
+/* Details Sections */\r
+table.func-details { background: #e8f0f8; color: #000000;\r
+                     border: 2px groove #c0d0d0;\r
+                     padding: 0 1em 0 1em; margin: 0.4em 0 0 0; }\r
+h3.func-detail     { background: transparent; color: #000000;\r
+                     margin: 0 0 1em 0; }\r
+\r
+table.var-details  { background: #e8f0f8; color: #000000;\r
+                     border: 2px groove #c0d0d0;\r
+                     padding: 0 1em 0 1em; margin: 0.4em 0 0 0; }\r
+h3.var-details     { background: transparent; color: #000000;\r
+                     margin: 0 0 1em 0; }\r
+\r
+/* Function signatures */\r
+.sig               { background: transparent; color: #000000;\r
+                     font-weight: bold; }  \r
+.sig-name          { background: transparent; color: #006080; }  \r
+.sig-arg, .sig-kwarg, .sig-vararg\r
+                   { background: transparent; color: #008060; }  \r
+.sig-default       { background: transparent; color: #602000; }  \r
+.summary-sig       { background: transparent; color: #000000; }  \r
+.summary-sig-name  { background: transparent; color: #204080; }\r
+.summary-sig-arg, .summary-sig-kwarg, .summary-sig-vararg\r
+                   { background: transparent; color: #008060; }  \r
+\r
+/* Doctest blocks */\r
+.py-src            { background: transparent; color: #000000; }\r
+.py-prompt         { background: transparent; color: #005050;\r
+                     font-weight: bold;}\r
+.py-string         { background: transparent; color: #006030; }\r
+.py-comment        { background: transparent; color: #003060; }\r
+.py-keyword        { background: transparent; color: #600000; }\r
+.py-output         { background: transparent; color: #404040; }\r
+div.code-block,\r
+pre.literal-block,\r
+pre.doctestblock   { background: #f4faff; color: #000000; \r
+                     padding: .5em; margin: 1em;\r
+                     border: 1px solid #708890; }\r
+table pre.doctestblock\r
+                   { background: #dce4ec; color: #000000; \r
+                     padding: .5em; margin: 1em;\r
+                     border: 1px solid #708890; }\r
+div.code-block     { font-family: monospace; }\r
+\r
+/* Variable values */\r
+pre.variable       { background: #dce4ec; color: #000000;\r
+                     padding: .5em; margin: 0;\r
+                     border: 1px solid #708890; }\r
+.variable-linewrap { background: transparent; color: #604000; }\r
+.variable-ellipsis { background: transparent; color: #604000; }\r
+.variable-quote    { background: transparent; color: #604000; }\r
+.re                { background: transparent; color: #000000; }\r
+.re-char           { background: transparent; color: #006030; }\r
+.re-op             { background: transparent; color: #600000; }\r
+.re-group          { background: transparent; color: #003060; }\r
+.re-ref            { background: transparent; color: #404040; }\r
+\r
+/* Navigation bar */ \r
+table.navbar       { background: #a0c0ff; color: #0000ff;\r
+                     border: 2px groove #c0d0d0; }\r
+th.navbar          { background: #a0c0ff; color: #0000ff; } \r
+th.navselect       { background: #70b0ff; color: #000000; } \r
+.nomargin          { margin: 0; }\r
+\r
+/* Links */ \r
+a:link             { background: transparent; color: #0000ff; }  \r
+a:visited          { background: transparent; color: #204080; }  \r
+a.navbar:link      { background: transparent; color: #0000ff; \r
+                     text-decoration: none; }  \r
+a.navbar:visited   { background: transparent; color: #204080; \r
+                     text-decoration: none; }  \r
+\r
+/* Admonitions */\r
+div.warning,\r
+div.note                { background-color: #c0e0f8;\r
+                          border: thin solid black;\r
+                          padding: 1em;\r
+                          margin-left: 1em;\r
+                          margin-right: 1em; }\r
+div.warning .first,\r
+div.note .first      { font-family: sans-serif;\r
+                          font-size: 110%;\r
+                          margin-right: 0.5em; }\r
+\r
+/* Lists */\r
+ul { margin-top: 0; }\r
+\r
+/* Python syntax */\r
+.p_character { color: olive; }\r
+.p_classname { color: blue; font-weight: bold; }\r
+.p_commentblock {color: gray; font-style: italic; }\r
+.p_commentline { color: green; font-style: italic; }\r
+.p_default {}\r
+.p_defname { color: #009999; font-weight: bold; }\r
+.p_identifier { color: black; }\r
+.p_number { color: #009999; }\r
+.p_operator { color: black; }\r
+.p_string { color: #7F007F; }\r
+.p_stringeol { color: #7F007F; }\r
+.p_triple { color: #7F0000; }\r
+.p_tripledouble { color: #7F0000; }\r
+.p_word { color: navy; font-weight: bold; }\r
diff --git a/psycopg2/doc/api/index.html b/psycopg2/doc/api/index.html
new file mode 100644 (file)
index 0000000..419bbcf
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"\r
+          "DTD/xhtml1-frameset.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title> API Documentation </title>\r
+</head>\r
+<frameset cols="20%,80%">\r
+  <frameset rows="30%,70%">\r
+    <frame src="public/toc.html" name="moduleListFrame" id="moduleListFrame" />\r
+    <frame src="public/toc-everything.html" name="moduleFrame" id="moduleFrame" />\r
+  </frameset>\r
+  <frame src="public/psycopg2-module.html" name="mainFrame" id="mainFrame" />\r
+</frameset>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/__builtin__.list-class.html b/psycopg2/doc/api/private/__builtin__.list-class.html
new file mode 100644 (file)
index 0000000..c8217a7
--- /dev/null
@@ -0,0 +1,817 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>__builtin__.list</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        Module&nbsp;__builtin__ ::\r
+        Class&nbsp;list\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/__builtin__.list-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="__builtin__.list-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type list</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+\r
+         |\r
+        <strong class="uidshort">list</strong>\r
+</pre><br />\r
+\r
+<dl><dt>Known Subclasses:</dt>\r
+<dd>\r
+    <a href="psycopg2.extras.DictRow-class.html"><code>DictRow</code></a></dd></dl>\r
+\r
+<hr/>\r
+\r
+<p>list() -&gt; new list\r
+list(sequence) -&gt; new list initialized from sequence's items</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__add__"></a><span class="summary-sig"><span class="summary-sig-name">__add__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x+y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__contains__"></a><span class="summary-sig"><span class="summary-sig-name">__contains__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return y in x...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__delitem__"></a><span class="summary-sig"><span class="summary-sig-name">__delitem__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return del x[y]...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__delslice__" class="summary-sig-name"><code>__delslice__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">i</span>,\r
+          <span class="summary-sig-arg">j</span>)</span></code>\r
+<br />\r
+Use of negative indices is not supported.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__eq__"></a><span class="summary-sig"><span class="summary-sig-name">__eq__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x==y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__ge__"></a><span class="summary-sig"><span class="summary-sig-name">__ge__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x&gt;=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__getitem__"></a><span class="summary-sig"><span class="summary-sig-name">__getitem__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x[y]...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__getslice__" class="summary-sig-name"><code>__getslice__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">i</span>,\r
+          <span class="summary-sig-arg">j</span>)</span></code>\r
+<br />\r
+Use of negative indices is not supported.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__gt__"></a><span class="summary-sig"><span class="summary-sig-name">__gt__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x&gt;y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__hash__"></a><span class="summary-sig"><span class="summary-sig-name">__hash__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__iadd__"></a><span class="summary-sig"><span class="summary-sig-name">__iadd__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x+=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__imul__"></a><span class="summary-sig"><span class="summary-sig-name">__imul__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x*=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__iter__"></a><span class="summary-sig"><span class="summary-sig-name">__iter__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return iter(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__le__"></a><span class="summary-sig"><span class="summary-sig-name">__le__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x&lt;=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__len__"></a><span class="summary-sig"><span class="summary-sig-name">__len__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return len(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__lt__"></a><span class="summary-sig"><span class="summary-sig-name">__lt__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x&lt;y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__mul__"></a><span class="summary-sig"><span class="summary-sig-name">__mul__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">n</span>)</span></code>\r
+<br />\r
+Return x*n...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__ne__"></a><span class="summary-sig"><span class="summary-sig-name">__ne__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x!=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__new__"></a><span class="summary-sig"><span class="summary-sig-name">__new__</span>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__repr__"></a><span class="summary-sig"><span class="summary-sig-name">__repr__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__rmul__"></a><span class="summary-sig"><span class="summary-sig-name">__rmul__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">n</span>)</span></code>\r
+<br />\r
+Return n*x...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__setitem__"></a><span class="summary-sig"><span class="summary-sig-name">__setitem__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">i</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x[i]=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__setslice__" class="summary-sig-name"><code>__setslice__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">i</span>,\r
+          <span class="summary-sig-arg">j</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Use  of negative indices is not supported.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#append" class="summary-sig-name"><code>append</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">object</span>)</span></code>\r
+<br />\r
+append object to end</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#count" class="summary-sig-name"><code>count</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">value</span>)</span></code>\r
+<br />\r
+return number of occurrences of value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#extend" class="summary-sig-name"><code>extend</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">iterable</span>)</span></code>\r
+<br />\r
+extend list by appending elements from the iterable</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#index" class="summary-sig-name"><code>index</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+L.index(value, [start, [stop]]) -&gt; integer -- return first index of value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#insert" class="summary-sig-name"><code>insert</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">index</span>,\r
+          <span class="summary-sig-arg">object</span>)</span></code>\r
+<br />\r
+insert object before index</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#pop" class="summary-sig-name"><code>pop</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">index</span>)</span></code>\r
+<br />\r
+remove and return item at index (default last)</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#remove" class="summary-sig-name"><code>remove</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">value</span>)</span></code>\r
+<br />\r
+remove first occurrence of value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#reverse" class="summary-sig-name"><code>reverse</code></a>(<span class="summary-sig-arg">L</span>)</span></code>\r
+<br />\r
+reverse <em>IN PLACE</em></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#sort" class="summary-sig-name"><code>sort</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">cmpfunc</span>)</span></code>\r
+<br />\r
+stable sort <em>IN PLACE</em>; cmpfunc(x, y) -&gt; -1, 0, 1</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__init__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-vararg">...</span>)</span>\r
+    <br /><em class="fname">(Constructor)</em>\r
+  </h3>\r
+<p>x.__init__(...) initializes x; see x.__class__.__doc__ for signature</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__init__"><code>__builtin__.object.__init__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__add__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__add__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Addition operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x+y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__contains__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__contains__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(In operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+y in x\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__delitem__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__delitem__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Index deletion operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+del x[y]\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__delslice__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__delslice__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">i</span>,\r
+          <span class="sig-arg">j</span>)</span>\r
+    <br /><em class="fname">(Slice deletion operator)</em>\r
+  </h3>\r
+<p>Use of negative indices is not supported.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+del x[i:j]\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__eq__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__eq__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Equality operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x==y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__ge__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__ge__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Greater-than-or-equals operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x&gt;=y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__getattribute__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__getattribute__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>x.__getattribute__('name') &lt;==&gt; x.name</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__getattribute__"><code>__builtin__.object.__getattribute__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__getitem__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__getitem__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Indexing operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x[y]\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__getslice__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__getslice__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">i</span>,\r
+          <span class="sig-arg">j</span>)</span>\r
+    <br /><em class="fname">(Slicling operator)</em>\r
+  </h3>\r
+<p>Use of negative indices is not supported.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x[i:j]\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__gt__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__gt__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Greater-than operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x&gt;y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__hash__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__hash__</span>(<span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Hashing function)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+hash(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__hash__"><code>__builtin__.object.__hash__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__iadd__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__iadd__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x+=y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__imul__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__imul__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x*=y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__iter__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__iter__</span>(<span class="sig-arg">x</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+iter(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__le__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__le__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Less-than-or-equals operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x&lt;=y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__len__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__len__</span>(<span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Length operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+len(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__lt__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__lt__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Less-than operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x&lt;y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__mul__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__mul__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">n</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x*n\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__ne__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__ne__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Inequality operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x!=y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__new__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__new__</span>(<span class="sig-arg">T</span>,\r
+          <span class="sig-arg">S</span>,\r
+          <span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+a new object with type S, a subtype of T\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__new__"><code>__builtin__.object.__new__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__repr__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__repr__</span>(<span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Representation operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+repr(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__repr__"><code>__builtin__.object.__repr__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__rmul__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__rmul__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">n</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+n*x\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__setitem__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__setitem__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">i</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Index assignment operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x[i]=y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__setslice__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__setslice__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">i</span>,\r
+          <span class="sig-arg">j</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Slice assignment operator)</em>\r
+  </h3>\r
+<p>Use  of negative indices is not supported.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x[i:j]=y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="append"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">append</span>(<span class="sig-arg">L</span>,\r
+          <span class="sig-arg">object</span>)</span>\r
+  </h3>\r
+<p>append object to end</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="count"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">count</span>(<span class="sig-arg">L</span>,\r
+          <span class="sig-arg">value</span>)</span>\r
+  </h3>\r
+<p>return number of occurrences of value</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+integer\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="extend"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">extend</span>(<span class="sig-arg">L</span>,\r
+          <span class="sig-arg">iterable</span>)</span>\r
+  </h3>\r
+<p>extend list by appending elements from the iterable</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="index"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">index</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>L.index(value, [start, [stop]]) -&gt; integer -- return first index of value</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="insert"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">insert</span>(<span class="sig-arg">L</span>,\r
+          <span class="sig-arg">index</span>,\r
+          <span class="sig-arg">object</span>)</span>\r
+  </h3>\r
+<p>insert object before index</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="pop"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">pop</span>(<span class="sig-arg">L</span>,\r
+          <span class="sig-arg">index</span>=<span class="sig-default">...</span>)</span>\r
+  </h3>\r
+<p>remove and return item at index (default last)</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+item\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="remove"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">remove</span>(<span class="sig-arg">L</span>,\r
+          <span class="sig-arg">value</span>)</span>\r
+  </h3>\r
+<p>remove first occurrence of value</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="reverse"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">reverse</span>(<span class="sig-arg">L</span>)</span>\r
+  </h3>\r
+<p>reverse <em>IN PLACE</em></p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="sort"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">sort</span>(<span class="sig-arg">L</span>,\r
+          <span class="sig-arg">cmpfunc</span>=<span class="sig-default">None</span>)</span>\r
+  </h3>\r
+<p>stable sort <em>IN PLACE</em>; cmpfunc(x, y) -&gt; -1, 0, 1</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:32 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/__builtin__.object-class.html b/psycopg2/doc/api/private/__builtin__.object-class.html
new file mode 100644 (file)
index 0000000..08d0af6
--- /dev/null
@@ -0,0 +1,270 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>__builtin__.object</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        Module&nbsp;__builtin__ ::\r
+        Class&nbsp;object\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/__builtin__.object-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="__builtin__.object-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type object</h2>\r
+\r
+<dl><dt>Known Subclasses:</dt>\r
+<dd>\r
+    <a href="psycopg2.pool.AbstractConnectionPool-class.html"><code>AbstractConnectionPool</code></a>,\r
+    <a href="__builtin__.list-class.html"><code>list</code></a>,\r
+    <a href="psycopg2.extras.SQL_IN-class.html"><code>SQL_IN</code></a>,\r
+    <a href="__builtin__.type-class.html"><code>type</code></a>,\r
+    <a href="datetime.tzinfo-class.html"><code>tzinfo</code></a>,\r
+    <a href="../private/psycopg2._psycopg.connection-class.html"><code>connection</code></a>,\r
+    <a href="../private/psycopg2._psycopg.cursor-class.html"><code>cursor</code></a>,\r
+    <a href="../private/psycopg2._psycopg.ISQLQuote-class.html"><code>ISQLQuote</code></a></dd></dl>\r
+\r
+<hr/>\r
+\r
+<p>The most base type</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__hash__"></a><span class="summary-sig"><span class="summary-sig-name">__hash__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__new__"></a><span class="summary-sig"><span class="summary-sig-name">__new__</span>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__repr__"></a><span class="summary-sig"><span class="summary-sig-name">__repr__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__str__"></a><span class="summary-sig"><span class="summary-sig-name">__str__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF CLASS VARIABLE SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Class Variable Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+  <td><a name="__class__"></a><strong><code class="vname">__class__</code></strong> = <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__init__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-vararg">...</span>)</span>\r
+    <br /><em class="fname">(Constructor)</em>\r
+  </h3>\r
+<p>x.__init__(...) initializes x; see x.__class__.__doc__ for signature</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__delattr__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__delattr__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>x.__delattr__('name') &lt;==&gt; del x.name</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__getattribute__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__getattribute__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>x.__getattribute__('name') &lt;==&gt; x.name</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__hash__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__hash__</span>(<span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Hashing function)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+hash(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__new__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__new__</span>(<span class="sig-arg">T</span>,\r
+          <span class="sig-arg">S</span>,\r
+          <span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+a new object with type S, a subtype of T\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__reduce__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__reduce__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>helper for pickle</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__reduce_ex__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__reduce_ex__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>helper for pickle</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__repr__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__repr__</span>(<span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Representation operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+repr(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__setattr__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__setattr__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>x.__setattr__('name', value) &lt;==&gt; x.name = value</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__str__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Informal representation operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+str(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/__builtin__.type-class.html b/psycopg2/doc/api/private/__builtin__.type-class.html
new file mode 100644 (file)
index 0000000..b388e76
--- /dev/null
@@ -0,0 +1,384 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>__builtin__.type</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        Module&nbsp;__builtin__ ::\r
+        Class&nbsp;type\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/__builtin__.type-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="__builtin__.type-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type type</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+\r
+         |\r
+        <strong class="uidshort">type</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>type(object) -&gt; the object's type\r
+type(name, bases, dict) -&gt; a new type</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__call__"></a><span class="summary-sig"><span class="summary-sig-name">__call__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return x(...)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__cmp__"></a><span class="summary-sig"><span class="summary-sig-name">__cmp__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return cmp(x,y)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.type-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.type-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__hash__"></a><span class="summary-sig"><span class="summary-sig-name">__hash__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__new__"></a><span class="summary-sig"><span class="summary-sig-name">__new__</span>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__repr__"></a><span class="summary-sig"><span class="summary-sig-name">__repr__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.type-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">list of immediate subclasses</td>\r
+  <td><code><a name="__subclasses__"></a><span class="summary-sig"><span class="summary-sig-name">__subclasses__</span>()</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">list</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.type-class.html#mro" class="summary-sig-name"><code>mro</code></a>()</span></code>\r
+<br />\r
+return a type's method resolution order</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF PROPERTY SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Property Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="__base__"></a><strong><code>__base__</code></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="__basicsize__"></a><strong><code>__basicsize__</code></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="__dictoffset__"></a><strong><code>__dictoffset__</code></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="__flags__"></a><strong><code>__flags__</code></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="__itemsize__"></a><strong><code>__itemsize__</code></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="__mro__"></a><strong><code>__mro__</code></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="__weakrefoffset__"></a><strong><code>__weakrefoffset__</code></strong></td></tr></table><br />\r
+\r
+\r
+<!-- =========== START OF CLASS VARIABLE SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Class Variable Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>tuple</code></td>\r
+<td><strong><a href="__builtin__.type-class.html#__bases__"><code>__bases__</code></a></strong> = <span title="(&lt;type 'object'&gt;,)"><code>(&lt;type&nbsp;'object'&gt;,)                           </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>str</code></td>\r
+<td><strong><a href="__builtin__.type-class.html#__name__"><code>__name__</code></a></strong> = <span title="'type'"><code><span class="variable-quote">'</span>type<span class="variable-quote">'</span>                                        </code>\r
+</span></td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__call__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__call__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-vararg">...</span>)</span>\r
+    <br /><em class="fname">(Call operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x(...)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__cmp__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__cmp__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Comparison operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+cmp(x,y)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__delattr__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__delattr__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>x.__delattr__('name') &lt;==&gt; del x.name</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__delattr__"><code>__builtin__.object.__delattr__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__getattribute__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__getattribute__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>x.__getattribute__('name') &lt;==&gt; x.name</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__getattribute__"><code>__builtin__.object.__getattribute__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__hash__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__hash__</span>(<span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Hashing function)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+hash(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__hash__"><code>__builtin__.object.__hash__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__new__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__new__</span>(<span class="sig-arg">T</span>,\r
+          <span class="sig-arg">S</span>,\r
+          <span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+a new object with type S, a subtype of T\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__new__"><code>__builtin__.object.__new__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__repr__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__repr__</span>(<span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Representation operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+repr(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__repr__"><code>__builtin__.object.__repr__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__setattr__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__setattr__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>x.__setattr__('name', value) &lt;==&gt; x.name = value</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__setattr__"><code>__builtin__.object.__setattr__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__subclasses__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__subclasses__</span>()</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+list of immediate subclasses      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="mro"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">mro</span>()</span>\r
+  </h3>\r
+<p>return a type's method resolution order</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+list      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF CLASS VARIABLE DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Class Variable Details</th></tr>\r
+</table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="__bases__"></a>\r
+<h3>__bases__</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>tuple</code>\r
+\r
+      </dd>\r
+      <dt title="(&lt;type 'object'&gt;,)">Value:</dt>\r
+      <dd title="(&lt;type 'object'&gt;,)"><table><tr><td>\r
+<pre class="variable">\r
+(&lt;type 'object'&gt;,)                                                     </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="__name__"></a>\r
+<h3>__name__</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>str</code>\r
+\r
+      </dd>\r
+      <dt title="'type'">Value:</dt>\r
+      <dd title="'type'"><table><tr><td>\r
+<pre class="variable">\r
+<span class="variable-quote">'</span>type<span class="variable-quote">'</span>                                                                 </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:34 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/datetime.tzinfo-class.html b/psycopg2/doc/api/private/datetime.tzinfo-class.html
new file mode 100644 (file)
index 0000000..337ac1a
--- /dev/null
@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>datetime.tzinfo</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        Module&nbsp;datetime ::\r
+        Class&nbsp;tzinfo\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/datetime.tzinfo-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="datetime.tzinfo-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type tzinfo</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+\r
+         |\r
+        <strong class="uidshort">tzinfo</strong>\r
+</pre><br />\r
+\r
+<dl><dt>Known Subclasses:</dt>\r
+<dd>\r
+    <a href="psycopg2.tz.FixedOffsetTimezone-class.html"><code>FixedOffsetTimezone</code></a>,\r
+    <a href="psycopg2.tz.LocalTimezone-class.html"><code>LocalTimezone</code></a></dd></dl>\r
+\r
+<hr/>\r
+\r
+<p>Abstract base class for time zone info objects.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__new__"></a><span class="summary-sig"><span class="summary-sig-name">__new__</span>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+-&gt; (cls, state)</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#dst" class="summary-sig-name"><code>dst</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+datetime -&gt; DST offset in minutes east of UTC.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#fromutc" class="summary-sig-name"><code>fromutc</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+datetime in UTC -&gt; datetime in local time.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#tzname" class="summary-sig-name"><code>tzname</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+datetime -&gt; string name of time zone.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#utcoffset" class="summary-sig-name"><code>utcoffset</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+datetime -&gt; minutes east of UTC (negative for west of UTC).</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__getattribute__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__getattribute__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>x.__getattribute__('name') &lt;==&gt; x.name</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__getattribute__"><code>__builtin__.object.__getattribute__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__new__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__new__</span>(<span class="sig-arg">T</span>,\r
+          <span class="sig-arg">S</span>,\r
+          <span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+a new object with type S, a subtype of T\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__new__"><code>__builtin__.object.__new__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__reduce__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__reduce__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>-&gt; (cls, state)</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__reduce__"><code>__builtin__.object.__reduce__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="dst"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">dst</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>datetime -&gt; DST offset in minutes east of UTC.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="fromutc"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">fromutc</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>datetime in UTC -&gt; datetime in local time.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="tzname"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">tzname</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>datetime -&gt; string name of time zone.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="utcoffset"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">utcoffset</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>datetime -&gt; minutes east of UTC (negative for west of UTC).</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/epydoc.css b/psycopg2/doc/api/private/epydoc.css
new file mode 100644 (file)
index 0000000..22e8f7e
--- /dev/null
@@ -0,0 +1,138 @@
+/* Based on the Epydoc "default.css"\r
+** with some missing reST-related classes\r
+** and Python syntax support (from SilverCity)\r
+*/\r
+\r
+/* Body color */ \r
+body               { background: #ffffff; color: #000000; } \r
\r
+/* Tables */ \r
+table.summary, table.details, table.index\r
+                   { background: #e8f0f8; color: #000000; } \r
+tr.summary, tr.details, tr.index\r
+                   { background: #70b0f0; color: #000000;  \r
+                     text-align: left; font-size: 120%; } \r
+tr.group           { background: #c0e0f8; color: #000000;\r
+                     text-align: left; font-size: 120%;\r
+                     font-style: italic; } \r
+\r
+/* Documentation page titles */\r
+h2.module          { margin-top: 0.2em; }\r
+h2.class           { margin-top: 0.2em; }\r
\r
+/* Headings */\r
+h1.heading         { font-size: +140%; font-style: italic;\r
+                     font-weight: bold; }\r
+h2.heading         { font-size: +125%; font-style: italic;\r
+                     font-weight: bold; }\r
+h3.heading         { font-size: +110%; font-style: italic;\r
+                     font-weight: normal; }\r
+                    \r
+/* Base tree */\r
+pre.base-tree      { font-size: 80%; margin: 0; }\r
+\r
+/* TOC */\r
+p.toc { margin: 0; }\r
+\r
+/* Details Sections */\r
+table.func-details { background: #e8f0f8; color: #000000;\r
+                     border: 2px groove #c0d0d0;\r
+                     padding: 0 1em 0 1em; margin: 0.4em 0 0 0; }\r
+h3.func-detail     { background: transparent; color: #000000;\r
+                     margin: 0 0 1em 0; }\r
+\r
+table.var-details  { background: #e8f0f8; color: #000000;\r
+                     border: 2px groove #c0d0d0;\r
+                     padding: 0 1em 0 1em; margin: 0.4em 0 0 0; }\r
+h3.var-details     { background: transparent; color: #000000;\r
+                     margin: 0 0 1em 0; }\r
+\r
+/* Function signatures */\r
+.sig               { background: transparent; color: #000000;\r
+                     font-weight: bold; }  \r
+.sig-name          { background: transparent; color: #006080; }  \r
+.sig-arg, .sig-kwarg, .sig-vararg\r
+                   { background: transparent; color: #008060; }  \r
+.sig-default       { background: transparent; color: #602000; }  \r
+.summary-sig       { background: transparent; color: #000000; }  \r
+.summary-sig-name  { background: transparent; color: #204080; }\r
+.summary-sig-arg, .summary-sig-kwarg, .summary-sig-vararg\r
+                   { background: transparent; color: #008060; }  \r
+\r
+/* Doctest blocks */\r
+.py-src            { background: transparent; color: #000000; }\r
+.py-prompt         { background: transparent; color: #005050;\r
+                     font-weight: bold;}\r
+.py-string         { background: transparent; color: #006030; }\r
+.py-comment        { background: transparent; color: #003060; }\r
+.py-keyword        { background: transparent; color: #600000; }\r
+.py-output         { background: transparent; color: #404040; }\r
+div.code-block,\r
+pre.literal-block,\r
+pre.doctestblock   { background: #f4faff; color: #000000; \r
+                     padding: .5em; margin: 1em;\r
+                     border: 1px solid #708890; }\r
+table pre.doctestblock\r
+                   { background: #dce4ec; color: #000000; \r
+                     padding: .5em; margin: 1em;\r
+                     border: 1px solid #708890; }\r
+div.code-block     { font-family: monospace; }\r
+\r
+/* Variable values */\r
+pre.variable       { background: #dce4ec; color: #000000;\r
+                     padding: .5em; margin: 0;\r
+                     border: 1px solid #708890; }\r
+.variable-linewrap { background: transparent; color: #604000; }\r
+.variable-ellipsis { background: transparent; color: #604000; }\r
+.variable-quote    { background: transparent; color: #604000; }\r
+.re                { background: transparent; color: #000000; }\r
+.re-char           { background: transparent; color: #006030; }\r
+.re-op             { background: transparent; color: #600000; }\r
+.re-group          { background: transparent; color: #003060; }\r
+.re-ref            { background: transparent; color: #404040; }\r
+\r
+/* Navigation bar */ \r
+table.navbar       { background: #a0c0ff; color: #0000ff;\r
+                     border: 2px groove #c0d0d0; }\r
+th.navbar          { background: #a0c0ff; color: #0000ff; } \r
+th.navselect       { background: #70b0ff; color: #000000; } \r
+.nomargin          { margin: 0; }\r
+\r
+/* Links */ \r
+a:link             { background: transparent; color: #0000ff; }  \r
+a:visited          { background: transparent; color: #204080; }  \r
+a.navbar:link      { background: transparent; color: #0000ff; \r
+                     text-decoration: none; }  \r
+a.navbar:visited   { background: transparent; color: #204080; \r
+                     text-decoration: none; }  \r
+\r
+/* Admonitions */\r
+div.warning,\r
+div.note                { background-color: #c0e0f8;\r
+                          border: thin solid black;\r
+                          padding: 1em;\r
+                          margin-left: 1em;\r
+                          margin-right: 1em; }\r
+div.warning .first,\r
+div.note .first      { font-family: sans-serif;\r
+                          font-size: 110%;\r
+                          margin-right: 0.5em; }\r
+\r
+/* Lists */\r
+ul { margin-top: 0; }\r
+\r
+/* Python syntax */\r
+.p_character { color: olive; }\r
+.p_classname { color: blue; font-weight: bold; }\r
+.p_commentblock {color: gray; font-style: italic; }\r
+.p_commentline { color: green; font-style: italic; }\r
+.p_default {}\r
+.p_defname { color: #009999; font-weight: bold; }\r
+.p_identifier { color: black; }\r
+.p_number { color: #009999; }\r
+.p_operator { color: black; }\r
+.p_string { color: #7F007F; }\r
+.p_stringeol { color: #7F007F; }\r
+.p_triple { color: #7F0000; }\r
+.p_tripledouble { color: #7F0000; }\r
+.p_word { color: navy; font-weight: bold; }\r
diff --git a/psycopg2/doc/api/private/exceptions.Exception-class.html b/psycopg2/doc/api/private/exceptions.Exception-class.html
new file mode 100644 (file)
index 0000000..3064c51
--- /dev/null
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>exceptions.Exception</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        Module&nbsp;exceptions ::\r
+        Class&nbsp;Exception\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/exceptions.Exception-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="exceptions.Exception-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class Exception</h2>\r
+\r
+<dl><dt>Known Subclasses:</dt>\r
+<dd>\r
+    <a href="exceptions.StandardError-class.html"><code>StandardError</code></a></dd></dl>\r
+\r
+<hr/>\r
+\r
+<p>Common base class for all exceptions.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__init__"></a><span class="summary-sig"><span class="summary-sig-name">__init__</span>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__getitem__"></a><span class="summary-sig"><span class="summary-sig-name">__getitem__</span>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__str__"></a><span class="summary-sig"><span class="summary-sig-name">__str__</span>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__init__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-vararg">...</span>)</span>\r
+    <br /><em class="fname">(Constructor)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__getitem__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__getitem__</span>(<span class="sig-vararg">...</span>)</span>\r
+    <br /><em class="fname">(Indexing operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__str__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-vararg">...</span>)</span>\r
+    <br /><em class="fname">(Informal representation operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:35 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/exceptions.StandardError-class.html b/psycopg2/doc/api/private/exceptions.StandardError-class.html
new file mode 100644 (file)
index 0000000..1b491dd
--- /dev/null
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>exceptions.StandardError</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        Module&nbsp;exceptions ::\r
+        Class&nbsp;StandardError\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/exceptions.StandardError-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="exceptions.StandardError-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class StandardError</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+\r
+            |\r
+           <strong class="uidshort">StandardError</strong>\r
+</pre><br />\r
+\r
+<dl><dt>Known Subclasses:</dt>\r
+<dd>\r
+    <a href="psycopg2.Error-class.html"><code>Error</code></a>,\r
+    <a href="psycopg2.Warning-class.html"><code>Warning</code></a></dd></dl>\r
+\r
+<hr/>\r
+\r
+<p>Base class for all standard Python exceptions.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/frames.html b/psycopg2/doc/api/private/frames.html
new file mode 100644 (file)
index 0000000..ffd6536
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"\r
+          "DTD/xhtml1-frameset.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title> API Documentation </title>\r
+</head>\r
+<frameset cols="20%,80%">\r
+  <frameset rows="30%,70%">\r
+    <frame src="toc.html" name="moduleListFrame" id="moduleListFrame" />\r
+    <frame src="toc-everything.html" name="moduleFrame" id="moduleFrame" />\r
+  </frameset>\r
+  <frame src="psycopg2-module.html" name="mainFrame" id="mainFrame" />\r
+</frameset>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/help.html b/psycopg2/doc/api/private/help.html
new file mode 100644 (file)
index 0000000..21f2560
--- /dev/null
@@ -0,0 +1,231 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>Help</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th bgcolor="#70b0f0" class="navselect">&nbsp;&nbsp;&nbsp;Help&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/help.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="help.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<h1 class="help"> API Documentation </h1>\r
+\r
+<p> This document contains the API (Application Programming Interface)\r
+documentation for this project.  Documentation for the Python\r
+objects defined by the project is divided into separate pages for each\r
+package, module, and class.  The API documentation also includes two\r
+pages containing information about the project as a whole: a trees\r
+page, and an index page.  </p>\r
+\r
+<h2> Object Documentation </h2>\r
+\r
+  <p>Each <strong>Package Documentation</strong> page contains: </p>\r
+  <ul>\r
+    <li> A description of the package. </li>\r
+    <li> A list of the modules and sub-packages contained by the\r
+    package.  </li>\r
+    <li> A summary of the classes defined by the package. </li>\r
+    <li> A summary of the functions defined by the package. </li>\r
+    <li> A summary of the variables defined by the package. </li>\r
+    <li> A detailed description of each function defined by the\r
+    package. </li>\r
+    <li> A detailed description of each variable defined by the\r
+    package. </li>\r
+  </ul>\r
+  \r
+  <p>Each <strong>Module Documentation</strong> page contains:</p>\r
+  <ul>\r
+    <li> A description of the module. </li>\r
+    <li> A summary of the classes defined by the module. </li>\r
+    <li> A summary of the functions defined by the module. </li>\r
+    <li> A summary of the variables defined by the module. </li>\r
+    <li> A detailed description of each function defined by the\r
+    module. </li>\r
+    <li> A detailed description of each variable defined by the\r
+    module. </li>\r
+  </ul>\r
+  \r
+  <p>Each <strong>Class Documentation</strong> page contains: </p>\r
+  <ul>\r
+    <li> A class inheritance diagram. </li>\r
+    <li> A list of known subclasses. </li>\r
+    <li> A description of the class. </li>\r
+    <li> A summary of the methods defined by the class. </li>\r
+    <li> A summary of the instance variables defined by the class. </li>\r
+    <li> A summary of the class (static) variables defined by the\r
+    class. </li> \r
+    <li> A detailed description of each method defined by the\r
+    class. </li>\r
+    <li> A detailed description of each instance variable defined by the\r
+    class. </li> \r
+    <li> A detailed description of each class (static) variable defined\r
+    by the class. </li> \r
+  </ul>\r
+\r
+<h2> Project Documentation </h2>\r
+\r
+  <p> The <strong>Trees</strong> page contains the module and class hierarchies: </p>\r
+  <ul>\r
+    <li> The <em>module hierarchy</em> lists every package and module, with\r
+    modules grouped into packages.  At the top level, and within each\r
+    package, modules and sub-packages are listed alphabetically. </li>\r
+    <li> The <em>class hierarchy</em> lists every class, grouped by base\r
+    class.  If a class has more than one base class, then it will be\r
+    listed under each base class.  At the top level, and under each base\r
+    class, classes are listed alphabetically. </li>\r
+  </ul>\r
+  \r
+  <p> The <strong>Index</strong> page contains indices of terms and\r
+  identifiers: </p>\r
+  <ul>\r
+    <li> The <em>term index</em> lists every term indexed by any object's\r
+    documentation.  For each term, the index provides links to each\r
+    place where the term is indexed. </li>\r
+    <li> The <em>identifier index</em> lists the (short) name of every package,\r
+    module, class, method, function, variable, and parameter.  For each\r
+    identifier, the index provides a short description, and a link to\r
+    its documentation. </li>\r
+  </ul>\r
+\r
+<h2> The Table of Contents </h2>\r
+\r
+<p> The table of contents occupies the two frames on the left side of\r
+the window.  The upper-left frame displays the <em>project\r
+contents</em>, and the lower-left frame displays the <em>module\r
+contents</em>: </p>\r
+\r
+<table class="help summary" border="1" cellspacing="0" cellpadding="3">\r
+  <tr style="height: 30%">\r
+    <td align="center" style="font-size: small">\r
+       Project<br />Contents<hr />...</td>\r
+    <td align="center" style="font-size: small" rowspan="2" width="70%">\r
+      API<br />Documentation<br />Frame<br /><br /><br />\r
+    </td>\r
+  </tr>\r
+  <tr>\r
+    <td align="center" style="font-size: small">\r
+      Module<br />Contents<hr />&nbsp;<br />...<br />&nbsp;\r
+    </td>\r
+  </tr>\r
+</table><br />\r
+\r
+<p> The <strong>project contents frame</strong> contains a list of all packages\r
+and modules that are defined by the project.  Clicking on an entry\r
+will display its contents in the module contents frame.  Clicking on a\r
+special entry, labeled "Everything," will display the contents of\r
+the entire project. </p>\r
+\r
+<p> The <strong>module contents frame</strong> contains a list of every\r
+submodule, class, type, exception, function, and variable defined by a\r
+module or package.  Clicking on an entry will display its\r
+documentation in the API documentation frame.  Clicking on the name of\r
+the module, at the top of the frame, will display the documentation\r
+for the module itself. </p>\r
+\r
+<p> The "<strong>frames</strong>" and "<strong>no frames</strong>" buttons below the top\r
+navigation bar can be used to control whether the table of contents is\r
+displayed or not. </p>\r
+\r
+<h2> The Navigation Bar </h2>\r
+\r
+<p> A navigation bar is located at the top and bottom of every page.\r
+It indicates what type of page you are currently viewing, and allows\r
+you to go to related pages.  The following table describes the labels\r
+on the navigation bar.  Note that not some labels (such as\r
+[Parent]) are not displayed on all pages. </p>\r
+\r
+<table class="summary" border="1" cellspacing="0" cellpadding="3" width="100%">\r
+<tr class="summary">\r
+  <th>Label</th>\r
+  <th>Highlighted when...</th>\r
+  <th>Links to...</th>\r
+</tr>\r
+  <tr><td valign="top"><strong>[Parent]</strong></td>\r
+      <td valign="top"><em>(never highlighted)</em></td>\r
+      <td valign="top"> the parent of the current package </td></tr>\r
+  <tr><td valign="top"><strong>[Package]</strong></td>\r
+      <td valign="top">viewing a package</td>\r
+      <td valign="top">the package containing the current object\r
+      </td></tr>\r
+  <tr><td valign="top"><strong>[Module]</strong></td>\r
+      <td valign="top">viewing a module</td>\r
+      <td valign="top">the module containing the current object\r
+      </td></tr> \r
+  <tr><td valign="top"><strong>[Class]</strong></td>\r
+      <td valign="top">viewing a class </td>\r
+      <td valign="top">the class containing the current object</td></tr>\r
+  <tr><td valign="top"><strong>[Trees]</strong></td>\r
+      <td valign="top">viewing the trees page</td>\r
+      <td valign="top"> the trees page </td></tr>\r
+  <tr><td valign="top"><strong>[Index]</strong></td>\r
+      <td valign="top">viewing the index page</td>\r
+      <td valign="top"> the index page </td></tr>\r
+  <tr><td valign="top"><strong>[Help]</strong></td>\r
+      <td valign="top">viewing the help page</td>\r
+      <td valign="top"> the help page </td></tr>\r
+</table>\r
+\r
+<p> The "<strong>show private</strong>" and "<strong>hide private</strong>" buttons below\r
+the top navigation bar can be used to control whether documentation\r
+for private objects is displayed.  Private objects are usually defined\r
+as objects whose (short) names begin with a single underscore, but do\r
+not end with an underscore.  For example, "<code>_x</code>",\r
+"<code>__pprint</code>", and "<code>epydoc.epytext._tokenize</code>"\r
+are private objects; but "<code>re.sub</code>",\r
+"<code>__init__</code>", and "<code>type_</code>" are not.  However,\r
+if a module defines the "<code>__all__</code>" variable, then its\r
+contents are used to decide which objects are private. </p>\r
+\r
+<p> A timestamp below the bottom navigation bar indicates when each\r
+page was last updated. </p>\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th bgcolor="#70b0f0" class="navselect">&nbsp;&nbsp;&nbsp;Help&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:37 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/index.html b/psycopg2/doc/api/private/index.html
new file mode 100644 (file)
index 0000000..ffd6536
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"\r
+          "DTD/xhtml1-frameset.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title> API Documentation </title>\r
+</head>\r
+<frameset cols="20%,80%">\r
+  <frameset rows="30%,70%">\r
+    <frame src="toc.html" name="moduleListFrame" id="moduleListFrame" />\r
+    <frame src="toc-everything.html" name="moduleFrame" id="moduleFrame" />\r
+  </frameset>\r
+  <frame src="psycopg2-module.html" name="mainFrame" id="mainFrame" />\r
+</frameset>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/indices.html b/psycopg2/doc/api/private/indices.html
new file mode 100644 (file)
index 0000000..6a224a1
--- /dev/null
@@ -0,0 +1,666 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>Index</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th bgcolor="#70b0f0" class="navselect">&nbsp;&nbsp;&nbsp;Index&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/indices.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="indices.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+<br />\r
+\r
+<!-- =========== START OF IDENTIFIER INDEX =========== -->\r
+<table class="index" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="index">\r
+  <th colspan="2">Identifier Index</th></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__add__"><code>__add__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__base__"><code>__base__</code></a></td>\r
+    <td>member_descriptor in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__bases__"><code>__bases__</code></a></td>\r
+    <td>Variable in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__basicsize__"><code>__basicsize__</code></a></td>\r
+    <td>member_descriptor in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2.psycopg1.cursor-class.html#__build_dict"><code>__build_dict</code></a></td>\r
+    <td>Method in class <a href="psycopg2.psycopg1.cursor-class.html"><code>psycopg2.psycopg1.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__call__"><code>__call__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html"><code>type</code></a></td>\r
+    <td>Class in module <code>__builtin__</code></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__cmp__"><code>__cmp__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__contains__"><code>__contains__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html#__delattr__"><code>__delattr__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__delattr__"><code>__delattr__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__delitem__"><code>__delitem__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__delslice__"><code>__delslice__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__dictoffset__"><code>__dictoffset__</code></a></td>\r
+    <td>member_descriptor in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__eq__"><code>__eq__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__flags__"><code>__flags__</code></a></td>\r
+    <td>member_descriptor in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__ge__"><code>__ge__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__getattribute__"><code>__getattribute__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html#__getattribute__"><code>__getattribute__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__getattribute__"><code>__getattribute__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="datetime.tzinfo-class.html#__getattribute__"><code>__getattribute__</code></a></td>\r
+    <td>Method in class <a href="datetime.tzinfo-class.html"><code>datetime.tzinfo</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__getitem__"><code>__getitem__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="exceptions.Exception-class.html#__getitem__"><code>__getitem__</code></a></td>\r
+    <td>Method in class <a href="exceptions.Exception-class.html"><code>exceptions.Exception</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictRow-class.html#__getitem__"><code>__getitem__</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictRow-class.html"><code>psycopg2.extras.DictRow</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__getslice__"><code>__getslice__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__gt__"><code>__gt__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__hash__"><code>__hash__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html#__hash__"><code>__hash__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__hash__"><code>__hash__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__iadd__"><code>__iadd__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__imul__"><code>__imul__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__init__"><code>__init__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html#__init__"><code>__init__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></td></tr>\r
+  <tr><td width="15%"><a href="exceptions.Exception-class.html#__init__"><code>__init__</code></a></td>\r
+    <td>Method in class <a href="exceptions.Exception-class.html"><code>exceptions.Exception</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.ISQLQuote-class.html#__init__"><code>__init__</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.ISQLQuote-class.html"><code>psycopg2._psycopg.ISQLQuote</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#__init__"><code>__init__</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#__init__"><code>__init__</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictRow-class.html#__init__"><code>__init__</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictRow-class.html"><code>psycopg2.extras.DictRow</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.SQL_IN-class.html#__init__"><code>__init__</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.SQL_IN-class.html"><code>psycopg2.extras.SQL_IN</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.AbstractConnectionPool-class.html#__init__"><code>__init__</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.AbstractConnectionPool-class.html"><code>psycopg2.pool.AbstractConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.PersistentConnectionPool-class.html#__init__"><code>__init__</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.PersistentConnectionPool-class.html"><code>psycopg2.pool.PersistentConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.ThreadedConnectionPool-class.html#__init__"><code>__init__</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.ThreadedConnectionPool-class.html"><code>psycopg2.pool.ThreadedConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz.FixedOffsetTimezone-class.html#__init__"><code>__init__</code></a></td>\r
+    <td>Method in class <a href="psycopg2.tz.FixedOffsetTimezone-class.html"><code>psycopg2.tz.FixedOffsetTimezone</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__itemsize__"><code>__itemsize__</code></a></td>\r
+    <td>member_descriptor in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__iter__"><code>__iter__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#__iter__"><code>__iter__</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__le__"><code>__le__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__len__"><code>__len__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__lt__"><code>__lt__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__mro__"><code>__mro__</code></a></td>\r
+    <td>member_descriptor in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__mul__"><code>__mul__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__name__"><code>__name__</code></a></td>\r
+    <td>Variable in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__ne__"><code>__ne__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__new__"><code>__new__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html#__new__"><code>__new__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__new__"><code>__new__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="datetime.tzinfo-class.html#__new__"><code>__new__</code></a></td>\r
+    <td>Method in class <a href="datetime.tzinfo-class.html"><code>datetime.tzinfo</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.ISQLQuote-class.html#__new__"><code>__new__</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.ISQLQuote-class.html"><code>psycopg2._psycopg.ISQLQuote</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#__new__"><code>__new__</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#__new__"><code>__new__</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html#__reduce__"><code>__reduce__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></td></tr>\r
+  <tr><td width="15%"><a href="datetime.tzinfo-class.html#__reduce__"><code>__reduce__</code></a></td>\r
+    <td>Method in class <a href="datetime.tzinfo-class.html"><code>datetime.tzinfo</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html#__reduce_ex__"><code>__reduce_ex__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__repr__"><code>__repr__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html#__repr__"><code>__repr__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__repr__"><code>__repr__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#__repr__"><code>__repr__</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#__repr__"><code>__repr__</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__rmul__"><code>__rmul__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html#__setattr__"><code>__setattr__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__setattr__"><code>__setattr__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__setitem__"><code>__setitem__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__setslice__"><code>__setslice__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html#__str__"><code>__str__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></td></tr>\r
+  <tr><td width="15%"><a href="exceptions.Exception-class.html#__str__"><code>__str__</code></a></td>\r
+    <td>Method in class <a href="exceptions.Exception-class.html"><code>exceptions.Exception</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#__str__"><code>__str__</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#__str__"><code>__str__</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__subclasses__"><code>__subclasses__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#__version__"><code>__version__</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__weakrefoffset__"><code>__weakrefoffset__</code></a></td>\r
+    <td>member_descriptor in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2.extras.DictCursor-class.html#_build_index"><code>_build_index</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictCursor-class.html"><code>psycopg2.extras.DictCursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#_C_API"><code>_C_API</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_closeall"><code>_closeall</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.AbstractConnectionPool-class.html"><code>psycopg2.pool.AbstractConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_connect"><code>_connect</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.AbstractConnectionPool-class.html"><code>psycopg2.pool.AbstractConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2.extras.DictCursor-class.html#__query_executed"><code>__query_executed</code></a></td>\r
+    <td>Variable in class <a href="psycopg2.extras.DictCursor-class.html"><code>psycopg2.extras.DictCursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_getconn"><code>_getconn</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.AbstractConnectionPool-class.html"><code>psycopg2.pool.AbstractConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_getkey"><code>_getkey</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.AbstractConnectionPool-class.html"><code>psycopg2.pool.AbstractConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2.tz.LocalTimezone-class.html#_isdst"><code>_isdst</code></a></td>\r
+    <td>Method in class <a href="psycopg2.tz.LocalTimezone-class.html"><code>psycopg2.tz.LocalTimezone</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2.tz.FixedOffsetTimezone-class.html#_name"><code>_name</code></a></td>\r
+    <td>Variable in class <a href="psycopg2.tz.FixedOffsetTimezone-class.html"><code>psycopg2.tz.FixedOffsetTimezone</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2.tz.FixedOffsetTimezone-class.html#_offset"><code>_offset</code></a></td>\r
+    <td>Variable in class <a href="psycopg2.tz.FixedOffsetTimezone-class.html"><code>psycopg2.tz.FixedOffsetTimezone</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html"><code>_psycopg</code></a></td>\r
+    <td>Module in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_putconn"><code>_putconn</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.AbstractConnectionPool-class.html"><code>psycopg2.pool.AbstractConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.ISQLQuote-class.html#_wrapped"><code>_wrapped</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.ISQLQuote-class.html"><code>psycopg2._psycopg.ISQLQuote</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.AbstractConnectionPool-class.html"><code>AbstractConnectionPool</code></a></td>\r
+    <td>Class in module <a href="psycopg2.pool-module.html"><code>psycopg2.pool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#adapt"><code>adapt</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#adapters"><code>adapters</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#apilevel"><code>apilevel</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#append"><code>append</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#arraysize"><code>arraysize</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#AsIs"><code>AsIs</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.psycopg1.connection-class.html#autocommit"><code>autocommit</code></a></td>\r
+    <td>Method in class <a href="psycopg2.psycopg1.connection-class.html"><code>psycopg2.psycopg1.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2-module.html#Binary"><code>Binary</code></a></td>\r
+    <td>Function in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#BINARY"><code>BINARY</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#binary_types"><code>binary_types</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#binary_types"><code>binary_types</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#BINARYARRAY"><code>BINARYARRAY</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#BOOLEAN"><code>BOOLEAN</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#Boolean"><code>Boolean</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#BOOLEANARRAY"><code>BOOLEANARRAY</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#callproc"><code>callproc</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictCursor-class.html#callproc"><code>callproc</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictCursor-class.html"><code>psycopg2.extras.DictCursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#close"><code>close</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#close"><code>close</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.PersistentConnectionPool-class.html#closeall"><code>closeall</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.PersistentConnectionPool-class.html"><code>psycopg2.pool.PersistentConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.ThreadedConnectionPool-class.html#closeall"><code>closeall</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.ThreadedConnectionPool-class.html"><code>psycopg2.pool.ThreadedConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#closed"><code>closed</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#commit"><code>commit</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2-module.html#connect"><code>connect</code></a></td>\r
+    <td>Function in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.psycopg1-module.html#connect"><code>connect</code></a></td>\r
+    <td>Function in module <a href="psycopg2.psycopg1-module.html"><code>psycopg2.psycopg1</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html"><code>connection</code></a></td>\r
+    <td>Class in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#connection"><code>connection</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.psycopg1.connection-class.html"><code>connection</code></a></td>\r
+    <td>Class in module <a href="psycopg2.psycopg1-module.html"><code>psycopg2.psycopg1</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#copy_from"><code>copy_from</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#copy_to"><code>copy_to</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#count"><code>count</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#cursor"><code>cursor</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html"><code>cursor</code></a></td>\r
+    <td>Class in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictConnection-class.html#cursor"><code>cursor</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictConnection-class.html"><code>psycopg2.extras.DictConnection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.psycopg1.connection-class.html#cursor"><code>cursor</code></a></td>\r
+    <td>Method in class <a href="psycopg2.psycopg1.connection-class.html"><code>psycopg2.psycopg1.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.psycopg1.cursor-class.html"><code>cursor</code></a></td>\r
+    <td>Class in module <a href="psycopg2.psycopg1-module.html"><code>psycopg2.psycopg1</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.DatabaseError-class.html"><code>DatabaseError</code></a></td>\r
+    <td>Class in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#DatabaseError"><code>DatabaseError</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.DataError-class.html"><code>DataError</code></a></td>\r
+    <td>Class in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#DataError"><code>DataError</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2-module.html#Date"><code>Date</code></a></td>\r
+    <td>Function in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#DATE"><code>DATE</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#DATEARRAY"><code>DATEARRAY</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#DateFromPy"><code>DateFromPy</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2-module.html#DateFromTicks"><code>DateFromTicks</code></a></td>\r
+    <td>Function in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#DATETIME"><code>DATETIME</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#DATETIMEARRAY"><code>DATETIMEARRAY</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool-module.html#dbg"><code>dbg</code></a></td>\r
+    <td>Function in module <a href="psycopg2.pool-module.html"><code>psycopg2.pool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#DECIMAL"><code>DECIMAL</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#DECIMALARRAY"><code>DECIMALARRAY</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#description"><code>description</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictConnection-class.html"><code>DictConnection</code></a></td>\r
+    <td>Class in module <a href="psycopg2.extras-module.html"><code>psycopg2.extras</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictCursor-class.html"><code>DictCursor</code></a></td>\r
+    <td>Class in module <a href="psycopg2.extras-module.html"><code>psycopg2.extras</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.psycopg1.cursor-class.html#dictfetchall"><code>dictfetchall</code></a></td>\r
+    <td>Method in class <a href="psycopg2.psycopg1.cursor-class.html"><code>psycopg2.psycopg1.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.psycopg1.cursor-class.html#dictfetchmany"><code>dictfetchmany</code></a></td>\r
+    <td>Method in class <a href="psycopg2.psycopg1.cursor-class.html"><code>psycopg2.psycopg1.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.psycopg1.cursor-class.html#dictfetchone"><code>dictfetchone</code></a></td>\r
+    <td>Method in class <a href="psycopg2.psycopg1.cursor-class.html"><code>psycopg2.psycopg1.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictRow-class.html"><code>DictRow</code></a></td>\r
+    <td>Class in module <a href="psycopg2.extras-module.html"><code>psycopg2.extras</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#dsn"><code>dsn</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="datetime.tzinfo-class.html#dst"><code>dst</code></a></td>\r
+    <td>Method in class <a href="datetime.tzinfo-class.html"><code>datetime.tzinfo</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz.FixedOffsetTimezone-class.html#dst"><code>dst</code></a></td>\r
+    <td>Method in class <a href="psycopg2.tz.FixedOffsetTimezone-class.html"><code>psycopg2.tz.FixedOffsetTimezone</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz.LocalTimezone-class.html#dst"><code>dst</code></a></td>\r
+    <td>Method in class <a href="psycopg2.tz.LocalTimezone-class.html"><code>psycopg2.tz.LocalTimezone</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz-module.html#DSTDIFF"><code>DSTDIFF</code></a></td>\r
+    <td>Variable in module <a href="psycopg2.tz-module.html"><code>psycopg2.tz</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#encoding"><code>encoding</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#encodings"><code>encodings</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.Error-class.html"><code>Error</code></a></td>\r
+    <td>Class in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#Error"><code>Error</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="exceptions.Exception-class.html"><code>Exception</code></a></td>\r
+    <td>Class in module <code>exceptions</code></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#execute"><code>execute</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictCursor-class.html#execute"><code>execute</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictCursor-class.html"><code>psycopg2.extras.DictCursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#executemany"><code>executemany</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#extend"><code>extend</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html"><code>extensions</code></a></td>\r
+    <td>Module in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras-module.html"><code>extras</code></a></td>\r
+    <td>Module in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#fetchall"><code>fetchall</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictCursor-class.html#fetchall"><code>fetchall</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictCursor-class.html"><code>psycopg2.extras.DictCursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#fetchmany"><code>fetchmany</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictCursor-class.html#fetchmany"><code>fetchmany</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictCursor-class.html"><code>psycopg2.extras.DictCursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#fetchone"><code>fetchone</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictCursor-class.html#fetchone"><code>fetchone</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictCursor-class.html"><code>psycopg2.extras.DictCursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#fileno"><code>fileno</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz.FixedOffsetTimezone-class.html"><code>FixedOffsetTimezone</code></a></td>\r
+    <td>Class in module <a href="psycopg2.tz-module.html"><code>psycopg2.tz</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#FLOAT"><code>FLOAT</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#FLOATARRAY"><code>FLOATARRAY</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="datetime.tzinfo-class.html#fromutc"><code>fromutc</code></a></td>\r
+    <td>Method in class <a href="datetime.tzinfo-class.html"><code>datetime.tzinfo</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictRow-class.html#get"><code>get</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictRow-class.html"><code>psycopg2.extras.DictRow</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.ISQLQuote-class.html#getbinary"><code>getbinary</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.ISQLQuote-class.html"><code>psycopg2._psycopg.ISQLQuote</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.ISQLQuote-class.html#getbuffer"><code>getbuffer</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.ISQLQuote-class.html"><code>psycopg2._psycopg.ISQLQuote</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.PersistentConnectionPool-class.html#getconn"><code>getconn</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.PersistentConnectionPool-class.html"><code>psycopg2.pool.PersistentConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.ThreadedConnectionPool-class.html#getconn"><code>getconn</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.ThreadedConnectionPool-class.html"><code>psycopg2.pool.ThreadedConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.ISQLQuote-class.html#getquoted"><code>getquoted</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.ISQLQuote-class.html"><code>psycopg2._psycopg.ISQLQuote</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.SQL_IN-class.html#getquoted"><code>getquoted</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.SQL_IN-class.html"><code>psycopg2.extras.SQL_IN</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictRow-class.html#has_key"><code>has_key</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictRow-class.html"><code>psycopg2.extras.DictRow</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#index"><code>index</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#insert"><code>insert</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#INTEGER"><code>INTEGER</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#INTEGERARRAY"><code>INTEGERARRAY</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.IntegrityError-class.html"><code>IntegrityError</code></a></td>\r
+    <td>Class in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#IntegrityError"><code>IntegrityError</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.InterfaceError-class.html"><code>InterfaceError</code></a></td>\r
+    <td>Class in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#InterfaceError"><code>InterfaceError</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.InternalError-class.html"><code>InternalError</code></a></td>\r
+    <td>Class in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#InternalError"><code>InternalError</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#INTERVAL"><code>INTERVAL</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#INTERVALARRAY"><code>INTERVALARRAY</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#IntervalFromPy"><code>IntervalFromPy</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#isolation_level"><code>isolation_level</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#ISOLATION_LEVEL_AUTOCOMMIT"><code>ISOLATION_LEVEL_AUTOCOMMIT</code></a></td>\r
+    <td>Variable in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#ISOLATION_LEVEL_READ_COMMITTED"><code>ISOLATION_LEVEL_READ_COMMITTED</code></a></td>\r
+    <td>Variable in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#ISOLATION_LEVEL_READ_UNCOMMITTED"><code>ISOLATION_LEVEL_READ_UNCOMMITTED</code></a></td>\r
+    <td>Variable in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#ISOLATION_LEVEL_REPEATABLE_READ"><code>ISOLATION_LEVEL_REPEATABLE_READ</code></a></td>\r
+    <td>Variable in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#ISOLATION_LEVEL_SERIALIZABLE"><code>ISOLATION_LEVEL_SERIALIZABLE</code></a></td>\r
+    <td>Variable in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.ISQLQuote-class.html"><code>ISQLQuote</code></a></td>\r
+    <td>Class in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#isready"><code>isready</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictRow-class.html#items"><code>items</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictRow-class.html"><code>psycopg2.extras.DictRow</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictRow-class.html#keys"><code>keys</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictRow-class.html"><code>psycopg2.extras.DictRow</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#lastrowid"><code>lastrowid</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html"><code>list</code></a></td>\r
+    <td>Class in module <code>__builtin__</code></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#List"><code>List</code></a></td>\r
+    <td>Function in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz-module.html#LOCAL"><code>LOCAL</code></a></td>\r
+    <td>Variable in module <a href="psycopg2.tz-module.html"><code>psycopg2.tz</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz.LocalTimezone-class.html"><code>LocalTimezone</code></a></td>\r
+    <td>Class in module <a href="psycopg2.tz-module.html"><code>psycopg2.tz</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#LONGINTEGER"><code>LONGINTEGER</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#LONGINTEGERARRAY"><code>LONGINTEGERARRAY</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#mogrify"><code>mogrify</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#mro"><code>mro</code></a></td>\r
+    <td>Method in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#name"><code>name</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#new_type"><code>new_type</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#next"><code>next</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#nextset"><code>nextset</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#notices"><code>notices</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#notifies"><code>notifies</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.NotSupportedError-class.html"><code>NotSupportedError</code></a></td>\r
+    <td>Class in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#NotSupportedError"><code>NotSupportedError</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#NUMBER"><code>NUMBER</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html"><code>object</code></a></td>\r
+    <td>Class in module <code>__builtin__</code></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.OperationalError-class.html"><code>OperationalError</code></a></td>\r
+    <td>Class in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#OperationalError"><code>OperationalError</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#paramstyle"><code>paramstyle</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.PersistentConnectionPool-class.html"><code>PersistentConnectionPool</code></a></td>\r
+    <td>Class in module <a href="psycopg2.pool-module.html"><code>psycopg2.pool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool-module.html"><code>pool</code></a></td>\r
+    <td>Module in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.PoolError-class.html"><code>PoolError</code></a></td>\r
+    <td>Class in module <a href="psycopg2.pool-module.html"><code>psycopg2.pool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#pop"><code>pop</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.ProgrammingError-class.html"><code>ProgrammingError</code></a></td>\r
+    <td>Class in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#ProgrammingError"><code>ProgrammingError</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.psycopg1-module.html"><code>psycopg1</code></a></td>\r
+    <td>Module in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2-module.html"><code>psycopg2</code></a></td>\r
+    <td>Package</td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.PersistentConnectionPool-class.html#putconn"><code>putconn</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.PersistentConnectionPool-class.html"><code>psycopg2.pool.PersistentConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.ThreadedConnectionPool-class.html#putconn"><code>putconn</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.ThreadedConnectionPool-class.html"><code>psycopg2.pool.ThreadedConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#PYDATE"><code>PYDATE</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#PYDATETIME"><code>PYDATETIME</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#PYINTERVAL"><code>PYINTERVAL</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#PYTIME"><code>PYTIME</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#query"><code>query</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#QuotedString"><code>QuotedString</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#register_adapter"><code>register_adapter</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#register_type"><code>register_type</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#remove"><code>remove</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#reverse"><code>reverse</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#rollback"><code>rollback</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#row_factory"><code>row_factory</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#rowcount"><code>rowcount</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#ROWID"><code>ROWID</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#ROWIDARRAY"><code>ROWIDARRAY</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#rownumber"><code>rownumber</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#scroll"><code>scroll</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#set_client_encoding"><code>set_client_encoding</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#set_isolation_level"><code>set_isolation_level</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#setinputsizes"><code>setinputsizes</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#setoutputsize"><code>setoutputsize</code></a></td>\r
+    <td>Method in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.SimpleConnectionPool-class.html"><code>SimpleConnectionPool</code></a></td>\r
+    <td>Class in module <a href="psycopg2.pool-module.html"><code>psycopg2.pool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#sort"><code>sort</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.SQL_IN-class.html"><code>SQL_IN</code></a></td>\r
+    <td>Class in module <a href="psycopg2.extras-module.html"><code>psycopg2.extras</code></a></td></tr>\r
+  <tr><td width="15%"><a href="exceptions.StandardError-class.html"><code>StandardError</code></a></td>\r
+    <td>Class in module <code>exceptions</code></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#statusmessage"><code>statusmessage</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz-module.html#STDOFFSET"><code>STDOFFSET</code></a></td>\r
+    <td>Variable in module <a href="psycopg2.tz-module.html"><code>psycopg2.tz</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#STRING"><code>STRING</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#string_types"><code>string_types</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#string_types"><code>string_types</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#STRINGARRAY"><code>STRINGARRAY</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.ThreadedConnectionPool-class.html"><code>ThreadedConnectionPool</code></a></td>\r
+    <td>Class in module <a href="psycopg2.pool-module.html"><code>psycopg2.pool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#threadsafety"><code>threadsafety</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2-module.html#Time"><code>Time</code></a></td>\r
+    <td>Function in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#TIME"><code>TIME</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#TIMEARRAY"><code>TIMEARRAY</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#TimeFromPy"><code>TimeFromPy</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2-module.html#TimeFromTicks"><code>TimeFromTicks</code></a></td>\r
+    <td>Function in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2-module.html#Timestamp"><code>Timestamp</code></a></td>\r
+    <td>Function in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#TimestampFromPy"><code>TimestampFromPy</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2-module.html#TimestampFromTicks"><code>TimestampFromTicks</code></a></td>\r
+    <td>Function in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html"><code>type</code></a></td>\r
+    <td>Class in module <code>__builtin__</code></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#typecaster"><code>typecaster</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz-module.html"><code>tz</code></a></td>\r
+    <td>Module in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="datetime.tzinfo-class.html"><code>tzinfo</code></a></td>\r
+    <td>Class in module <code>datetime</code></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.cursor-class.html#tzinfo_factory"><code>tzinfo_factory</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="datetime.tzinfo-class.html#tzname"><code>tzname</code></a></td>\r
+    <td>Method in class <a href="datetime.tzinfo-class.html"><code>datetime.tzinfo</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz.FixedOffsetTimezone-class.html#tzname"><code>tzname</code></a></td>\r
+    <td>Method in class <a href="psycopg2.tz.FixedOffsetTimezone-class.html"><code>psycopg2.tz.FixedOffsetTimezone</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz.LocalTimezone-class.html#tzname"><code>tzname</code></a></td>\r
+    <td>Method in class <a href="psycopg2.tz.LocalTimezone-class.html"><code>psycopg2.tz.LocalTimezone</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#UNICODE"><code>UNICODE</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg-module.html#UNICODEARRAY"><code>UNICODEARRAY</code></a></td>\r
+    <td>Variable in module <a href="../private/psycopg2._psycopg-module.html"><code>psycopg2._psycopg</code></a></td></tr>\r
+  <tr><td width="15%"><a href="datetime.tzinfo-class.html#utcoffset"><code>utcoffset</code></a></td>\r
+    <td>Method in class <a href="datetime.tzinfo-class.html"><code>datetime.tzinfo</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz.FixedOffsetTimezone-class.html#utcoffset"><code>utcoffset</code></a></td>\r
+    <td>Method in class <a href="psycopg2.tz.FixedOffsetTimezone-class.html"><code>psycopg2.tz.FixedOffsetTimezone</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz.LocalTimezone-class.html#utcoffset"><code>utcoffset</code></a></td>\r
+    <td>Method in class <a href="psycopg2.tz.LocalTimezone-class.html"><code>psycopg2.tz.LocalTimezone</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictRow-class.html#values"><code>values</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictRow-class.html"><code>psycopg2.extras.DictRow</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.Warning-class.html"><code>Warning</code></a></td>\r
+    <td>Class in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="../private/psycopg2._psycopg.connection-class.html#Warning"><code>Warning</code></a></td>\r
+    <td>member_descriptor in class <a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz-module.html#ZERO"><code>ZERO</code></a></td>\r
+    <td>Variable in module <a href="psycopg2.tz-module.html"><code>psycopg2.tz</code></a></td></tr>\r
+</table>\r
+<br />\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th bgcolor="#70b0f0" class="navselect">&nbsp;&nbsp;&nbsp;Index&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:37 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2-module.html b/psycopg2/doc/api/private/psycopg2-module.html
new file mode 100644 (file)
index 0000000..dd7e92d
--- /dev/null
@@ -0,0 +1,336 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th bgcolor="#70b0f0" class="navselect">&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        Package&nbsp;psycopg2\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2-module.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2-module.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF PACKAGE DESCRIPTION =========== -->\r
+<h2 class="package">Package psycopg2</h2>\r
+\r
+<p>A Python driver for PostgreSQL</p>\r
+<p>psycopg is a <a class="reference" href="http://www.postgresql.org/">PostgreSQL</a> database adapter for the <a class="reference" href="http://www.python.org/">Python</a> programming\r
+language. This is version 2, a complete rewrite of the original code to\r
+provide new-style classes for connection and cursor objects and other sweet\r
+candies. Like the original, psycopg 2 was written with the aim of being very\r
+small and fast, and stable as a rock.</p>\r
+<p>Homepage: <a class="reference" href="http://initd.org/projects/psycopg2">http://initd.org/projects/psycopg2</a></p>\r
+<hr/>\r
+\r
+<!-- =========== START OF SUBMODULES =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Submodules</th></tr>\r
+  <tr><td><ul>\r
+<li> <strong class="uidlink"><a href="psycopg2.extensions-module.html"><code>extensions</code></a></strong>: <em class="summary">psycopg extensions to the DBAPI-2.0</em></li>\r
+<li> <strong class="uidlink"><a href="psycopg2.extras-module.html"><code>extras</code></a></strong>: <em class="summary">Miscellaneous goodies for psycopg2</em></li>\r
+<li> <strong class="uidlink"><a href="psycopg2.pool-module.html"><code>pool</code></a></strong>: <em class="summary">Connection pooling for psycopg2</em></li>\r
+<li> <strong class="uidlink"><a href="psycopg2.psycopg1-module.html"><code>psycopg1</code></a></strong>: <em class="summary">psycopg 1.1.x compatibility module</em></li>\r
+<li> <strong class="uidlink"><a href="psycopg2.tz-module.html"><code>tz</code></a></strong>: <em class="summary">tzinfo implementations for psycopg2</em></li>\r
+<li> <strong class="uidlink"><a href="../private/psycopg2._psycopg-module.html"><code>_psycopg</code></a></strong>: <em class="summary">psycopg PostgreSQL driver</em></li>\r
+  </ul></td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF EXCEPTIONS =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Exceptions</th></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.DatabaseError-class.html"><code>DatabaseError</code></a></strong></td>\r
+  <td>Error related to the database engine.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.DataError-class.html"><code>DataError</code></a></strong></td>\r
+  <td>Error related to problems with the processed data.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.Error-class.html"><code>Error</code></a></strong></td>\r
+  <td>Base class for error exceptions.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.IntegrityError-class.html"><code>IntegrityError</code></a></strong></td>\r
+  <td>Error related to database integrity.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.InterfaceError-class.html"><code>InterfaceError</code></a></strong></td>\r
+  <td>Error related to the database interface.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.InternalError-class.html"><code>InternalError</code></a></strong></td>\r
+  <td>The database encountered an internal error.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.NotSupportedError-class.html"><code>NotSupportedError</code></a></strong></td>\r
+  <td>A not supported datbase API was called.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.OperationalError-class.html"><code>OperationalError</code></a></strong></td>\r
+  <td>Error related to database operation (disconnect, memory allocation etc).</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.ProgrammingError-class.html"><code>ProgrammingError</code></a></strong></td>\r
+  <td>Error related to database programming (SQL error, table not found etc).</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.Warning-class.html"><code>Warning</code></a></strong></td>\r
+  <td>A database warning.</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF FUNCTION SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Function Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Connections creation</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype"><a href="../private/psycopg2._psycopg.connection-class.html" class="link"><code>extensions.connection</code></a></td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2-module.html#connect" class="summary-sig-name"><code>connect</code></a>(<span class="summary-sig-arg">dsn</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Create a new database connection.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Value objects constructors</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new binary object</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2-module.html#Binary" class="summary-sig-name"><code>Binary</code></a>(<span class="summary-sig-arg">buffer</span>)</span></code>\r
+<br />\r
+Build an object capable to hold a bynary string value.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new date</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2-module.html#Date" class="summary-sig-name"><code>Date</code></a>(<span class="summary-sig-arg">year</span>,\r
+          <span class="summary-sig-arg">month</span>,\r
+          <span class="summary-sig-arg">day</span>)</span></code>\r
+<br />\r
+Build an object holding a date value.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new date</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2-module.html#DateFromTicks" class="summary-sig-name"><code>DateFromTicks</code></a>(<span class="summary-sig-arg">ticks</span>)</span></code>\r
+<br />\r
+Build an object holding a date value from the given ticks value.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new time</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2-module.html#Time" class="summary-sig-name"><code>Time</code></a>(<span class="summary-sig-arg">hour</span>,\r
+          <span class="summary-sig-arg">minutes</span>,\r
+          <span class="summary-sig-arg">seconds</span>,\r
+          <span class="summary-sig-arg">tzinfo</span>)</span></code>\r
+<br />\r
+Build an object holding a time value.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new time</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2-module.html#TimeFromTicks" class="summary-sig-name"><code>TimeFromTicks</code></a>(<span class="summary-sig-arg">ticks</span>)</span></code>\r
+<br />\r
+Build an object holding a time value from the given ticks value.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new timestamp</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2-module.html#Timestamp" class="summary-sig-name"><code>Timestamp</code></a>(<span class="summary-sig-arg">year</span>,\r
+          <span class="summary-sig-arg">month</span>,\r
+          <span class="summary-sig-arg">day</span>,\r
+          <span class="summary-sig-arg">hour</span>,\r
+          <span class="summary-sig-arg">minutes</span>,\r
+          <span class="summary-sig-arg">seconds</span>,\r
+          <span class="summary-sig-arg">tzinfo</span>)</span></code>\r
+<br />\r
+Build an object holding a timestamp value.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new timestamp</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2-module.html#TimestampFromTicks" class="summary-sig-name"><code>TimestampFromTicks</code></a>(<span class="summary-sig-arg">ticks</span>)</span></code>\r
+<br />\r
+Build an object holding a timestamp value from the given ticks value.</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF FUNCTION DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Function Details</th></tr>\r
+</table>\r
+\r
+<a name="connect"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">connect</span>(<span class="sig-arg">dsn</span>,\r
+          <span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>Create a new database connection.</p>\r
+<p>This function supports two different but equivalent sets of arguments.\r
+A single data source name or <tt class="docutils literal"><span class="pre">dsn</span></tt> string can be used to specify the\r
+connection parameters, as follows:</p>\r
+<pre class="literal-block">\r
+psycopg2.connect(&quot;dbname=xxx user=xxx ...&quot;)\r
+</pre>\r
+<p>If <tt class="docutils literal"><span class="pre">dsn</span></tt> is not provided it is possible to pass the parameters as\r
+keyword arguments; e.g.:</p>\r
+<pre class="literal-block">\r
+psycopg2.connect(database='xxx', user='xxx', ...)\r
+</pre>\r
+<p>The full list of available parameters is:</p>\r
+<ul class="rst-simple">\r
+<li><tt class="docutils literal"><span class="pre">dbname</span></tt> -- database name (only in 'dsn')</li>\r
+<li><tt class="docutils literal"><span class="pre">database</span></tt> -- database name (only as keyword argument)</li>\r
+<li><tt class="docutils literal"><span class="pre">host</span></tt> -- host address (defaults to UNIX socket if not provided)</li>\r
+<li><tt class="docutils literal"><span class="pre">port</span></tt> -- port number (defaults to 5432 if not provided)</li>\r
+<li><tt class="docutils literal"><span class="pre">user</span></tt> -- user name used to authenticate</li>\r
+<li><tt class="docutils literal"><span class="pre">password</span></tt> -- password used to authenticate</li>\r
+<li><tt class="docutils literal"><span class="pre">sslmode</span></tt> -- SSL mode (see PostgreSQL documentation)</li>\r
+</ul>\r
+<p>If the <tt class="docutils literal"><span class="pre">connection_factory</span></tt> keyword argument is not provided this\r
+function always return an instance of the <code>connection</code> class.\r
+Else the given sub-class of <a href="../private/psycopg2._psycopg.connection-class.html" class="link"><code>extensions.connection</code></a> will be used to\r
+instantiate the connection object.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+New database connection        <br /><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r
+        (type=<a href="../private/psycopg2._psycopg.connection-class.html" class="link"><code>extensions.connection</code></a>)</em>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="Binary"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">Binary</span>(<span class="sig-arg">buffer</span>)</span>\r
+  </h3>\r
+<p>Build an object capable to hold a bynary string value.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new binary object      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="Date"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">Date</span>(<span class="sig-arg">year</span>,\r
+          <span class="sig-arg">month</span>,\r
+          <span class="sig-arg">day</span>)</span>\r
+  </h3>\r
+<p>Build an object holding a date value.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new date      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="DateFromTicks"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">DateFromTicks</span>(<span class="sig-arg">ticks</span>)</span>\r
+  </h3>\r
+<p>Build an object holding a date value from the given ticks value.</p>\r
+<p>Ticks are the number of seconds since the epoch; see the documentation of the standard Python time module for details).</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new date      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="Time"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">Time</span>(<span class="sig-arg">hour</span>,\r
+          <span class="sig-arg">minutes</span>,\r
+          <span class="sig-arg">seconds</span>,\r
+          <span class="sig-arg">tzinfo</span>=<span class="sig-default">None</span>)</span>\r
+  </h3>\r
+<p>Build an object holding a time value.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new time      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="TimeFromTicks"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">TimeFromTicks</span>(<span class="sig-arg">ticks</span>)</span>\r
+  </h3>\r
+<p>Build an object holding a time value from the given ticks value.</p>\r
+<p>Ticks are the number of seconds since the epoch; see the documentation of the standard Python time module for details).</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new time      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="Timestamp"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">Timestamp</span>(<span class="sig-arg">year</span>,\r
+          <span class="sig-arg">month</span>,\r
+          <span class="sig-arg">day</span>,\r
+          <span class="sig-arg">hour</span>,\r
+          <span class="sig-arg">minutes</span>,\r
+          <span class="sig-arg">seconds</span>,\r
+          <span class="sig-arg">tzinfo</span>=<span class="sig-default">None</span>)</span>\r
+  </h3>\r
+<p>Build an object holding a timestamp value.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new timestamp      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="TimestampFromTicks"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">TimestampFromTicks</span>(<span class="sig-arg">ticks</span>)</span>\r
+  </h3>\r
+<p>Build an object holding a timestamp value from the given ticks value.</p>\r
+<p>Ticks are the number of seconds since the epoch; see the documentation of the standard Python time module for details).</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new timestamp      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th bgcolor="#70b0f0" class="navselect">&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:35 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.DataError-class.html b/psycopg2/doc/api/private/psycopg2.DataError-class.html
new file mode 100644 (file)
index 0000000..5805400
--- /dev/null
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.DataError</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Class&nbsp;DataError\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.DataError-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.DataError-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class DataError</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+            \r
+            |            \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+        \r
+                |        \r
+            <a href="psycopg2.Error-class.html"><code>Error</code></a> --+    \r
+                    |    \r
+        <a href="psycopg2.DatabaseError-class.html"><code>DatabaseError</code></a> --+\r
+                        |\r
+                       <strong class="uidshort">DataError</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>Error related to problems with the processed data.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.DatabaseError-class.html b/psycopg2/doc/api/private/psycopg2.DatabaseError-class.html
new file mode 100644 (file)
index 0000000..adc28d4
--- /dev/null
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.DatabaseError</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Class&nbsp;DatabaseError\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.DatabaseError-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.DatabaseError-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class DatabaseError</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+        \r
+            |        \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+    \r
+                |    \r
+            <a href="psycopg2.Error-class.html"><code>Error</code></a> --+\r
+                    |\r
+                   <strong class="uidshort">DatabaseError</strong>\r
+</pre><br />\r
+\r
+<dl><dt>Known Subclasses:</dt>\r
+<dd>\r
+    <a href="psycopg2.DataError-class.html"><code>DataError</code></a>,\r
+    <a href="psycopg2.IntegrityError-class.html"><code>IntegrityError</code></a>,\r
+    <a href="psycopg2.InternalError-class.html"><code>InternalError</code></a>,\r
+    <a href="psycopg2.NotSupportedError-class.html"><code>NotSupportedError</code></a>,\r
+    <a href="psycopg2.OperationalError-class.html"><code>OperationalError</code></a>,\r
+    <a href="psycopg2.ProgrammingError-class.html"><code>ProgrammingError</code></a></dd></dl>\r
+\r
+<hr/>\r
+\r
+<p>Error related to the database engine.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:34 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.Error-class.html b/psycopg2/doc/api/private/psycopg2.Error-class.html
new file mode 100644 (file)
index 0000000..33bff57
--- /dev/null
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.Error</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Class&nbsp;Error\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.Error-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.Error-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class Error</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+    \r
+            |    \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+\r
+                |\r
+               <strong class="uidshort">Error</strong>\r
+</pre><br />\r
+\r
+<dl><dt>Known Subclasses:</dt>\r
+<dd>\r
+    <a href="psycopg2.DatabaseError-class.html"><code>DatabaseError</code></a>,\r
+    <a href="psycopg2.InterfaceError-class.html"><code>InterfaceError</code></a>,\r
+    <a href="psycopg2.pool.PoolError-class.html"><code>PoolError</code></a></dd></dl>\r
+\r
+<hr/>\r
+\r
+<p>Base class for error exceptions.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.IntegrityError-class.html b/psycopg2/doc/api/private/psycopg2.IntegrityError-class.html
new file mode 100644 (file)
index 0000000..c1804f6
--- /dev/null
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.IntegrityError</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Class&nbsp;IntegrityError\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.IntegrityError-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.IntegrityError-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class IntegrityError</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+            \r
+            |            \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+        \r
+                |        \r
+            <a href="psycopg2.Error-class.html"><code>Error</code></a> --+    \r
+                    |    \r
+        <a href="psycopg2.DatabaseError-class.html"><code>DatabaseError</code></a> --+\r
+                        |\r
+                       <strong class="uidshort">IntegrityError</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>Error related to database integrity.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:34 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.InterfaceError-class.html b/psycopg2/doc/api/private/psycopg2.InterfaceError-class.html
new file mode 100644 (file)
index 0000000..099ee90
--- /dev/null
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.InterfaceError</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Class&nbsp;InterfaceError\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.InterfaceError-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.InterfaceError-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class InterfaceError</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+        \r
+            |        \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+    \r
+                |    \r
+            <a href="psycopg2.Error-class.html"><code>Error</code></a> --+\r
+                    |\r
+                   <strong class="uidshort">InterfaceError</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>Error related to the database interface.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:34 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.InternalError-class.html b/psycopg2/doc/api/private/psycopg2.InternalError-class.html
new file mode 100644 (file)
index 0000000..5390de5
--- /dev/null
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.InternalError</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Class&nbsp;InternalError\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.InternalError-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.InternalError-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class InternalError</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+            \r
+            |            \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+        \r
+                |        \r
+            <a href="psycopg2.Error-class.html"><code>Error</code></a> --+    \r
+                    |    \r
+        <a href="psycopg2.DatabaseError-class.html"><code>DatabaseError</code></a> --+\r
+                        |\r
+                       <strong class="uidshort">InternalError</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>The database encountered an internal error.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:34 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.NotSupportedError-class.html b/psycopg2/doc/api/private/psycopg2.NotSupportedError-class.html
new file mode 100644 (file)
index 0000000..c677f5b
--- /dev/null
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.NotSupportedError</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Class&nbsp;NotSupportedError\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.NotSupportedError-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.NotSupportedError-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class NotSupportedError</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+            \r
+            |            \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+        \r
+                |        \r
+            <a href="psycopg2.Error-class.html"><code>Error</code></a> --+    \r
+                    |    \r
+        <a href="psycopg2.DatabaseError-class.html"><code>DatabaseError</code></a> --+\r
+                        |\r
+                       <strong class="uidshort">NotSupportedError</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>A not supported datbase API was called.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.OperationalError-class.html b/psycopg2/doc/api/private/psycopg2.OperationalError-class.html
new file mode 100644 (file)
index 0000000..6cca463
--- /dev/null
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.OperationalError</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Class&nbsp;OperationalError\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.OperationalError-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.OperationalError-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class OperationalError</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+            \r
+            |            \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+        \r
+                |        \r
+            <a href="psycopg2.Error-class.html"><code>Error</code></a> --+    \r
+                    |    \r
+        <a href="psycopg2.DatabaseError-class.html"><code>DatabaseError</code></a> --+\r
+                        |\r
+                       <strong class="uidshort">OperationalError</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>Error related to database operation (disconnect, memory allocation etc).</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:35 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.ProgrammingError-class.html b/psycopg2/doc/api/private/psycopg2.ProgrammingError-class.html
new file mode 100644 (file)
index 0000000..9fcd4ef
--- /dev/null
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.ProgrammingError</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Class&nbsp;ProgrammingError\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.ProgrammingError-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.ProgrammingError-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class ProgrammingError</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+            \r
+            |            \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+        \r
+                |        \r
+            <a href="psycopg2.Error-class.html"><code>Error</code></a> --+    \r
+                    |    \r
+        <a href="psycopg2.DatabaseError-class.html"><code>DatabaseError</code></a> --+\r
+                        |\r
+                       <strong class="uidshort">ProgrammingError</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>Error related to database programming (SQL error, table not found etc).</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:35 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.Warning-class.html b/psycopg2/doc/api/private/psycopg2.Warning-class.html
new file mode 100644 (file)
index 0000000..741c9a7
--- /dev/null
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.Warning</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Class&nbsp;Warning\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.Warning-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.Warning-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class Warning</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+    \r
+            |    \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+\r
+                |\r
+               <strong class="uidshort">Warning</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>A database warning.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2._psycopg-module.html b/psycopg2/doc/api/private/psycopg2._psycopg-module.html
new file mode 100644 (file)
index 0000000..6e4cb25
--- /dev/null
@@ -0,0 +1,1072 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2._psycopg</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Module&nbsp;_psycopg\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<strong>show&nbsp;private</strong>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="../private/psycopg2._psycopg-module.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF MODULE DESCRIPTION =========== -->\r
+<h2 class="module">Module psycopg2._psycopg</h2>\r
+\r
+<p>psycopg PostgreSQL driver</p>\r
+<hr/>\r
+\r
+<!-- =========== START OF CLASSES =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Classes</th></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="../private/psycopg2._psycopg.connection-class.html"><code>connection</code></a></strong></td>\r
+  <td>connection(dsn, ...) -&gt; new connection object</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="../private/psycopg2._psycopg.cursor-class.html"><code>cursor</code></a></strong></td>\r
+  <td>A database cursor.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="../private/psycopg2._psycopg.ISQLQuote-class.html"><code>ISQLQuote</code></a></strong></td>\r
+  <td>Abstract ISQLQuote protocol</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF FUNCTION SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Function Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new quoted list</td>\r
+  <td><code><a name="List"></a><span class="summary-sig"><span class="summary-sig-name">List</span>(<span class="summary-sig-arg">list</span>,\r
+          <span class="summary-sig-arg">enc</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF VARIABLE SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Variable Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>str</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#__version__"><code>__version__</code></a></strong> = <span title="'2.0b7 (dt ext pq3)'"><code><span class="variable-quote">'</span>2.0b7&nbsp;(dt&nbsp;ext&nbsp;pq3)<span class="variable-quote">'</span>                       </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>PyCObject</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#_C_API"><code>_C_API</code></a></strong> = <span title="&lt;PyCObject object at 0x0076A320&gt;"><code>&lt;PyCObject&nbsp;object&nbsp;at&nbsp;0x0076A320&gt;                </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>dict</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#adapters"><code>adapters</code></a></strong> = <span title="{(&lt;type 'bool'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.Boolean'&gt;, (&lt;type 'list'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.List'&gt;, (&lt;type 'datetime.datetime'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;built-in function TimestampFromPy&gt;, (&lt;type 'buffer'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.Binary'&gt;, (&lt;type 'unicode'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.QuotedString'&gt;, (&lt;type 'datetime.date'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;built-in function DateFromPy&gt;, (&lt;type 'datetime.time'&gt;, ..."><code>{(&lt;type&nbsp;'bool'&gt;,&nbsp;&lt;type&nbsp;'psycopg2._psycopg.ISQ<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>str</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#apilevel"><code>apilevel</code></a></strong> = <span title="'2.0'"><code><span class="variable-quote">'</span>2.0<span class="variable-quote">'</span>                                         </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#BINARY"><code>BINARY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847A00&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847A00&gt;   </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>dict</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#binary_types"><code>binary_types</code></a></strong> = <span title="{}"><code>{}                                        </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#BINARYARRAY"><code>BINARYARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847CA0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847C<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#BOOLEAN"><code>BOOLEAN</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847880&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847880&gt;  </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#BOOLEANARRAY"><code>BOOLEANARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847BA0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#DATE"><code>DATE</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847960&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847960&gt;     </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#DATEARRAY"><code>DATEARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847C20&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847C20<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#DATETIME"><code>DATETIME</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x008478C0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x008478C0&gt; </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#DATETIMEARRAY"><code>DATETIMEARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847BC0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x0084<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#DECIMAL"><code>DECIMAL</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x008477A0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x008477A0&gt;  </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#DECIMALARRAY"><code>DECIMALARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847B20&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>dict</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#encodings"><code>encodings</code></a></strong> = <span title="{'UTF8': 'utf_8', 'LATIN-1': 'latin_1', 'SQL_ASCII': 'ascii', 'UNICODE': 'utf_8', 'LATIN1': 'latin_1'}"><code>{'UTF8':&nbsp;'utf_8',&nbsp;'LATIN-1':&nbsp;'latin_1',&nbsp;'SQL<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#FLOAT"><code>FLOAT</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847740&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847740&gt;    </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#FLOATARRAY"><code>FLOATARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847AE0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847AE<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#INTEGER"><code>INTEGER</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847700&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847700&gt;  </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#INTEGERARRAY"><code>INTEGERARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847AC0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#INTERVAL"><code>INTERVAL</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x008479A0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x008479A0&gt; </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#INTERVALARRAY"><code>INTERVALARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847C60&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x0084<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#LONGINTEGER"><code>LONGINTEGER</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x008476C0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x008476<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#LONGINTEGERARRAY"><code>LONGINTEGERARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847AA0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x0<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#NUMBER"><code>NUMBER</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847680&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847680&gt;   </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>str</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#paramstyle"><code>paramstyle</code></a></strong> = <span title="'pyformat'"><code><span class="variable-quote">'</span>pyformat<span class="variable-quote">'</span>                                  </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#PYDATE"><code>PYDATE</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847DC0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847DC0&gt;   </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#PYDATETIME"><code>PYDATETIME</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847D20&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847D2<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#PYINTERVAL"><code>PYINTERVAL</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847DE0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847DE<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#PYTIME"><code>PYTIME</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847D60&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847D60&gt;   </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#ROWID"><code>ROWID</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847A60&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847A60&gt;    </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#ROWIDARRAY"><code>ROWIDARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847CC0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847CC<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#STRING"><code>STRING</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847820&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847820&gt;   </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>dict</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#string_types"><code>string_types</code></a></strong> = <span title="{1028: &lt;psycopg2._psycopg.type object at 0x00847CC0&gt;, 1005: &lt;psycopg2._psycopg.type object at 0x00847AC0&gt;, 16: &lt;psycopg2._psycopg.type object at 0x00847880&gt;, 17: &lt;psycopg2._psycopg.type object at 0x00847A00&gt;, 1042: &lt;psycopg2._psycopg.type object at 0x00847820&gt;, 1043: &lt;psycopg2._psycopg.type object at 0x00847820&gt;, 20: &lt;psycopg2._psycopg.type object at 0x008476C0&gt;, 21: &lt;psycopg2._psycopg.type object at 0x00847700&gt;, 23: &lt;psycopg2._psycopg.type object at 0x00847700&gt;, 25: &lt;psycopg2._psycopg.type object at 0x00847820&gt;, 26: &lt;psycopg2._psycopg.type object at 0x00847A60&gt;, 1182: &lt;psycopg2._psycopg.ty..."><code>{1028:&nbsp;&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#STRINGARRAY"><code>STRINGARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847B60&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847B<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>int</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#threadsafety"><code>threadsafety</code></a></strong> = <span title="2">2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#TIME"><code>TIME</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847900&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847900&gt;     </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#TIMEARRAY"><code>TIMEARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847BE0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847BE0<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#UNICODE"><code>UNICODE</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x008477E0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x008477E0&gt;  </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="../private/psycopg2._psycopg-module.html#UNICODEARRAY"><code>UNICODEARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00847B40&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00847<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF FUNCTION DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Function Details</th></tr>\r
+</table>\r
+\r
+<a name="List"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">List</span>(<span class="sig-arg">list</span>,\r
+          <span class="sig-arg">enc</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new quoted list      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF VARIABLE DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Variable Details</th></tr>\r
+</table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="__version__"></a>\r
+<h3>__version__</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>str</code>\r
+\r
+      </dd>\r
+      <dt title="'2.0b7 (dt ext pq3)'">Value:</dt>\r
+      <dd title="'2.0b7 (dt ext pq3)'"><table><tr><td>\r
+<pre class="variable">\r
+<span class="variable-quote">'</span>2.0b7 (dt ext pq3)<span class="variable-quote">'</span>                                                   </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="_C_API"></a>\r
+<h3>_C_API</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>PyCObject</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;PyCObject object at 0x0076A320&gt;">Value:</dt>\r
+      <dd title="&lt;PyCObject object at 0x0076A320&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;PyCObject object at 0x0076A320&gt;                                       </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="adapters"></a>\r
+<h3>adapters</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>dict</code>\r
+\r
+      </dd>\r
+      <dt title="{(&lt;type 'bool'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.Boolean'&gt;, (&lt;type 'list'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.List'&gt;, (&lt;type 'datetime.datetime'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;built-in function TimestampFromPy&gt;, (&lt;type 'buffer'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.Binary'&gt;, (&lt;type 'unicode'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.QuotedString'&gt;, (&lt;type 'datetime.date'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;built-in function DateFromPy&gt;, (&lt;type 'datetime.time'&gt;, ...">Value:</dt>\r
+      <dd title="{(&lt;type 'bool'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.Boolean'&gt;, (&lt;type 'list'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.List'&gt;, (&lt;type 'datetime.datetime'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;built-in function TimestampFromPy&gt;, (&lt;type 'buffer'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.Binary'&gt;, (&lt;type 'unicode'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.QuotedString'&gt;, (&lt;type 'datetime.date'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;built-in function DateFromPy&gt;, (&lt;type 'datetime.time'&gt;, ..."><table><tr><td>\r
+<pre class="variable">\r
+{(&lt;type 'datetime.timedelta'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): <span class="variable-linewrap">\</span>\r
+&lt;built-in function IntervalFromPy&gt;,\r
+ (&lt;type 'datetime.date'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;buil<span class="variable-linewrap">\</span>\r
+t-in function DateFromPy&gt;,\r
+ (&lt;type 'datetime.time'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;buil<span class="variable-linewrap">\</span>\r
+t-in function TimeFromPy&gt;,\r
+ (&lt;type 'datetime.datetime'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;<span class="variable-linewrap">\</span>\r
+built-in function TimestampFromPy&gt;,\r
+<span class="variable-ellipsis">...</span>                                                                    </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="apilevel"></a>\r
+<h3>apilevel</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>str</code>\r
+\r
+      </dd>\r
+      <dt title="'2.0'">Value:</dt>\r
+      <dd title="'2.0'"><table><tr><td>\r
+<pre class="variable">\r
+<span class="variable-quote">'</span>2.0<span class="variable-quote">'</span>                                                                  </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="BINARY"></a>\r
+<h3>BINARY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847A00&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847A00&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847A00&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="binary_types"></a>\r
+<h3>binary_types</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>dict</code>\r
+\r
+      </dd>\r
+      <dt title="{}">Value:</dt>\r
+      <dd title="{}"><table><tr><td>\r
+<pre class="variable">\r
+{}                                                                     </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="BINARYARRAY"></a>\r
+<h3>BINARYARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847CA0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847CA0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847CA0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="BOOLEAN"></a>\r
+<h3>BOOLEAN</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847880&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847880&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847880&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="BOOLEANARRAY"></a>\r
+<h3>BOOLEANARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847BA0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847BA0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847BA0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="DATE"></a>\r
+<h3>DATE</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847960&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847960&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847960&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="DATEARRAY"></a>\r
+<h3>DATEARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847C20&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847C20&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847C20&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="DATETIME"></a>\r
+<h3>DATETIME</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x008478C0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x008478C0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x008478C0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="DATETIMEARRAY"></a>\r
+<h3>DATETIMEARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847BC0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847BC0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847BC0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="DECIMAL"></a>\r
+<h3>DECIMAL</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x008477A0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x008477A0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x008477A0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="DECIMALARRAY"></a>\r
+<h3>DECIMALARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847B20&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847B20&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847B20&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="encodings"></a>\r
+<h3>encodings</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>dict</code>\r
+\r
+      </dd>\r
+      <dt title="{'UTF8': 'utf_8', 'LATIN-1': 'latin_1', 'SQL_ASCII': 'ascii', 'UNICODE': 'utf_8', 'LATIN1': 'latin_1'}">Value:</dt>\r
+      <dd title="{'UTF8': 'utf_8', 'LATIN-1': 'latin_1', 'SQL_ASCII': 'ascii', 'UNICODE': 'utf_8', 'LATIN1': 'latin_1'}"><table><tr><td>\r
+<pre class="variable">\r
+{'LATIN-1': 'latin_1',\r
+ 'LATIN1': 'latin_1',\r
+ 'SQL_ASCII': 'ascii',\r
+ 'UNICODE': 'utf_8',\r
+ 'UTF8': 'utf_8'}                                                      </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="FLOAT"></a>\r
+<h3>FLOAT</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847740&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847740&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847740&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="FLOATARRAY"></a>\r
+<h3>FLOATARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847AE0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847AE0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847AE0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="INTEGER"></a>\r
+<h3>INTEGER</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847700&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847700&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847700&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="INTEGERARRAY"></a>\r
+<h3>INTEGERARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847AC0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847AC0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847AC0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="INTERVAL"></a>\r
+<h3>INTERVAL</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x008479A0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x008479A0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x008479A0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="INTERVALARRAY"></a>\r
+<h3>INTERVALARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847C60&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847C60&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847C60&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="LONGINTEGER"></a>\r
+<h3>LONGINTEGER</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x008476C0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x008476C0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x008476C0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="LONGINTEGERARRAY"></a>\r
+<h3>LONGINTEGERARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847AA0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847AA0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847AA0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="NUMBER"></a>\r
+<h3>NUMBER</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847680&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847680&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847680&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="paramstyle"></a>\r
+<h3>paramstyle</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>str</code>\r
+\r
+      </dd>\r
+      <dt title="'pyformat'">Value:</dt>\r
+      <dd title="'pyformat'"><table><tr><td>\r
+<pre class="variable">\r
+<span class="variable-quote">'</span>pyformat<span class="variable-quote">'</span>                                                             </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="PYDATE"></a>\r
+<h3>PYDATE</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847DC0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847DC0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847DC0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="PYDATETIME"></a>\r
+<h3>PYDATETIME</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847D20&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847D20&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847D20&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="PYINTERVAL"></a>\r
+<h3>PYINTERVAL</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847DE0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847DE0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847DE0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="PYTIME"></a>\r
+<h3>PYTIME</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847D60&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847D60&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847D60&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="ROWID"></a>\r
+<h3>ROWID</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847A60&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847A60&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847A60&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="ROWIDARRAY"></a>\r
+<h3>ROWIDARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847CC0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847CC0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847CC0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="STRING"></a>\r
+<h3>STRING</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847820&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847820&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847820&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="string_types"></a>\r
+<h3>string_types</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>dict</code>\r
+\r
+      </dd>\r
+      <dt title="{1028: &lt;psycopg2._psycopg.type object at 0x00847CC0&gt;, 1005: &lt;psycopg2._psycopg.type object at 0x00847AC0&gt;, 16: &lt;psycopg2._psycopg.type object at 0x00847880&gt;, 17: &lt;psycopg2._psycopg.type object at 0x00847A00&gt;, 1042: &lt;psycopg2._psycopg.type object at 0x00847820&gt;, 1043: &lt;psycopg2._psycopg.type object at 0x00847820&gt;, 20: &lt;psycopg2._psycopg.type object at 0x008476C0&gt;, 21: &lt;psycopg2._psycopg.type object at 0x00847700&gt;, 23: &lt;psycopg2._psycopg.type object at 0x00847700&gt;, 25: &lt;psycopg2._psycopg.type object at 0x00847820&gt;, 26: &lt;psycopg2._psycopg.type object at 0x00847A60&gt;, 1182: &lt;psycopg2._psycopg.ty...">Value:</dt>\r
+      <dd title="{1028: &lt;psycopg2._psycopg.type object at 0x00847CC0&gt;, 1005: &lt;psycopg2._psycopg.type object at 0x00847AC0&gt;, 16: &lt;psycopg2._psycopg.type object at 0x00847880&gt;, 17: &lt;psycopg2._psycopg.type object at 0x00847A00&gt;, 1042: &lt;psycopg2._psycopg.type object at 0x00847820&gt;, 1043: &lt;psycopg2._psycopg.type object at 0x00847820&gt;, 20: &lt;psycopg2._psycopg.type object at 0x008476C0&gt;, 21: &lt;psycopg2._psycopg.type object at 0x00847700&gt;, 23: &lt;psycopg2._psycopg.type object at 0x00847700&gt;, 25: &lt;psycopg2._psycopg.type object at 0x00847820&gt;, 26: &lt;psycopg2._psycopg.type object at 0x00847A60&gt;, 1182: &lt;psycopg2._psycopg.ty..."><table><tr><td>\r
+<pre class="variable">\r
+{16: &lt;psycopg2._psycopg.type object at 0x00847880&gt;,\r
+ 17: &lt;psycopg2._psycopg.type object at 0x00847A00&gt;,\r
+ 18: &lt;psycopg2._psycopg.type object at 0x00847820&gt;,\r
+ 19: &lt;psycopg2._psycopg.type object at 0x00847820&gt;,\r
+ 20: &lt;psycopg2._psycopg.type object at 0x008476C0&gt;,\r
+ 21: &lt;psycopg2._psycopg.type object at 0x00847700&gt;,\r
+ 23: &lt;psycopg2._psycopg.type object at 0x00847700&gt;,\r
+ 25: &lt;psycopg2._psycopg.type object at 0x00847820&gt;,\r
+<span class="variable-ellipsis">...</span>                                                                    </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="STRINGARRAY"></a>\r
+<h3>STRINGARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847B60&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847B60&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847B60&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="threadsafety"></a>\r
+<h3>threadsafety</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>int</code>\r
+\r
+      </dd>\r
+      <dt title="2">Value:</dt>\r
+      <dd title="2"><table><tr><td>\r
+<pre class="variable">\r
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="TIME"></a>\r
+<h3>TIME</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847900&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847900&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847900&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="TIMEARRAY"></a>\r
+<h3>TIMEARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847BE0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847BE0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847BE0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="UNICODE"></a>\r
+<h3>UNICODE</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x008477E0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x008477E0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x008477E0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="UNICODEARRAY"></a>\r
+<h3>UNICODEARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00847B40&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00847B40&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00847B40&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:33 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2._psycopg.ISQLQuote-class.html b/psycopg2/doc/api/private/psycopg2._psycopg.ISQLQuote-class.html
new file mode 100644 (file)
index 0000000..3a7db8e
--- /dev/null
@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2._psycopg.ISQLQuote</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="../private/psycopg2._psycopg-module.html">Module&nbsp;_psycopg</a> ::\r
+        Class&nbsp;ISQLQuote\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<strong>show&nbsp;private</strong>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="../private/psycopg2._psycopg.ISQLQuote-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type ISQLQuote</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+\r
+         |\r
+        <strong class="uidshort">ISQLQuote</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>Abstract ISQLQuote protocol</p>\r
+<p>An object conform to this protocol should expose a <tt class="docutils literal"><span class="pre">getquoted()</span></tt> method\r
+returning the SQL representation of the object.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.ISQLQuote-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__new__"></a><span class="summary-sig"><span class="summary-sig-name">__new__</span>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.ISQLQuote-class.html#getbinary" class="summary-sig-name"><code>getbinary</code></a>()</span></code>\r
+<br />\r
+return SQL-quoted binary representation of this object</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.ISQLQuote-class.html#getbuffer" class="summary-sig-name"><code>getbuffer</code></a>()</span></code>\r
+<br />\r
+return this object</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.ISQLQuote-class.html#getquoted" class="summary-sig-name"><code>getquoted</code></a>()</span></code>\r
+<br />\r
+return SQL-quoted representation of this object</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF PROPERTY SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Property Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="_wrapped"></a><strong><code>_wrapped</code></strong></td></tr></table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__init__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-vararg">...</span>)</span>\r
+    <br /><em class="fname">(Constructor)</em>\r
+  </h3>\r
+<p>x.__init__(...) initializes x; see x.__class__.__doc__ for signature</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__init__"><code>__builtin__.object.__init__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__new__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__new__</span>(<span class="sig-arg">T</span>,\r
+          <span class="sig-arg">S</span>,\r
+          <span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+a new object with type S, a subtype of T\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__new__"><code>__builtin__.object.__new__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="getbinary"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">getbinary</span>()</span>\r
+  </h3>\r
+<p>return SQL-quoted binary representation of this object</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="getbuffer"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">getbuffer</span>()</span>\r
+  </h3>\r
+<p>return this object</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="getquoted"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">getquoted</span>()</span>\r
+  </h3>\r
+<p>return SQL-quoted representation of this object</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:35 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2._psycopg.connection-class.html b/psycopg2/doc/api/private/psycopg2._psycopg.connection-class.html
new file mode 100644 (file)
index 0000000..0b6076e
--- /dev/null
@@ -0,0 +1,405 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2._psycopg.connection</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="../private/psycopg2._psycopg-module.html">Module&nbsp;_psycopg</a> ::\r
+        Class&nbsp;connection\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<strong>show&nbsp;private</strong>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="../private/psycopg2._psycopg.connection-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type connection</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+\r
+         |\r
+        <strong class="uidshort">connection</strong>\r
+</pre><br />\r
+\r
+<dl><dt>Known Subclasses:</dt>\r
+<dd>\r
+    <a href="psycopg2.psycopg1.connection-class.html"><code>connection</code></a>,\r
+    <a href="psycopg2.extras.DictConnection-class.html"><code>DictConnection</code></a></dd></dl>\r
+\r
+<hr/>\r
+\r
+<p>connection(dsn, ...) -&gt; new connection object</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__new__"></a><span class="summary-sig"><span class="summary-sig-name">__new__</span>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__repr__"></a><span class="summary-sig"><span class="summary-sig-name">__repr__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__str__"></a><span class="summary-sig"><span class="summary-sig-name">__str__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#close" class="summary-sig-name"><code>close</code></a>()</span></code>\r
+<br />\r
+Close the connection.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#commit" class="summary-sig-name"><code>commit</code></a>()</span></code>\r
+<br />\r
+Commit all changes to database.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype"><a href="../private/psycopg2._psycopg.cursor-class.html" class="link"><code>extensions.cursor</code></a></td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#cursor" class="summary-sig-name"><code>cursor</code></a>(<span class="summary-sig-arg">cursor_factory</span>)</span></code>\r
+<br />\r
+new cursor</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#rollback" class="summary-sig-name"><code>rollback</code></a>()</span></code>\r
+<br />\r
+Roll back all changes done to database.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#set_client_encoding" class="summary-sig-name"><code>set_client_encoding</code></a>(<span class="summary-sig-arg">encoding</span>)</span></code>\r
+<br />\r
+Set client encoding to <tt class="docutils literal docutils literal"><span class="pre">encoding</span></tt>.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#set_isolation_level" class="summary-sig-name"><code>set_isolation_level</code></a>(<span class="summary-sig-arg">level</span>)</span></code>\r
+<br />\r
+Switch isolation level to <tt class="docutils literal docutils literal"><span class="pre">level</span></tt>.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF PROPERTY SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Property Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#closed"><code>closed</code></a></strong>: True if the connection is closed.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#dsn"><code>dsn</code></a></strong>: The current connection string.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#encoding"><code>encoding</code></a></strong>: The current client encoding.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#isolation_level"><code>isolation_level</code></a></strong>: The current isolation level.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="notices"></a><strong><code>notices</code></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="notifies"></a><strong><code>notifies</code></strong></td></tr><tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;DBAPI-2.0 errors</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#Error"><code>Error</code></a></strong>: Base class for error exceptions.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#Warning"><code>Warning</code></a></strong>: A database warning.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#InterfaceError"><code>InterfaceError</code></a></strong>: Error related to the database interface.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#DatabaseError"><code>DatabaseError</code></a></strong>: Error related to the database engine.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#InternalError"><code>InternalError</code></a></strong>: The database encountered an internal error.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#OperationalError"><code>OperationalError</code></a></strong>: Error related to database operation (disconnect, memory allocation etc).</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#ProgrammingError"><code>ProgrammingError</code></a></strong>: Error related to database programming (SQL error, table not found etc).</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#IntegrityError"><code>IntegrityError</code></a></strong>: Error related to database integrity.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#DataError"><code>DataError</code></a></strong>: Error related to problems with the processed data.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#NotSupportedError"><code>NotSupportedError</code></a></strong>: A not supported datbase API was called.</td></tr></table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__init__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-vararg">...</span>)</span>\r
+    <br /><em class="fname">(Constructor)</em>\r
+  </h3>\r
+<p>x.__init__(...) initializes x; see x.__class__.__doc__ for signature</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__init__"><code>__builtin__.object.__init__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__new__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__new__</span>(<span class="sig-arg">T</span>,\r
+          <span class="sig-arg">S</span>,\r
+          <span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+a new object with type S, a subtype of T\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__new__"><code>__builtin__.object.__new__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__repr__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__repr__</span>(<span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Representation operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+repr(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__repr__"><code>__builtin__.object.__repr__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__str__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Informal representation operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+str(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__str__"><code>__builtin__.object.__str__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="close"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">close</span>()</span>\r
+  </h3>\r
+<p>Close the connection.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="commit"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">commit</span>()</span>\r
+  </h3>\r
+<p>Commit all changes to database.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="cursor"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">cursor</span>(<span class="sig-arg">cursor_factory</span>=<span class="sig-default">extensions.cursor</span>)</span>\r
+  </h3>\r
+<p>new cursor</p>\r
+<p>Return a new cursor.</p>\r
+<p>The <tt class="docutils literal"><span class="pre">cursor_factory</span></tt> argument can be used to\r
+create non-standard cursors by passing a class different from the\r
+default. Note that the new class <em>should</em> be a sub-class of\r
+<a href="../private/psycopg2._psycopg.cursor-class.html" class="link"><code>extensions.cursor</code></a>.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<a href="../private/psycopg2._psycopg.cursor-class.html" class="link"><code>extensions.cursor</code></a>      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="rollback"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">rollback</span>()</span>\r
+  </h3>\r
+<p>Roll back all changes done to database.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="set_client_encoding"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">set_client_encoding</span>(<span class="sig-arg">encoding</span>)</span>\r
+  </h3>\r
+<p>Set client encoding to <tt class="docutils literal docutils literal docutils literal"><span class="pre">encoding</span></tt>.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="set_isolation_level"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">set_isolation_level</span>(<span class="sig-arg">level</span>)</span>\r
+  </h3>\r
+<p>Switch isolation level to <tt class="docutils literal docutils literal docutils literal"><span class="pre">level</span></tt>.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF PROPERTY DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Property Details</th></tr>\r
+</table>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="Error"></a>\r
+<h3>Error</h3>\r
+<p>Base class for error exceptions.</p>\r
+</td></tr></table><table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="Warning"></a>\r
+<h3>Warning</h3>\r
+<p>A database warning.</p>\r
+</td></tr></table><table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="InterfaceError"></a>\r
+<h3>InterfaceError</h3>\r
+<p>Error related to the database interface.</p>\r
+</td></tr></table><table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="DatabaseError"></a>\r
+<h3>DatabaseError</h3>\r
+<p>Error related to the database engine.</p>\r
+</td></tr></table><table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="InternalError"></a>\r
+<h3>InternalError</h3>\r
+<p>The database encountered an internal error.</p>\r
+</td></tr></table><table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="OperationalError"></a>\r
+<h3>OperationalError</h3>\r
+<p>Error related to database operation (disconnect, memory allocation etc).</p>\r
+</td></tr></table><table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="ProgrammingError"></a>\r
+<h3>ProgrammingError</h3>\r
+<p>Error related to database programming (SQL error, table not found etc).</p>\r
+</td></tr></table><table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="IntegrityError"></a>\r
+<h3>IntegrityError</h3>\r
+<p>Error related to database integrity.</p>\r
+</td></tr></table><table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="DataError"></a>\r
+<h3>DataError</h3>\r
+<p>Error related to problems with the processed data.</p>\r
+</td></tr></table><table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="NotSupportedError"></a>\r
+<h3>NotSupportedError</h3>\r
+<p>A not supported datbase API was called.</p>\r
+</td></tr></table><table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="closed"></a>\r
+<h3>closed</h3>\r
+<p>True if the connection is closed.</p>\r
+</td></tr></table><table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="dsn"></a>\r
+<h3>dsn</h3>\r
+<p>The current connection string.</p>\r
+</td></tr></table><table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="encoding"></a>\r
+<h3>encoding</h3>\r
+<p>The current client encoding.</p>\r
+</td></tr></table><table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="isolation_level"></a>\r
+<h3>isolation_level</h3>\r
+<p>The current isolation level.</p>\r
+</td></tr></table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:31 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2._psycopg.cursor-class.html b/psycopg2/doc/api/private/psycopg2._psycopg.cursor-class.html
new file mode 100644 (file)
index 0000000..d3947aa
--- /dev/null
@@ -0,0 +1,599 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2._psycopg.cursor</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="../private/psycopg2._psycopg-module.html">Module&nbsp;_psycopg</a> ::\r
+        Class&nbsp;cursor\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<strong>show&nbsp;private</strong>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="../private/psycopg2._psycopg.cursor-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type cursor</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+\r
+         |\r
+        <strong class="uidshort">cursor</strong>\r
+</pre><br />\r
+\r
+<dl><dt>Known Subclasses:</dt>\r
+<dd>\r
+    <a href="psycopg2.psycopg1.cursor-class.html"><code>cursor</code></a>,\r
+    <a href="psycopg2.extras.DictCursor-class.html"><code>DictCursor</code></a></dd></dl>\r
+\r
+<hr/>\r
+\r
+<p>A database cursor.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__iter__"></a><span class="summary-sig"><span class="summary-sig-name">__iter__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return iter(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__new__"></a><span class="summary-sig"><span class="summary-sig-name">__new__</span>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__repr__"></a><span class="summary-sig"><span class="summary-sig-name">__repr__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__str__"></a><span class="summary-sig"><span class="summary-sig-name">__str__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#callproc" class="summary-sig-name"><code>callproc</code></a>(<span class="summary-sig-arg">procname</span>,\r
+          <span class="summary-sig-arg">parameters</span>,\r
+          <span class="summary-sig-arg">async</span>)</span></code>\r
+<br />\r
+Execute stored procedure.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#close" class="summary-sig-name"><code>close</code></a>()</span></code>\r
+<br />\r
+Close the cursor.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#copy_from" class="summary-sig-name"><code>copy_from</code></a>(<span class="summary-sig-arg">file</span>,\r
+          <span class="summary-sig-arg">table</span>,\r
+          <span class="summary-sig-arg">sep</span>,\r
+          <span class="summary-sig-arg">null</span>)</span></code>\r
+<br />\r
+Copy table from file.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#copy_to" class="summary-sig-name"><code>copy_to</code></a>(<span class="summary-sig-arg">file</span>,\r
+          <span class="summary-sig-arg">table</span>,\r
+          <span class="summary-sig-arg">sep</span>,\r
+          <span class="summary-sig-arg">null</span>)</span></code>\r
+<br />\r
+Copy table to file.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#execute" class="summary-sig-name"><code>execute</code></a>(<span class="summary-sig-arg">query</span>,\r
+          <span class="summary-sig-arg">vars</span>,\r
+          <span class="summary-sig-arg">async</span>)</span></code>\r
+<br />\r
+Execute query with bound vars.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#executemany" class="summary-sig-name"><code>executemany</code></a>(<span class="summary-sig-arg">query</span>,\r
+          <span class="summary-sig-arg">vars_list</span>,\r
+          <span class="summary-sig-arg">async</span>)</span></code>\r
+<br />\r
+Execute many queries with bound vars.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">list of tuple</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#fetchall" class="summary-sig-name"><code>fetchall</code></a>()</span></code>\r
+<br />\r
+Return all the remaining rows of a query result set.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">list of tuple</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#fetchmany" class="summary-sig-name"><code>fetchmany</code></a>(<span class="summary-sig-arg">size</span>)</span></code>\r
+<br />\r
+Return the next <a href="../private/psycopg2._psycopg.cursor-class.html#fetchmany" class="link"><code>size</code></a> rows of a query result set in the form of a list\r
+of tuples (by default) or using the sequence factory previously set in\r
+the <a href="../private/psycopg2._psycopg.cursor-class.html#row_factory" class="link"><code>row_factory</code></a> attribute.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">tuple or None</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#fetchone" class="summary-sig-name"><code>fetchone</code></a>()</span></code>\r
+<br />\r
+Return the next row of a query result set in the form of a tuple (by\r
+default) or using the sequence factory previously set in the\r
+<a href="../private/psycopg2._psycopg.cursor-class.html#row_factory" class="link"><code>row_factory</code></a> attribute.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">int</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#fileno" class="summary-sig-name"><code>fileno</code></a>()</span></code>\r
+<br />\r
+Return file descriptor associated to database connection.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">bool</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#isready" class="summary-sig-name"><code>isready</code></a>()</span></code>\r
+<br />\r
+Return True if data is ready after an async query.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">str</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#mogrify" class="summary-sig-name"><code>mogrify</code></a>(<span class="summary-sig-arg">query</span>,\r
+          <span class="summary-sig-arg">vars</span>)</span></code>\r
+<br />\r
+Return query after vars binding.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="next"></a><span class="summary-sig"><span class="summary-sig-name">next</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return the next value, or raise StopIteration...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#nextset" class="summary-sig-name"><code>nextset</code></a>()</span></code>\r
+<br />\r
+Skip to next set of data.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#scroll" class="summary-sig-name"><code>scroll</code></a>(<span class="summary-sig-arg">value</span>,\r
+          <span class="summary-sig-arg">mode</span>)</span></code>\r
+<br />\r
+Scroll to new position according to mode.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#setinputsizes" class="summary-sig-name"><code>setinputsizes</code></a>(<span class="summary-sig-arg">sizes</span>)</span></code>\r
+<br />\r
+Set memory areas before execute.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#setoutputsize" class="summary-sig-name"><code>setoutputsize</code></a>(<span class="summary-sig-arg">size</span>,\r
+          <span class="summary-sig-arg">column</span>)</span></code>\r
+<br />\r
+Set column buffer size.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF PROPERTY SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Property Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#arraysize"><code>arraysize</code></a></strong>: Number of records <a href="../private/psycopg2._psycopg.cursor-class.html#fetchmany" class="link"><code>fetchmany()</code></a> must fetch if not explicitely specified.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="binary_types"></a><strong><code>binary_types</code></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#connection"><code>connection</code></a></strong>: The connection where the cursor comes from.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#description"><code>description</code></a></strong>: Cursor description as defined in DBAPI-2.0.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#lastrowid"><code>lastrowid</code></a></strong>: The <tt class="docutils literal docutils literal docutils literal"><span class="pre">oid</span></tt> of the last row inserted by the cursor.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="name"></a><strong><code>name</code></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#query"><code>query</code></a></strong>: The last query text sent to the backend.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="row_factory"></a><strong><code>row_factory</code></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#rowcount"><code>rowcount</code></a></strong>: Number of rows read from the backend in the last command.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#rownumber"><code>rownumber</code></a></strong>: The current row position.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#statusmessage"><code>statusmessage</code></a></strong>: The return message of the last command.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="string_types"></a><strong><code>string_types</code></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="typecaster"></a><strong><code>typecaster</code></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="tzinfo_factory"></a><strong><code>tzinfo_factory</code></strong></td></tr></table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__init__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-vararg">...</span>)</span>\r
+    <br /><em class="fname">(Constructor)</em>\r
+  </h3>\r
+<p>x.__init__(...) initializes x; see x.__class__.__doc__ for signature</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__init__"><code>__builtin__.object.__init__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__iter__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__iter__</span>(<span class="sig-arg">x</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+iter(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__new__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__new__</span>(<span class="sig-arg">T</span>,\r
+          <span class="sig-arg">S</span>,\r
+          <span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+a new object with type S, a subtype of T\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__new__"><code>__builtin__.object.__new__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__repr__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__repr__</span>(<span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Representation operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+repr(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__repr__"><code>__builtin__.object.__repr__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__str__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Informal representation operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+str(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__str__"><code>__builtin__.object.__str__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="callproc"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">callproc</span>(<span class="sig-arg">procname</span>,\r
+          <span class="sig-arg">parameters</span>=<span class="sig-default">None</span>,\r
+          <span class="sig-arg">async</span>=<span class="sig-default">0</span>)</span>\r
+  </h3>\r
+<p>Execute stored procedure.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="close"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">close</span>()</span>\r
+  </h3>\r
+<p>Close the cursor.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="copy_from"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">copy_from</span>(<span class="sig-arg">file</span>,\r
+          <span class="sig-arg">table</span>,\r
+          <span class="sig-arg">sep</span>=<span class="sig-default">'\t'</span>,\r
+          <span class="sig-arg">null</span>=<span class="sig-default">'\N'</span>)</span>\r
+  </h3>\r
+<p>Copy table from file.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="copy_to"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">copy_to</span>(<span class="sig-arg">file</span>,\r
+          <span class="sig-arg">table</span>,\r
+          <span class="sig-arg">sep</span>=<span class="sig-default">'\t'</span>,\r
+          <span class="sig-arg">null</span>=<span class="sig-default">'\N'</span>)</span>\r
+  </h3>\r
+<p>Copy table to file.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="execute"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">execute</span>(<span class="sig-arg">query</span>,\r
+          <span class="sig-arg">vars</span>=<span class="sig-default">None</span>,\r
+          <span class="sig-arg">async</span>=<span class="sig-default">0</span>)</span>\r
+  </h3>\r
+<p>Execute query with bound vars.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="executemany"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">executemany</span>(<span class="sig-arg">query</span>,\r
+          <span class="sig-arg">vars_list</span>=<span class="sig-default">()</span>,\r
+          <span class="sig-arg">async</span>=<span class="sig-default">0</span>)</span>\r
+  </h3>\r
+<p>Execute many queries with bound vars.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="fetchall"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">fetchall</span>()</span>\r
+  </h3>\r
+<p>Return all the remaining rows of a query result set.</p>\r
+<p>Rows are returned in the form of a list of tuples (by default) or using\r
+the sequence factory previously set in the <a href="../private/psycopg2._psycopg.cursor-class.html#row_factory" class="link"><code>row_factory</code></a> attribute.\r
+Return <code>None</code> when no more data is available.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+list of tuple      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="fetchmany"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">fetchmany</span>(<span class="sig-arg">size</span>=<span class="sig-default">self.arraysize</span>)</span>\r
+  </h3>\r
+<p>Return the next <a href="../private/psycopg2._psycopg.cursor-class.html#fetchmany" class="link"><code>size</code></a> rows of a query result set in the form of a list\r
+of tuples (by default) or using the sequence factory previously set in\r
+the <a href="../private/psycopg2._psycopg.cursor-class.html#row_factory" class="link"><code>row_factory</code></a> attribute. Return <code>None</code> when no more data is available.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+list of tuple      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="fetchone"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">fetchone</span>()</span>\r
+  </h3>\r
+<p>Return the next row of a query result set in the form of a tuple (by\r
+default) or using the sequence factory previously set in the\r
+<a href="../private/psycopg2._psycopg.cursor-class.html#row_factory" class="link"><code>row_factory</code></a> attribute. Return <code>None</code> when no more data is available.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+tuple or None      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="fileno"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">fileno</span>()</span>\r
+  </h3>\r
+<p>Return file descriptor associated to database connection.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+int      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="isready"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">isready</span>()</span>\r
+  </h3>\r
+<p>Return True if data is ready after an async query.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+bool      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="mogrify"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">mogrify</span>(<span class="sig-arg">query</span>,\r
+          <span class="sig-arg">vars</span>=<span class="sig-default">None</span>)</span>\r
+  </h3>\r
+<p>Return query after vars binding.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+str      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="next"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">next</span>(<span class="sig-arg">x</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+the next value, or raise StopIteration\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="nextset"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">nextset</span>()</span>\r
+  </h3>\r
+<p>Skip to next set of data.</p>\r
+<p>This method is not supported (PostgreSQL does not have multiple data \r
+sets) and will raise a NotSupportedError exception.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="scroll"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">scroll</span>(<span class="sig-arg">value</span>,\r
+          <span class="sig-arg">mode</span>=<span class="sig-default">'relative'</span>)</span>\r
+  </h3>\r
+<p>Scroll to new position according to mode.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="setinputsizes"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">setinputsizes</span>(<span class="sig-arg">sizes</span>)</span>\r
+  </h3>\r
+<p>Set memory areas before execute.</p>\r
+<p>This method currently does nothing but it is safe to call it.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="setoutputsize"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">setoutputsize</span>(<span class="sig-arg">size</span>,\r
+          <span class="sig-arg">column</span>=<span class="sig-default">None</span>)</span>\r
+  </h3>\r
+<p>Set column buffer size.</p>\r
+<p>This method currently does nothing but it is safe to call it.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF PROPERTY DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Property Details</th></tr>\r
+</table>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="arraysize"></a>\r
+<h3>arraysize</h3>\r
+<p>Number of records <a href="../private/psycopg2._psycopg.cursor-class.html#fetchmany" class="link"><code>fetchmany()</code></a> must fetch if not explicitely specified.</p>\r
+</td></tr></table><table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="connection"></a>\r
+<h3>connection</h3>\r
+<p>The connection where the cursor comes from.</p>\r
+</td></tr></table><table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="description"></a>\r
+<h3>description</h3>\r
+<p>Cursor description as defined in DBAPI-2.0.</p>\r
+</td></tr></table><table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="lastrowid"></a>\r
+<h3>lastrowid</h3>\r
+<p>The <tt class="docutils literal docutils literal docutils literal docutils literal"><span class="pre">oid</span></tt> of the last row inserted by the cursor.</p>\r
+</td></tr></table><table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="query"></a>\r
+<h3>query</h3>\r
+<p>The last query text sent to the backend.</p>\r
+</td></tr></table><table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="rowcount"></a>\r
+<h3>rowcount</h3>\r
+<p>Number of rows read from the backend in the last command.</p>\r
+</td></tr></table><table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="rownumber"></a>\r
+<h3>rownumber</h3>\r
+<p>The current row position.</p>\r
+</td></tr></table><table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+\r
+<a name="statusmessage"></a>\r
+<h3>statusmessage</h3>\r
+<p>The return message of the last command.</p>\r
+</td></tr></table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:34 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.extensions-module.html b/psycopg2/doc/api/private/psycopg2.extensions-module.html
new file mode 100644 (file)
index 0000000..a78fd66
--- /dev/null
@@ -0,0 +1,418 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.extensions</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Module&nbsp;extensions\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.extensions-module.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.extensions-module.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF MODULE DESCRIPTION =========== -->\r
+<h2 class="module">Module psycopg2.extensions</h2>\r
+\r
+<p>psycopg extensions to the DBAPI-2.0</p>\r
+<p>This module holds all the extensions to the DBAPI-2.0 provided by psycopg.</p>\r
+<ul class="rst-simple">\r
+<li><a href="../private/psycopg2._psycopg.connection-class.html" class="link"><code>connection</code></a> -- the new-type inheritable connection class</li>\r
+<li><a href="../private/psycopg2._psycopg.cursor-class.html" class="link"><code>cursor</code></a> -- the new-type inheritable cursor class</li>\r
+<li><a href="psycopg2.extensions-module.html#adapt" class="link"><code>adapt()</code></a> -- exposes the <a class="reference" href="http://www.python.org/peps/pep-0246.html">PEP-246</a> compatible adapting mechanism used\r
+by psycopg to adapt Python types to PostgreSQL ones</li>\r
+</ul>\r
+<hr/>\r
+\r
+<!-- =========== START OF FUNCTION SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Function Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">object</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.extensions-module.html#adapt" class="summary-sig-name"><code>adapt</code></a>(<span class="summary-sig-arg">obj</span>,\r
+          <span class="summary-sig-arg">protocol</span>,\r
+          <span class="summary-sig-arg">alternate</span>)</span></code>\r
+<br />\r
+adapt obj to given protocol</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new AsIs wrapper object</td>\r
+  <td><code><a name="AsIs"></a><span class="summary-sig"><span class="summary-sig-name">AsIs</span>(<span class="summary-sig-arg">obj</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new boolean value</td>\r
+  <td><code><a name="Boolean"></a><span class="summary-sig"><span class="summary-sig-name">Boolean</span>(<span class="summary-sig-arg">obj</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new wrapper</td>\r
+  <td><code><a name="DateFromPy"></a><span class="summary-sig"><span class="summary-sig-name">DateFromPy</span>(<span class="summary-sig-arg">datetime.date</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new wrapper</td>\r
+  <td><code><a name="IntervalFromPy"></a><span class="summary-sig"><span class="summary-sig-name">IntervalFromPy</span>(<span class="summary-sig-arg">datetime.timedelta</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new type object</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.extensions-module.html#new_type" class="summary-sig-name"><code>new_type</code></a>(<span class="summary-sig-arg">oids</span>,\r
+          <span class="summary-sig-arg">name</span>,\r
+          <span class="summary-sig-arg">adapter</span>)</span></code>\r
+<br />\r
+Create a new binding object.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new quoted string</td>\r
+  <td><code><a name="QuotedString"></a><span class="summary-sig"><span class="summary-sig-name">QuotedString</span>(<span class="summary-sig-arg">str</span>,\r
+          <span class="summary-sig-arg">enc</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.extensions-module.html#register_adapter" class="summary-sig-name"><code>register_adapter</code></a>(<span class="summary-sig-arg">typ</span>,\r
+          <span class="summary-sig-arg">callable</span>)</span></code>\r
+<br />\r
+Register 'callable' as an ISQLQuote adapter for type 'typ'.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">None</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.extensions-module.html#register_type" class="summary-sig-name"><code>register_type</code></a>(<span class="summary-sig-arg">obj</span>)</span></code>\r
+<br />\r
+register obj with psycopg type system</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new wrapper</td>\r
+  <td><code><a name="TimeFromPy"></a><span class="summary-sig"><span class="summary-sig-name">TimeFromPy</span>(<span class="summary-sig-arg">datetime.time</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new wrapper</td>\r
+  <td><code><a name="TimestampFromPy"></a><span class="summary-sig"><span class="summary-sig-name">TimestampFromPy</span>(<span class="summary-sig-arg">datetime.datetime</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF VARIABLE SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Variable Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>int</code></td>\r
+<td><strong><a href="psycopg2.extensions-module.html#ISOLATION_LEVEL_AUTOCOMMIT"><code>ISOLATION_LEVEL_AUTOCOMMIT</code></a></strong> = <span title="0">0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>int</code></td>\r
+<td><strong><a href="psycopg2.extensions-module.html#ISOLATION_LEVEL_READ_COMMITTED"><code>ISOLATION_LEVEL_READ_COMMITTED</code></a></strong> = <span title="1">1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>int</code></td>\r
+<td><strong><a href="psycopg2.extensions-module.html#ISOLATION_LEVEL_READ_UNCOMMITTED"><code>ISOLATION_LEVEL_READ_UNCOMMITTED</code></a></strong> = <span title="1">1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>int</code></td>\r
+<td><strong><a href="psycopg2.extensions-module.html#ISOLATION_LEVEL_REPEATABLE_READ"><code>ISOLATION_LEVEL_REPEATABLE_READ</code></a></strong> = <span title="2">2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>int</code></td>\r
+<td><strong><a href="psycopg2.extensions-module.html#ISOLATION_LEVEL_SERIALIZABLE"><code>ISOLATION_LEVEL_SERIALIZABLE</code></a></strong> = <span title="2">2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF FUNCTION DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Function Details</th></tr>\r
+</table>\r
+\r
+<a name="adapt"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">adapt</span>(<span class="sig-arg">obj</span>,\r
+          <span class="sig-arg">protocol</span>,\r
+          <span class="sig-arg">alternate</span>)</span>\r
+  </h3>\r
+<p>adapt obj to given protocol</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+object      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="AsIs"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">AsIs</span>(<span class="sig-arg">obj</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new AsIs wrapper object      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="Boolean"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">Boolean</span>(<span class="sig-arg">obj</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new boolean value      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="DateFromPy"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">DateFromPy</span>(<span class="sig-arg">datetime.date</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new wrapper      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="IntervalFromPy"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">IntervalFromPy</span>(<span class="sig-arg">datetime.timedelta</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new wrapper      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="new_type"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">new_type</span>(<span class="sig-arg">oids</span>,\r
+          <span class="sig-arg">name</span>,\r
+          <span class="sig-arg">adapter</span>)</span>\r
+  </h3>\r
+<p>Create a new binding object. The object can be used with the\r
+<a href="psycopg2.extensions-module.html#register_type" class="link"><code>register_type()</code></a> function to bind PostgreSQL objects to python objects.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Parameters:</dt>\r
+      <dd><code><strong class="pname">oids</strong></code> -\r
+ Tuple of <tt class="docutils literal"><span class="pre">oid</span></tt> of the PostgreSQL types to convert.\r
+      </dd>\r
+      <dd><code><strong class="pname">name</strong></code> -\r
+ Name for the new type\r
+      </dd>\r
+      <dd><code><strong class="pname">adapter</strong></code> -\r
+ Callable to perform type conversion.\r
+It must have the signature <tt class="docutils literal"><span class="pre">fun(value,</span> <span class="pre">cur)</span></tt> where <tt class="docutils literal"><span class="pre">value</span></tt> is\r
+the string representation returned by PostgreSQL (<code>None</code> if <tt class="docutils literal"><span class="pre">NULL</span></tt>)\r
+and <tt class="docutils literal"><span class="pre">cur</span></tt> is the cursor from which data are read.\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new type object      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="QuotedString"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">QuotedString</span>(<span class="sig-arg">str</span>,\r
+          <span class="sig-arg">enc</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new quoted string      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="register_adapter"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">register_adapter</span>(<span class="sig-arg">typ</span>,\r
+          <span class="sig-arg">callable</span>)</span>\r
+  </h3>\r
+<p>Register 'callable' as an ISQLQuote adapter for type 'typ'.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="register_type"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">register_type</span>(<span class="sig-arg">obj</span>)</span>\r
+  </h3>\r
+<p>register obj with psycopg type system</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Parameters:</dt>\r
+      <dd><code><strong class="pname">obj</strong></code> -\r
+ A type adapter created by <a href="psycopg2.extensions-module.html#new_type" class="link"><code>new_type()</code></a>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+None      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="TimeFromPy"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">TimeFromPy</span>(<span class="sig-arg">datetime.time</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new wrapper      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="TimestampFromPy"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">TimestampFromPy</span>(<span class="sig-arg">datetime.datetime</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new wrapper      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF VARIABLE DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Variable Details</th></tr>\r
+</table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="ISOLATION_LEVEL_AUTOCOMMIT"></a>\r
+<h3>ISOLATION_LEVEL_AUTOCOMMIT</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>int</code>\r
+\r
+      </dd>\r
+      <dt title="0">Value:</dt>\r
+      <dd title="0"><table><tr><td>\r
+<pre class="variable">\r
+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="ISOLATION_LEVEL_READ_COMMITTED"></a>\r
+<h3>ISOLATION_LEVEL_READ_COMMITTED</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>int</code>\r
+\r
+      </dd>\r
+      <dt title="1">Value:</dt>\r
+      <dd title="1"><table><tr><td>\r
+<pre class="variable">\r
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="ISOLATION_LEVEL_READ_UNCOMMITTED"></a>\r
+<h3>ISOLATION_LEVEL_READ_UNCOMMITTED</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>int</code>\r
+\r
+      </dd>\r
+      <dt title="1">Value:</dt>\r
+      <dd title="1"><table><tr><td>\r
+<pre class="variable">\r
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="ISOLATION_LEVEL_REPEATABLE_READ"></a>\r
+<h3>ISOLATION_LEVEL_REPEATABLE_READ</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>int</code>\r
+\r
+      </dd>\r
+      <dt title="2">Value:</dt>\r
+      <dd title="2"><table><tr><td>\r
+<pre class="variable">\r
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="ISOLATION_LEVEL_SERIALIZABLE"></a>\r
+<h3>ISOLATION_LEVEL_SERIALIZABLE</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>int</code>\r
+\r
+      </dd>\r
+      <dt title="2">Value:</dt>\r
+      <dd title="2"><table><tr><td>\r
+<pre class="variable">\r
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:32 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.extras-module.html b/psycopg2/doc/api/private/psycopg2.extras-module.html
new file mode 100644 (file)
index 0000000..463fc22
--- /dev/null
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.extras</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Module&nbsp;extras\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.extras-module.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.extras-module.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF MODULE DESCRIPTION =========== -->\r
+<h2 class="module">Module psycopg2.extras</h2>\r
+\r
+<p>Miscellaneous goodies for psycopg2</p>\r
+<p>This module is a generic place used to hold little helper functions\r
+and classes untill a better place in the distribution is found.</p>\r
+<hr/>\r
+\r
+<!-- =========== START OF CLASSES =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Classes</th></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.extras.DictConnection-class.html"><code>DictConnection</code></a></strong></td>\r
+  <td>A connection that uses DictCursor automatically.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.extras.DictCursor-class.html"><code>DictCursor</code></a></strong></td>\r
+  <td>A cursor that keeps a list of column name -&gt; index mappings.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.extras.DictRow-class.html"><code>DictRow</code></a></strong></td>\r
+  <td>A row object that allow by-colun-name access to data.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.extras.SQL_IN-class.html"><code>SQL_IN</code></a></strong></td>\r
+  <td>Adapt any iterable to an SQL quotable object.</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:32 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.extras.DictConnection-class.html b/psycopg2/doc/api/private/psycopg2.extras.DictConnection-class.html
new file mode 100644 (file)
index 0000000..73989b5
--- /dev/null
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.extras.DictConnection</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.extras-module.html">Module&nbsp;extras</a> ::\r
+        Class&nbsp;DictConnection\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.extras.DictConnection-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.extras.DictConnection-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type DictConnection</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+    \r
+         |    \r
+<a href="../private/psycopg2._psycopg.connection-class.html"><code>connection</code></a> --+\r
+             |\r
+            <strong class="uidshort">DictConnection</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>A connection that uses DictCursor automatically.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="cursor"></a><span class="summary-sig"><span class="summary-sig-name">cursor</span>(<span class="summary-sig-arg">self</span>)</span></code>\r
+</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from connection</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#__new__" class="summary-sig-name"><code>__new__</code></a>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#close" class="summary-sig-name"><code>close</code></a>()</span></code>\r
+<br />\r
+Close the connection.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#commit" class="summary-sig-name"><code>commit</code></a>()</span></code>\r
+<br />\r
+Commit all changes to database.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#rollback" class="summary-sig-name"><code>rollback</code></a>()</span></code>\r
+<br />\r
+Roll back all changes done to database.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#set_client_encoding" class="summary-sig-name"><code>set_client_encoding</code></a>(<span class="summary-sig-arg">encoding</span>)</span></code>\r
+<br />\r
+Set client encoding to <tt class="docutils literal"><span class="pre">encoding</span></tt>.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#set_isolation_level" class="summary-sig-name"><code>set_isolation_level</code></a>(<span class="summary-sig-arg">level</span>)</span></code>\r
+<br />\r
+Switch isolation level to <tt class="docutils literal"><span class="pre">level</span></tt>.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF PROPERTY SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Property Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from connection</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#closed"><code>closed</code></a></strong>: True if the connection is closed.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#DatabaseError"><code>DatabaseError</code></a></strong>: Error related to the database engine.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#DataError"><code>DataError</code></a></strong>: Error related to problems with the processed data.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#dsn"><code>dsn</code></a></strong>: The current connection string.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#encoding"><code>encoding</code></a></strong>: The current client encoding.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#Error"><code>Error</code></a></strong>: Base class for error exceptions.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#IntegrityError"><code>IntegrityError</code></a></strong>: Error related to database integrity.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#InterfaceError"><code>InterfaceError</code></a></strong>: Error related to the database interface.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#InternalError"><code>InternalError</code></a></strong>: The database encountered an internal error.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#isolation_level"><code>isolation_level</code></a></strong>: The current isolation level.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#notices"><code>notices</code></a></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#notifies"><code>notifies</code></a></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#NotSupportedError"><code>NotSupportedError</code></a></strong>: A not supported datbase API was called.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#OperationalError"><code>OperationalError</code></a></strong>: Error related to database operation (disconnect, memory allocation etc).</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#ProgrammingError"><code>ProgrammingError</code></a></strong>: Error related to database programming (SQL error, table not found etc).</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#Warning"><code>Warning</code></a></strong>: A database warning.</td></tr></table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="cursor"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">cursor</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="../private/psycopg2._psycopg.connection-class.html#cursor"><code>psycopg2._psycopg.connection.cursor</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:31 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.extras.DictCursor-class.html b/psycopg2/doc/api/private/psycopg2.extras.DictCursor-class.html
new file mode 100644 (file)
index 0000000..80a05c9
--- /dev/null
@@ -0,0 +1,359 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.extras.DictCursor</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.extras-module.html">Module&nbsp;extras</a> ::\r
+        Class&nbsp;DictCursor\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.extras.DictCursor-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.extras.DictCursor-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type DictCursor</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+    \r
+         |    \r
+    <a href="../private/psycopg2._psycopg.cursor-class.html"><code>cursor</code></a> --+\r
+             |\r
+            <strong class="uidshort">DictCursor</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>A cursor that keeps a list of column name -&gt; index mappings.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="callproc"></a><span class="summary-sig"><span class="summary-sig-name">callproc</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">procname</span>,\r
+          <span class="summary-sig-arg">vars</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="execute"></a><span class="summary-sig"><span class="summary-sig-name">execute</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">query</span>,\r
+          <span class="summary-sig-arg">vars</span>,\r
+          <span class="summary-sig-arg">async</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="fetchall"></a><span class="summary-sig"><span class="summary-sig-name">fetchall</span>(<span class="summary-sig-arg">self</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="fetchmany"></a><span class="summary-sig"><span class="summary-sig-name">fetchmany</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">size</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="fetchone"></a><span class="summary-sig"><span class="summary-sig-name">fetchone</span>(<span class="summary-sig-arg">self</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="_build_index"></a><span class="summary-sig"><span class="summary-sig-name">_build_index</span>(<span class="summary-sig-arg">self</span>)</span></code>\r
+</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from cursor</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#__iter__" class="summary-sig-name"><code>__iter__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return iter(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#__new__" class="summary-sig-name"><code>__new__</code></a>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#close" class="summary-sig-name"><code>close</code></a>()</span></code>\r
+<br />\r
+Close the cursor.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#copy_from" class="summary-sig-name"><code>copy_from</code></a>(<span class="summary-sig-arg">file</span>,\r
+          <span class="summary-sig-arg">table</span>,\r
+          <span class="summary-sig-arg">sep</span>,\r
+          <span class="summary-sig-arg">null</span>)</span></code>\r
+<br />\r
+Copy table from file.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#copy_to" class="summary-sig-name"><code>copy_to</code></a>(<span class="summary-sig-arg">file</span>,\r
+          <span class="summary-sig-arg">table</span>,\r
+          <span class="summary-sig-arg">sep</span>,\r
+          <span class="summary-sig-arg">null</span>)</span></code>\r
+<br />\r
+Copy table to file.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#executemany" class="summary-sig-name"><code>executemany</code></a>(<span class="summary-sig-arg">query</span>,\r
+          <span class="summary-sig-arg">vars_list</span>,\r
+          <span class="summary-sig-arg">async</span>)</span></code>\r
+<br />\r
+Execute many queries with bound vars.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">int</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#fileno" class="summary-sig-name"><code>fileno</code></a>()</span></code>\r
+<br />\r
+Return file descriptor associated to database connection.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">bool</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#isready" class="summary-sig-name"><code>isready</code></a>()</span></code>\r
+<br />\r
+Return True if data is ready after an async query.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">str</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#mogrify" class="summary-sig-name"><code>mogrify</code></a>(<span class="summary-sig-arg">query</span>,\r
+          <span class="summary-sig-arg">vars</span>)</span></code>\r
+<br />\r
+Return query after vars binding.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#next" class="summary-sig-name"><code>next</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return the next value, or raise StopIteration...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#nextset" class="summary-sig-name"><code>nextset</code></a>()</span></code>\r
+<br />\r
+Skip to next set of data.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#scroll" class="summary-sig-name"><code>scroll</code></a>(<span class="summary-sig-arg">value</span>,\r
+          <span class="summary-sig-arg">mode</span>)</span></code>\r
+<br />\r
+Scroll to new position according to mode.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#setinputsizes" class="summary-sig-name"><code>setinputsizes</code></a>(<span class="summary-sig-arg">sizes</span>)</span></code>\r
+<br />\r
+Set memory areas before execute.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#setoutputsize" class="summary-sig-name"><code>setoutputsize</code></a>(<span class="summary-sig-arg">size</span>,\r
+          <span class="summary-sig-arg">column</span>)</span></code>\r
+<br />\r
+Set column buffer size.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF PROPERTY SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Property Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from cursor</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#arraysize"><code>arraysize</code></a></strong>: Number of records <a href="../private/psycopg2._psycopg.cursor-class.html#fetchmany" class="link"><code>fetchmany()</code></a> must fetch if not explicitely specified.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#binary_types"><code>binary_types</code></a></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#connection"><code>connection</code></a></strong>: The connection where the cursor comes from.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#description"><code>description</code></a></strong>: Cursor description as defined in DBAPI-2.0.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#lastrowid"><code>lastrowid</code></a></strong>: The <tt class="docutils literal"><span class="pre">oid</span></tt> of the last row inserted by the cursor.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#name"><code>name</code></a></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#query"><code>query</code></a></strong>: The last query text sent to the backend.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#row_factory"><code>row_factory</code></a></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#rowcount"><code>rowcount</code></a></strong>: Number of rows read from the backend in the last command.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#rownumber"><code>rownumber</code></a></strong>: The current row position.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#statusmessage"><code>statusmessage</code></a></strong>: The return message of the last command.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#string_types"><code>string_types</code></a></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#typecaster"><code>typecaster</code></a></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#tzinfo_factory"><code>tzinfo_factory</code></a></strong></td></tr></table><br />\r
+\r
+\r
+<!-- =========== START OF CLASS VARIABLE SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Class Variable Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>int</code></td>\r
+<td><strong><a href="../private/psycopg2.extras.DictCursor-class.html#__query_executed"><code>_DictCursor__query_executed</code></a></strong> = <span title="0">0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="callproc"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">callproc</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">procname</span>,\r
+          <span class="sig-arg">vars</span>=<span class="sig-default">None</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="../private/psycopg2._psycopg.cursor-class.html#callproc"><code>psycopg2._psycopg.cursor.callproc</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="execute"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">execute</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">query</span>,\r
+          <span class="sig-arg">vars</span>=<span class="sig-default">None</span>,\r
+          <span class="sig-arg">async</span>=<span class="sig-default">0</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="../private/psycopg2._psycopg.cursor-class.html#execute"><code>psycopg2._psycopg.cursor.execute</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="fetchall"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">fetchall</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="../private/psycopg2._psycopg.cursor-class.html#fetchall"><code>psycopg2._psycopg.cursor.fetchall</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="fetchmany"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">fetchmany</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">size</span>=<span class="sig-default">None</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="../private/psycopg2._psycopg.cursor-class.html#fetchmany"><code>psycopg2._psycopg.cursor.fetchmany</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="fetchone"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">fetchone</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="../private/psycopg2._psycopg.cursor-class.html#fetchone"><code>psycopg2._psycopg.cursor.fetchone</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="_build_index"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">_build_index</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF CLASS VARIABLE DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Class Variable Details</th></tr>\r
+</table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="_DictCursor__query_executed"></a>\r
+<h3>_DictCursor__query_executed</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>int</code>\r
+\r
+      </dd>\r
+      <dt title="0">Value:</dt>\r
+      <dd title="0"><table><tr><td>\r
+<pre class="variable">\r
+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:32 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.extras.DictRow-class.html b/psycopg2/doc/api/private/psycopg2.extras.DictRow-class.html
new file mode 100644 (file)
index 0000000..db74990
--- /dev/null
@@ -0,0 +1,376 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.extras.DictRow</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.extras-module.html">Module&nbsp;extras</a> ::\r
+        Class&nbsp;DictRow\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.extras.DictRow-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.extras.DictRow-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type DictRow</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+    \r
+         |    \r
+      <a href="__builtin__.list-class.html"><code>list</code></a> --+\r
+             |\r
+            <strong class="uidshort">DictRow</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>A row object that allow by-colun-name access to data.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__init__"></a><span class="summary-sig"><span class="summary-sig-name">__init__</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">cursor</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__getitem__"></a><span class="summary-sig"><span class="summary-sig-name">__getitem__</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">x</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="get"></a><span class="summary-sig"><span class="summary-sig-name">get</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">default</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="has_key"></a><span class="summary-sig"><span class="summary-sig-name">has_key</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">x</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="items"></a><span class="summary-sig"><span class="summary-sig-name">items</span>(<span class="summary-sig-arg">self</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="keys"></a><span class="summary-sig"><span class="summary-sig-name">keys</span>(<span class="summary-sig-arg">self</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="values"></a><span class="summary-sig"><span class="summary-sig-name">values</span>(<span class="summary-sig-arg">self</span>)</span></code>\r
+</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from list</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__add__" class="summary-sig-name"><code>__add__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x+y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__contains__" class="summary-sig-name"><code>__contains__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return y in x...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__delitem__" class="summary-sig-name"><code>__delitem__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return del x[y]...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__delslice__" class="summary-sig-name"><code>__delslice__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">i</span>,\r
+          <span class="summary-sig-arg">j</span>)</span></code>\r
+<br />\r
+Use of negative indices is not supported.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__eq__" class="summary-sig-name"><code>__eq__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x==y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__ge__" class="summary-sig-name"><code>__ge__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x&gt;=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__getslice__" class="summary-sig-name"><code>__getslice__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">i</span>,\r
+          <span class="summary-sig-arg">j</span>)</span></code>\r
+<br />\r
+Use of negative indices is not supported.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__gt__" class="summary-sig-name"><code>__gt__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x&gt;y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__iadd__" class="summary-sig-name"><code>__iadd__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x+=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__imul__" class="summary-sig-name"><code>__imul__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x*=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__iter__" class="summary-sig-name"><code>__iter__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return iter(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__le__" class="summary-sig-name"><code>__le__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x&lt;=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__len__" class="summary-sig-name"><code>__len__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return len(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__lt__" class="summary-sig-name"><code>__lt__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x&lt;y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__mul__" class="summary-sig-name"><code>__mul__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">n</span>)</span></code>\r
+<br />\r
+Return x*n...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__ne__" class="summary-sig-name"><code>__ne__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x!=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__new__" class="summary-sig-name"><code>__new__</code></a>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__rmul__" class="summary-sig-name"><code>__rmul__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">n</span>)</span></code>\r
+<br />\r
+Return n*x...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__setitem__" class="summary-sig-name"><code>__setitem__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">i</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x[i]=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__setslice__" class="summary-sig-name"><code>__setslice__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">i</span>,\r
+          <span class="summary-sig-arg">j</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Use  of negative indices is not supported.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#append" class="summary-sig-name"><code>append</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">object</span>)</span></code>\r
+<br />\r
+append object to end</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#count" class="summary-sig-name"><code>count</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">value</span>)</span></code>\r
+<br />\r
+return number of occurrences of value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#extend" class="summary-sig-name"><code>extend</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">iterable</span>)</span></code>\r
+<br />\r
+extend list by appending elements from the iterable</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#index" class="summary-sig-name"><code>index</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+L.index(value, [start, [stop]]) -&gt; integer -- return first index of value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#insert" class="summary-sig-name"><code>insert</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">index</span>,\r
+          <span class="summary-sig-arg">object</span>)</span></code>\r
+<br />\r
+insert object before index</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#pop" class="summary-sig-name"><code>pop</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">index</span>)</span></code>\r
+<br />\r
+remove and return item at index (default last)</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#remove" class="summary-sig-name"><code>remove</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">value</span>)</span></code>\r
+<br />\r
+remove first occurrence of value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#reverse" class="summary-sig-name"><code>reverse</code></a>(<span class="summary-sig-arg">L</span>)</span></code>\r
+<br />\r
+reverse <em>IN PLACE</em></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#sort" class="summary-sig-name"><code>sort</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">cmpfunc</span>)</span></code>\r
+<br />\r
+stable sort <em>IN PLACE</em>; cmpfunc(x, y) -&gt; -1, 0, 1</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__init__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">cursor</span>)</span>\r
+    <br /><em class="fname">(Constructor)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.list-class.html#__init__"><code>__builtin__.list.__init__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__getitem__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__getitem__</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Indexing operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.list-class.html#__getitem__"><code>__builtin__.list.__getitem__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="get"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">get</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">x</span>,\r
+          <span class="sig-arg">default</span>=<span class="sig-default">None</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="has_key"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">has_key</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">x</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="items"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">items</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="keys"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">keys</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="values"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">values</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.extras.SQL_IN-class.html b/psycopg2/doc/api/private/psycopg2.extras.SQL_IN-class.html
new file mode 100644 (file)
index 0000000..6b7009b
--- /dev/null
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.extras.SQL_IN</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.extras-module.html">Module&nbsp;extras</a> ::\r
+        Class&nbsp;SQL_IN\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.extras.SQL_IN-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.extras.SQL_IN-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type SQL_IN</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+\r
+         |\r
+        <strong class="uidshort">SQL_IN</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>Adapt any iterable to an SQL quotable object.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__init__"></a><span class="summary-sig"><span class="summary-sig-name">__init__</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">seq</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="getquoted"></a><span class="summary-sig"><span class="summary-sig-name">__str__</span>(<span class="summary-sig-arg">self</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="getquoted"></a><span class="summary-sig"><span class="summary-sig-name">getquoted</span>(<span class="summary-sig-arg">self</span>)</span></code>\r
+</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__new__" class="summary-sig-name"><code>__new__</code></a>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__init__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">seq</span>)</span>\r
+    <br /><em class="fname">(Constructor)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__init__"><code>__builtin__.object.__init__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="getquoted"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">self</span>)</span>\r
+    <br /><em class="fname">(Informal representation operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="getquoted"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">getquoted</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:35 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.pool-module.html b/psycopg2/doc/api/private/psycopg2.pool-module.html
new file mode 100644 (file)
index 0000000..64e53c1
--- /dev/null
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.pool</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Module&nbsp;pool\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.pool-module.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.pool-module.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF MODULE DESCRIPTION =========== -->\r
+<h2 class="module">Module psycopg2.pool</h2>\r
+\r
+<p>Connection pooling for psycopg2</p>\r
+<p>This module implements thread-safe (and not) connection pools.</p>\r
+<hr/>\r
+\r
+<!-- =========== START OF CLASSES =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Classes</th></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.pool.AbstractConnectionPool-class.html"><code>AbstractConnectionPool</code></a></strong></td>\r
+  <td>Generic key-based pooling code.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.pool.PersistentConnectionPool-class.html"><code>PersistentConnectionPool</code></a></strong></td>\r
+  <td>A pool that assigns persistent connections to different threads.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.pool.SimpleConnectionPool-class.html"><code>SimpleConnectionPool</code></a></strong></td>\r
+  <td>A connection pool that can't be shared across different threads.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.pool.ThreadedConnectionPool-class.html"><code>ThreadedConnectionPool</code></a></strong></td>\r
+  <td>A connection pool that works with the threading module.</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF EXCEPTIONS =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Exceptions</th></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.pool.PoolError-class.html"><code>PoolError</code></a></strong></td>\r
+  <td>&nbsp;</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF FUNCTION SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Function Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="dbg"></a><span class="summary-sig"><span class="summary-sig-name">dbg</span>(<span class="summary-sig-vararg">*args</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF FUNCTION DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Function Details</th></tr>\r
+</table>\r
+\r
+<a name="dbg"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">dbg</span>(<span class="sig-vararg">*args</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:34 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.pool.AbstractConnectionPool-class.html b/psycopg2/doc/api/private/psycopg2.pool.AbstractConnectionPool-class.html
new file mode 100644 (file)
index 0000000..be79964
--- /dev/null
@@ -0,0 +1,247 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.pool.AbstractConnectionPool</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.pool-module.html">Module&nbsp;pool</a> ::\r
+        Class&nbsp;AbstractConnectionPool\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.pool.AbstractConnectionPool-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.pool.AbstractConnectionPool-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type AbstractConnectionPool</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+\r
+         |\r
+        <strong class="uidshort">AbstractConnectionPool</strong>\r
+</pre><br />\r
+\r
+<dl><dt>Known Subclasses:</dt>\r
+<dd>\r
+    <a href="psycopg2.pool.PersistentConnectionPool-class.html"><code>PersistentConnectionPool</code></a>,\r
+    <a href="psycopg2.pool.SimpleConnectionPool-class.html"><code>SimpleConnectionPool</code></a>,\r
+    <a href="psycopg2.pool.ThreadedConnectionPool-class.html"><code>ThreadedConnectionPool</code></a></dd></dl>\r
+\r
+<hr/>\r
+\r
+<p>Generic key-based pooling code.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.pool.AbstractConnectionPool-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">minconn</span>,\r
+          <span class="summary-sig-arg">maxconn</span>,\r
+          <span class="summary-sig-vararg">*args</span>,\r
+          <span class="summary-sig-kwarg">**kwargs</span>)</span></code>\r
+<br />\r
+Initialize the connection pool.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_closeall" class="summary-sig-name"><code>_closeall</code></a>(<span class="summary-sig-arg">self</span>)</span></code>\r
+<br />\r
+Close all connections.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_connect" class="summary-sig-name"><code>_connect</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">key</span>)</span></code>\r
+<br />\r
+Create a new connection and assign it to 'key' if not None.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_getconn" class="summary-sig-name"><code>_getconn</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">key</span>)</span></code>\r
+<br />\r
+Get a free connection and assign it to 'key' if not None.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_getkey" class="summary-sig-name"><code>_getkey</code></a>(<span class="summary-sig-arg">self</span>)</span></code>\r
+<br />\r
+Return a new unique key.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_putconn" class="summary-sig-name"><code>_putconn</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">conn</span>,\r
+          <span class="summary-sig-arg">key</span>,\r
+          <span class="summary-sig-arg">close</span>)</span></code>\r
+<br />\r
+Put away a connection.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__new__" class="summary-sig-name"><code>__new__</code></a>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__init__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">minconn</span>,\r
+          <span class="sig-arg">maxconn</span>,\r
+          <span class="sig-vararg">*args</span>,\r
+          <span class="sig-kwarg">**kwargs</span>)</span>\r
+    <br /><em class="fname">(Constructor)</em>\r
+  </h3>\r
+<p>Initialize the connection pool.</p>\r
+<p>New 'minconn' connections are created immediately calling 'connfunc'\r
+with given parameters. The connection pool will support a maximum of\r
+about 'maxconn' connections.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__init__"><code>__builtin__.object.__init__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="_closeall"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">_closeall</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+<p>Close all connections.</p>\r
+<p>Note that this can lead to some code fail badly when trying to use\r
+an already closed connection. If you call .closeall() make sure\r
+your code can deal with it.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="_connect"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">_connect</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">key</span>=<span class="sig-default">None</span>)</span>\r
+  </h3>\r
+<p>Create a new connection and assign it to 'key' if not None.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="_getconn"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">_getconn</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">key</span>=<span class="sig-default">None</span>)</span>\r
+  </h3>\r
+<p>Get a free connection and assign it to 'key' if not None.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="_getkey"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">_getkey</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+<p>Return a new unique key.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="_putconn"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">_putconn</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">conn</span>,\r
+          <span class="sig-arg">key</span>=<span class="sig-default">None</span>,\r
+          <span class="sig-arg">close</span>=<span class="sig-default">False</span>)</span>\r
+  </h3>\r
+<p>Put away a connection.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:34 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.pool.PersistentConnectionPool-class.html b/psycopg2/doc/api/private/psycopg2.pool.PersistentConnectionPool-class.html
new file mode 100644 (file)
index 0000000..4656713
--- /dev/null
@@ -0,0 +1,237 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.pool.PersistentConnectionPool</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.pool-module.html">Module&nbsp;pool</a> ::\r
+        Class&nbsp;PersistentConnectionPool\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.pool.PersistentConnectionPool-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.pool.PersistentConnectionPool-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type PersistentConnectionPool</h2>\r
+\r
+<pre class="base-tree">\r
+            <a href="__builtin__.object-class.html"><code>object</code></a> --+    \r
+                     |    \r
+<a href="psycopg2.pool.AbstractConnectionPool-class.html"><code>AbstractConnectionPool</code></a> --+\r
+                         |\r
+                        <strong class="uidshort">PersistentConnectionPool</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>A pool that assigns persistent connections to different threads.</p>\r
+<p>Note that this connection pool generates by itself the required keys\r
+using the current thread id.  This means that untill a thread put away\r
+a connection it will always get the same connection object by successive\r
+.getconn() calls. This also means that a thread can't use more than one\r
+single connection from the pool.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.pool.PersistentConnectionPool-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">minconn</span>,\r
+          <span class="summary-sig-arg">maxconn</span>,\r
+          <span class="summary-sig-vararg">*args</span>,\r
+          <span class="summary-sig-kwarg">**kwargs</span>)</span></code>\r
+<br />\r
+Initialize the threading lock.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.pool.PersistentConnectionPool-class.html#closeall" class="summary-sig-name"><code>closeall</code></a>(<span class="summary-sig-arg">self</span>)</span></code>\r
+<br />\r
+Close all connections (even the one currently in use.)</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.pool.PersistentConnectionPool-class.html#getconn" class="summary-sig-name"><code>getconn</code></a>(<span class="summary-sig-arg">self</span>)</span></code>\r
+<br />\r
+Generate thread id and return a connection.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.pool.PersistentConnectionPool-class.html#putconn" class="summary-sig-name"><code>putconn</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">conn</span>,\r
+          <span class="summary-sig-arg">close</span>)</span></code>\r
+<br />\r
+Put away an unused connection.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from AbstractConnectionPool</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_closeall" class="summary-sig-name"><code>_closeall</code></a>(<span class="summary-sig-arg">self</span>)</span></code>\r
+<br />\r
+Close all connections.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_connect" class="summary-sig-name"><code>_connect</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">key</span>)</span></code>\r
+<br />\r
+Create a new connection and assign it to 'key' if not None.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_getconn" class="summary-sig-name"><code>_getconn</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">key</span>)</span></code>\r
+<br />\r
+Get a free connection and assign it to 'key' if not None.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_getkey" class="summary-sig-name"><code>_getkey</code></a>(<span class="summary-sig-arg">self</span>)</span></code>\r
+<br />\r
+Return a new unique key.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_putconn" class="summary-sig-name"><code>_putconn</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">conn</span>,\r
+          <span class="summary-sig-arg">key</span>,\r
+          <span class="summary-sig-arg">close</span>)</span></code>\r
+<br />\r
+Put away a connection.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__new__" class="summary-sig-name"><code>__new__</code></a>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__init__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">minconn</span>,\r
+          <span class="sig-arg">maxconn</span>,\r
+          <span class="sig-vararg">*args</span>,\r
+          <span class="sig-kwarg">**kwargs</span>)</span>\r
+    <br /><em class="fname">(Constructor)</em>\r
+  </h3>\r
+<p>Initialize the threading lock.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="psycopg2.pool.AbstractConnectionPool-class.html#__init__"><code>psycopg2.pool.AbstractConnectionPool.__init__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="closeall"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">closeall</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+<p>Close all connections (even the one currently in use.)</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="getconn"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">getconn</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+<p>Generate thread id and return a connection.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="putconn"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">putconn</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">conn</span>=<span class="sig-default">None</span>,\r
+          <span class="sig-arg">close</span>=<span class="sig-default">False</span>)</span>\r
+  </h3>\r
+<p>Put away an unused connection.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:34 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.pool.PoolError-class.html b/psycopg2/doc/api/private/psycopg2.pool.PoolError-class.html
new file mode 100644 (file)
index 0000000..83a85cf
--- /dev/null
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.pool.PoolError</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.pool-module.html">Module&nbsp;pool</a> ::\r
+        Class&nbsp;PoolError\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.pool.PoolError-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.pool.PoolError-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class PoolError</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+        \r
+            |        \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+    \r
+                |    \r
+            <a href="psycopg2.Error-class.html"><code>Error</code></a> --+\r
+                    |\r
+                   <strong class="uidshort">PoolError</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:34 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.pool.SimpleConnectionPool-class.html b/psycopg2/doc/api/private/psycopg2.pool.SimpleConnectionPool-class.html
new file mode 100644 (file)
index 0000000..06c9bb6
--- /dev/null
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.pool.SimpleConnectionPool</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.pool-module.html">Module&nbsp;pool</a> ::\r
+        Class&nbsp;SimpleConnectionPool\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.pool.SimpleConnectionPool-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.pool.SimpleConnectionPool-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type SimpleConnectionPool</h2>\r
+\r
+<pre class="base-tree">\r
+            <a href="__builtin__.object-class.html"><code>object</code></a> --+    \r
+                     |    \r
+<a href="psycopg2.pool.AbstractConnectionPool-class.html"><code>AbstractConnectionPool</code></a> --+\r
+                         |\r
+                        <strong class="uidshort">SimpleConnectionPool</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>A connection pool that can't be shared across different threads.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.SimpleConnectionPool-class.html#_closeall" class="summary-sig-name"><code>closeall</code></a>(<span class="summary-sig-arg">self</span>)</span></code>\r
+<br />\r
+Close all connections.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.SimpleConnectionPool-class.html#_getconn" class="summary-sig-name"><code>getconn</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">key</span>)</span></code>\r
+<br />\r
+Get a free connection and assign it to 'key' if not None.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.SimpleConnectionPool-class.html#_putconn" class="summary-sig-name"><code>putconn</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">conn</span>,\r
+          <span class="summary-sig-arg">key</span>,\r
+          <span class="summary-sig-arg">close</span>)</span></code>\r
+<br />\r
+Put away a connection.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from AbstractConnectionPool</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.pool.AbstractConnectionPool-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">minconn</span>,\r
+          <span class="summary-sig-arg">maxconn</span>,\r
+          <span class="summary-sig-vararg">*args</span>,\r
+          <span class="summary-sig-kwarg">**kwargs</span>)</span></code>\r
+<br />\r
+Initialize the connection pool.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_closeall" class="summary-sig-name"><code>_closeall</code></a>(<span class="summary-sig-arg">self</span>)</span></code>\r
+<br />\r
+Close all connections.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_connect" class="summary-sig-name"><code>_connect</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">key</span>)</span></code>\r
+<br />\r
+Create a new connection and assign it to 'key' if not None.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_getconn" class="summary-sig-name"><code>_getconn</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">key</span>)</span></code>\r
+<br />\r
+Get a free connection and assign it to 'key' if not None.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_getkey" class="summary-sig-name"><code>_getkey</code></a>(<span class="summary-sig-arg">self</span>)</span></code>\r
+<br />\r
+Return a new unique key.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_putconn" class="summary-sig-name"><code>_putconn</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">conn</span>,\r
+          <span class="summary-sig-arg">key</span>,\r
+          <span class="summary-sig-arg">close</span>)</span></code>\r
+<br />\r
+Put away a connection.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__new__" class="summary-sig-name"><code>__new__</code></a>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="_closeall"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">closeall</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+<p>Close all connections.</p>\r
+<p>Note that this can lead to some code fail badly when trying to use\r
+an already closed connection. If you call .closeall() make sure\r
+your code can deal with it.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="_getconn"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">getconn</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">key</span>=<span class="sig-default">None</span>)</span>\r
+  </h3>\r
+<p>Get a free connection and assign it to 'key' if not None.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="_putconn"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">putconn</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">conn</span>,\r
+          <span class="sig-arg">key</span>=<span class="sig-default">None</span>,\r
+          <span class="sig-arg">close</span>=<span class="sig-default">False</span>)</span>\r
+  </h3>\r
+<p>Put away a connection.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:35 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.pool.ThreadedConnectionPool-class.html b/psycopg2/doc/api/private/psycopg2.pool.ThreadedConnectionPool-class.html
new file mode 100644 (file)
index 0000000..1ad34cb
--- /dev/null
@@ -0,0 +1,236 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.pool.ThreadedConnectionPool</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.pool-module.html">Module&nbsp;pool</a> ::\r
+        Class&nbsp;ThreadedConnectionPool\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.pool.ThreadedConnectionPool-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.pool.ThreadedConnectionPool-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type ThreadedConnectionPool</h2>\r
+\r
+<pre class="base-tree">\r
+            <a href="__builtin__.object-class.html"><code>object</code></a> --+    \r
+                     |    \r
+<a href="psycopg2.pool.AbstractConnectionPool-class.html"><code>AbstractConnectionPool</code></a> --+\r
+                         |\r
+                        <strong class="uidshort">ThreadedConnectionPool</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>A connection pool that works with the threading module.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.pool.ThreadedConnectionPool-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">minconn</span>,\r
+          <span class="summary-sig-arg">maxconn</span>,\r
+          <span class="summary-sig-vararg">*args</span>,\r
+          <span class="summary-sig-kwarg">**kwargs</span>)</span></code>\r
+<br />\r
+Initialize the threading lock.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.pool.ThreadedConnectionPool-class.html#closeall" class="summary-sig-name"><code>closeall</code></a>(<span class="summary-sig-arg">self</span>)</span></code>\r
+<br />\r
+Close all connections (even the one currently in use.)</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.pool.ThreadedConnectionPool-class.html#getconn" class="summary-sig-name"><code>getconn</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">key</span>)</span></code>\r
+<br />\r
+Get a free connection and assign it to 'key' if not None.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.pool.ThreadedConnectionPool-class.html#putconn" class="summary-sig-name"><code>putconn</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">conn</span>,\r
+          <span class="summary-sig-arg">key</span>,\r
+          <span class="summary-sig-arg">close</span>)</span></code>\r
+<br />\r
+Put away an unused connection.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from AbstractConnectionPool</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_closeall" class="summary-sig-name"><code>_closeall</code></a>(<span class="summary-sig-arg">self</span>)</span></code>\r
+<br />\r
+Close all connections.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_connect" class="summary-sig-name"><code>_connect</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">key</span>)</span></code>\r
+<br />\r
+Create a new connection and assign it to 'key' if not None.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_getconn" class="summary-sig-name"><code>_getconn</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">key</span>)</span></code>\r
+<br />\r
+Get a free connection and assign it to 'key' if not None.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_getkey" class="summary-sig-name"><code>_getkey</code></a>(<span class="summary-sig-arg">self</span>)</span></code>\r
+<br />\r
+Return a new unique key.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2.pool.AbstractConnectionPool-class.html#_putconn" class="summary-sig-name"><code>_putconn</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">conn</span>,\r
+          <span class="summary-sig-arg">key</span>,\r
+          <span class="summary-sig-arg">close</span>)</span></code>\r
+<br />\r
+Put away a connection.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__new__" class="summary-sig-name"><code>__new__</code></a>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__init__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">minconn</span>,\r
+          <span class="sig-arg">maxconn</span>,\r
+          <span class="sig-vararg">*args</span>,\r
+          <span class="sig-kwarg">**kwargs</span>)</span>\r
+    <br /><em class="fname">(Constructor)</em>\r
+  </h3>\r
+<p>Initialize the threading lock.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="psycopg2.pool.AbstractConnectionPool-class.html#__init__"><code>psycopg2.pool.AbstractConnectionPool.__init__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="closeall"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">closeall</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+<p>Close all connections (even the one currently in use.)</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="getconn"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">getconn</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">key</span>=<span class="sig-default">None</span>)</span>\r
+  </h3>\r
+<p>Get a free connection and assign it to 'key' if not None.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="putconn"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">putconn</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">conn</span>=<span class="sig-default">None</span>,\r
+          <span class="sig-arg">key</span>=<span class="sig-default">None</span>,\r
+          <span class="sig-arg">close</span>=<span class="sig-default">False</span>)</span>\r
+  </h3>\r
+<p>Put away an unused connection.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:35 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.psycopg1-module.html b/psycopg2/doc/api/private/psycopg2.psycopg1-module.html
new file mode 100644 (file)
index 0000000..f535cb9
--- /dev/null
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.psycopg1</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Module&nbsp;psycopg1\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.psycopg1-module.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.psycopg1-module.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF MODULE DESCRIPTION =========== -->\r
+<h2 class="module">Module psycopg2.psycopg1</h2>\r
+\r
+<p>psycopg 1.1.x compatibility module</p>\r
+<p>This module uses the new style connection and cursor types to build a psycopg\r
+1.1.1.x compatibility layer. It should be considered a temporary hack to run\r
+old code while porting to psycopg 2. Import it as follows:</p>\r
+<pre class="literal-block">\r
+from psycopg2 import psycopg1 as psycopg\r
+</pre>\r
+<hr/>\r
+\r
+<!-- =========== START OF CLASSES =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Classes</th></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.psycopg1.connection-class.html"><code>connection</code></a></strong></td>\r
+  <td>psycopg 1.1.x connection.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.psycopg1.cursor-class.html"><code>cursor</code></a></strong></td>\r
+  <td>psycopg 1.1.x cursor.</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF FUNCTION SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Function Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new psycopg 1.1.x compatible connection object</td>\r
+  <td><code><a name="connect"></a><span class="summary-sig"><span class="summary-sig-name">connect</span>(<span class="summary-sig-arg">dsn</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF FUNCTION DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Function Details</th></tr>\r
+</table>\r
+\r
+<a name="connect"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">connect</span>(<span class="sig-arg">dsn</span>,\r
+          <span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new psycopg 1.1.x compatible connection object      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.psycopg1.connection-class.html b/psycopg2/doc/api/private/psycopg2.psycopg1.connection-class.html
new file mode 100644 (file)
index 0000000..6d52ff8
--- /dev/null
@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.psycopg1.connection</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.psycopg1-module.html">Module&nbsp;psycopg1</a> ::\r
+        Class&nbsp;connection\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.psycopg1.connection-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.psycopg1.connection-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type connection</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+    \r
+         |    \r
+<a href="../private/psycopg2._psycopg.connection-class.html"><code>connection</code></a> --+\r
+             |\r
+            <strong class="uidshort">connection</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>psycopg 1.1.x connection.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">switch autocommit on (1) or off (0)</td>\r
+  <td><code><a name="autocommit"></a><span class="summary-sig"><span class="summary-sig-name">autocommit</span>(<span class="summary-sig-arg">on_off</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new psycopg 1.1.x compatible cursor object</td>\r
+  <td><code><a name="cursor"></a><span class="summary-sig"><span class="summary-sig-name">cursor</span>()</span></code>\r
+</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from connection</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#__new__" class="summary-sig-name"><code>__new__</code></a>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#close" class="summary-sig-name"><code>close</code></a>()</span></code>\r
+<br />\r
+Close the connection.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#commit" class="summary-sig-name"><code>commit</code></a>()</span></code>\r
+<br />\r
+Commit all changes to database.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#rollback" class="summary-sig-name"><code>rollback</code></a>()</span></code>\r
+<br />\r
+Roll back all changes done to database.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#set_client_encoding" class="summary-sig-name"><code>set_client_encoding</code></a>(<span class="summary-sig-arg">encoding</span>)</span></code>\r
+<br />\r
+Set client encoding to <tt class="docutils literal docutils literal docutils literal docutils literal"><span class="pre">encoding</span></tt>.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.connection-class.html#set_isolation_level" class="summary-sig-name"><code>set_isolation_level</code></a>(<span class="summary-sig-arg">level</span>)</span></code>\r
+<br />\r
+Switch isolation level to <tt class="docutils literal docutils literal docutils literal docutils literal"><span class="pre">level</span></tt>.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF PROPERTY SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Property Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from connection</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#closed"><code>closed</code></a></strong>: True if the connection is closed.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#DatabaseError"><code>DatabaseError</code></a></strong>: Error related to the database engine.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#DataError"><code>DataError</code></a></strong>: Error related to problems with the processed data.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#dsn"><code>dsn</code></a></strong>: The current connection string.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#encoding"><code>encoding</code></a></strong>: The current client encoding.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#Error"><code>Error</code></a></strong>: Base class for error exceptions.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#IntegrityError"><code>IntegrityError</code></a></strong>: Error related to database integrity.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#InterfaceError"><code>InterfaceError</code></a></strong>: Error related to the database interface.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#InternalError"><code>InternalError</code></a></strong>: The database encountered an internal error.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#isolation_level"><code>isolation_level</code></a></strong>: The current isolation level.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#notices"><code>notices</code></a></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#notifies"><code>notifies</code></a></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#NotSupportedError"><code>NotSupportedError</code></a></strong>: A not supported datbase API was called.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#OperationalError"><code>OperationalError</code></a></strong>: Error related to database operation (disconnect, memory allocation etc).</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#ProgrammingError"><code>ProgrammingError</code></a></strong>: Error related to database programming (SQL error, table not found etc).</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.connection-class.html#Warning"><code>Warning</code></a></strong>: A database warning.</td></tr></table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="autocommit"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">autocommit</span>(<span class="sig-arg">on_off</span>=<span class="sig-default">1</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+switch autocommit on (1) or off (0)      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="cursor"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">cursor</span>()</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new psycopg 1.1.x compatible cursor object      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="../private/psycopg2._psycopg.connection-class.html#cursor"><code>psycopg2._psycopg.connection.cursor</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.psycopg1.cursor-class.html b/psycopg2/doc/api/private/psycopg2.psycopg1.cursor-class.html
new file mode 100644 (file)
index 0000000..17d22e0
--- /dev/null
@@ -0,0 +1,308 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.psycopg1.cursor</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.psycopg1-module.html">Module&nbsp;psycopg1</a> ::\r
+        Class&nbsp;cursor\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.psycopg1.cursor-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.psycopg1.cursor-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type cursor</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+    \r
+         |    \r
+    <a href="../private/psycopg2._psycopg.cursor-class.html"><code>cursor</code></a> --+\r
+             |\r
+            <strong class="uidshort">cursor</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>psycopg 1.1.x cursor.</p>\r
+<p>Note that this cursor implements the exact procedure used by psycopg 1 to\r
+build dictionaries out of result rows. The DictCursor in the\r
+psycopg.extras modules implements a much better and faster algorithm.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="dictfetchall"></a><span class="summary-sig"><span class="summary-sig-name">dictfetchall</span>(<span class="summary-sig-arg">self</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="dictfetchmany"></a><span class="summary-sig"><span class="summary-sig-name">dictfetchmany</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">size</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="dictfetchone"></a><span class="summary-sig"><span class="summary-sig-name">dictfetchone</span>(<span class="summary-sig-arg">self</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__build_dict"></a><span class="summary-sig"><span class="summary-sig-name">__build_dict</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">row</span>)</span></code>\r
+</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from cursor</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#__iter__" class="summary-sig-name"><code>__iter__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return iter(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#__new__" class="summary-sig-name"><code>__new__</code></a>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#callproc" class="summary-sig-name"><code>callproc</code></a>(<span class="summary-sig-arg">procname</span>,\r
+          <span class="summary-sig-arg">parameters</span>,\r
+          <span class="summary-sig-arg">async</span>)</span></code>\r
+<br />\r
+Execute stored procedure.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#close" class="summary-sig-name"><code>close</code></a>()</span></code>\r
+<br />\r
+Close the cursor.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#copy_from" class="summary-sig-name"><code>copy_from</code></a>(<span class="summary-sig-arg">file</span>,\r
+          <span class="summary-sig-arg">table</span>,\r
+          <span class="summary-sig-arg">sep</span>,\r
+          <span class="summary-sig-arg">null</span>)</span></code>\r
+<br />\r
+Copy table from file.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#copy_to" class="summary-sig-name"><code>copy_to</code></a>(<span class="summary-sig-arg">file</span>,\r
+          <span class="summary-sig-arg">table</span>,\r
+          <span class="summary-sig-arg">sep</span>,\r
+          <span class="summary-sig-arg">null</span>)</span></code>\r
+<br />\r
+Copy table to file.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#execute" class="summary-sig-name"><code>execute</code></a>(<span class="summary-sig-arg">query</span>,\r
+          <span class="summary-sig-arg">vars</span>,\r
+          <span class="summary-sig-arg">async</span>)</span></code>\r
+<br />\r
+Execute query with bound vars.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#executemany" class="summary-sig-name"><code>executemany</code></a>(<span class="summary-sig-arg">query</span>,\r
+          <span class="summary-sig-arg">vars_list</span>,\r
+          <span class="summary-sig-arg">async</span>)</span></code>\r
+<br />\r
+Execute many queries with bound vars.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">list of tuple</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#fetchall" class="summary-sig-name"><code>fetchall</code></a>()</span></code>\r
+<br />\r
+Return all the remaining rows of a query result set.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">list of tuple</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#fetchmany" class="summary-sig-name"><code>fetchmany</code></a>(<span class="summary-sig-arg">size</span>)</span></code>\r
+<br />\r
+Return the next <a href="../private/psycopg2._psycopg.cursor-class.html#fetchmany" class="link"><code>size</code></a> rows of a query result set in the form of a list\r
+of tuples (by default) or using the sequence factory previously set in\r
+the <a href="../private/psycopg2._psycopg.cursor-class.html#row_factory" class="link"><code>row_factory</code></a> attribute.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">tuple or None</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#fetchone" class="summary-sig-name"><code>fetchone</code></a>()</span></code>\r
+<br />\r
+Return the next row of a query result set in the form of a tuple (by\r
+default) or using the sequence factory previously set in the\r
+<a href="../private/psycopg2._psycopg.cursor-class.html#row_factory" class="link"><code>row_factory</code></a> attribute.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">int</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#fileno" class="summary-sig-name"><code>fileno</code></a>()</span></code>\r
+<br />\r
+Return file descriptor associated to database connection.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">bool</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#isready" class="summary-sig-name"><code>isready</code></a>()</span></code>\r
+<br />\r
+Return True if data is ready after an async query.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">str</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#mogrify" class="summary-sig-name"><code>mogrify</code></a>(<span class="summary-sig-arg">query</span>,\r
+          <span class="summary-sig-arg">vars</span>)</span></code>\r
+<br />\r
+Return query after vars binding.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#next" class="summary-sig-name"><code>next</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return the next value, or raise StopIteration...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#nextset" class="summary-sig-name"><code>nextset</code></a>()</span></code>\r
+<br />\r
+Skip to next set of data.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#scroll" class="summary-sig-name"><code>scroll</code></a>(<span class="summary-sig-arg">value</span>,\r
+          <span class="summary-sig-arg">mode</span>)</span></code>\r
+<br />\r
+Scroll to new position according to mode.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#setinputsizes" class="summary-sig-name"><code>setinputsizes</code></a>(<span class="summary-sig-arg">sizes</span>)</span></code>\r
+<br />\r
+Set memory areas before execute.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="../private/psycopg2._psycopg.cursor-class.html#setoutputsize" class="summary-sig-name"><code>setoutputsize</code></a>(<span class="summary-sig-arg">size</span>,\r
+          <span class="summary-sig-arg">column</span>)</span></code>\r
+<br />\r
+Set column buffer size.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF PROPERTY SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Property Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from cursor</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#arraysize"><code>arraysize</code></a></strong>: Number of records <a href="../private/psycopg2._psycopg.cursor-class.html#fetchmany" class="link"><code>fetchmany()</code></a> must fetch if not explicitely specified.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#binary_types"><code>binary_types</code></a></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#connection"><code>connection</code></a></strong>: The connection where the cursor comes from.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#description"><code>description</code></a></strong>: Cursor description as defined in DBAPI-2.0.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#lastrowid"><code>lastrowid</code></a></strong>: The <tt class="docutils literal docutils literal"><span class="pre">oid</span></tt> of the last row inserted by the cursor.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#name"><code>name</code></a></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#query"><code>query</code></a></strong>: The last query text sent to the backend.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#row_factory"><code>row_factory</code></a></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#rowcount"><code>rowcount</code></a></strong>: Number of rows read from the backend in the last command.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#rownumber"><code>rownumber</code></a></strong>: The current row position.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#statusmessage"><code>statusmessage</code></a></strong>: The return message of the last command.</td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#string_types"><code>string_types</code></a></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#typecaster"><code>typecaster</code></a></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><strong><a href="../private/psycopg2._psycopg.cursor-class.html#tzinfo_factory"><code>tzinfo_factory</code></a></strong></td></tr></table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="dictfetchall"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">dictfetchall</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="dictfetchmany"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">dictfetchmany</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">size</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="dictfetchone"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">dictfetchone</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__build_dict"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__build_dict</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">row</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:33 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.tz-module.html b/psycopg2/doc/api/private/psycopg2.tz-module.html
new file mode 100644 (file)
index 0000000..9b8244a
--- /dev/null
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.tz</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Module&nbsp;tz\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.tz-module.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.tz-module.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF MODULE DESCRIPTION =========== -->\r
+<h2 class="module">Module psycopg2.tz</h2>\r
+\r
+<p>tzinfo implementations for psycopg2</p>\r
+<p>This module holds two different tzinfo implementations that can be used as\r
+the 'tzinfo' argument to datetime constructors, directly passed to psycopg\r
+functions or used to set the .tzinfo_factory attribute in cursors.</p>\r
+<hr/>\r
+\r
+<!-- =========== START OF CLASSES =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Classes</th></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.tz.FixedOffsetTimezone-class.html"><code>FixedOffsetTimezone</code></a></strong></td>\r
+  <td>Fixed offset in minutes east from UTC.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.tz.LocalTimezone-class.html"><code>LocalTimezone</code></a></strong></td>\r
+  <td>Platform idea of local timezone.</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF VARIABLE SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Variable Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>timedelta</code></td>\r
+<td><strong><a href="psycopg2.tz-module.html#DSTDIFF"><code>DSTDIFF</code></a></strong> = <span title="datetime.timedelta(0, 3600)"><code>datetime.timedelta(0,&nbsp;3600)                    </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>LocalTimezone</code></td>\r
+<td><strong><a href="psycopg2.tz-module.html#LOCAL"><code>LOCAL</code></a></strong> = <span title="&lt;psycopg2.tz.LocalTimezone object at 0x00847090&gt;"><code>&lt;psycopg2.tz.LocalTimezone&nbsp;object&nbsp;at&nbsp;0x00847090&gt; </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>timedelta</code></td>\r
+<td><strong><a href="psycopg2.tz-module.html#STDOFFSET"><code>STDOFFSET</code></a></strong> = <span title="datetime.timedelta(0, 3600)"><code>datetime.timedelta(0,&nbsp;3600)                  </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>timedelta</code></td>\r
+<td><strong><a href="psycopg2.tz-module.html#ZERO"><code>ZERO</code></a></strong> = <span title="datetime.timedelta(0)"><code>datetime.timedelta(0)                             </code>\r
+</span></td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF VARIABLE DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Variable Details</th></tr>\r
+</table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="DSTDIFF"></a>\r
+<h3>DSTDIFF</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>timedelta</code>\r
+\r
+      </dd>\r
+      <dt title="datetime.timedelta(0, 3600)">Value:</dt>\r
+      <dd title="datetime.timedelta(0, 3600)"><table><tr><td>\r
+<pre class="variable">\r
+datetime.timedelta(0, 3600)                                            </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="LOCAL"></a>\r
+<h3>LOCAL</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>LocalTimezone</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2.tz.LocalTimezone object at 0x00847090&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2.tz.LocalTimezone object at 0x00847090&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2.tz.LocalTimezone object at 0x00847090&gt;                       </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="STDOFFSET"></a>\r
+<h3>STDOFFSET</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>timedelta</code>\r
+\r
+      </dd>\r
+      <dt title="datetime.timedelta(0, 3600)">Value:</dt>\r
+      <dd title="datetime.timedelta(0, 3600)"><table><tr><td>\r
+<pre class="variable">\r
+datetime.timedelta(0, 3600)                                            </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="ZERO"></a>\r
+<h3>ZERO</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>timedelta</code>\r
+\r
+      </dd>\r
+      <dt title="datetime.timedelta(0)">Value:</dt>\r
+      <dd title="datetime.timedelta(0)"><table><tr><td>\r
+<pre class="variable">\r
+datetime.timedelta(0)                                                  </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:37 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.tz.FixedOffsetTimezone-class.html b/psycopg2/doc/api/private/psycopg2.tz.FixedOffsetTimezone-class.html
new file mode 100644 (file)
index 0000000..4e6d658
--- /dev/null
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.tz.FixedOffsetTimezone</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.tz-module.html">Module&nbsp;tz</a> ::\r
+        Class&nbsp;FixedOffsetTimezone\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.tz.FixedOffsetTimezone-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.tz.FixedOffsetTimezone-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type FixedOffsetTimezone</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+    \r
+         |    \r
+    <a href="datetime.tzinfo-class.html"><code>tzinfo</code></a> --+\r
+             |\r
+            <strong class="uidshort">FixedOffsetTimezone</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>Fixed offset in minutes east from UTC.</p>\r
+<p>This is exactly the implementation found in Python 2.3.x documentation,\r
+with a small change to the __init__ method to allow for pickling and a\r
+default name in the form 'sHH:MM' ('s' is the sign.)</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__init__"></a><span class="summary-sig"><span class="summary-sig-name">__init__</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">offset</span>,\r
+          <span class="summary-sig-arg">name</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="dst"></a><span class="summary-sig"><span class="summary-sig-name">dst</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">dt</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="tzname"></a><span class="summary-sig"><span class="summary-sig-name">tzname</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">dt</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="utcoffset"></a><span class="summary-sig"><span class="summary-sig-name">utcoffset</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">dt</span>)</span></code>\r
+</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from tzinfo</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#__new__" class="summary-sig-name"><code>__new__</code></a>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+-&gt; (cls, state)</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#fromutc" class="summary-sig-name"><code>fromutc</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+datetime in UTC -&gt; datetime in local time.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF CLASS VARIABLE SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Class Variable Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>NoneType</code></td>\r
+<td><strong><a href="../private/psycopg2.tz.FixedOffsetTimezone-class.html#_name"><code>_name</code></a></strong> = <span title="None">None&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>timedelta</code></td>\r
+<td><strong><a href="../private/psycopg2.tz.FixedOffsetTimezone-class.html#_offset"><code>_offset</code></a></strong> = <span title="datetime.timedelta(0)"><code>datetime.timedelta(0)                          </code>\r
+</span></td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__init__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">offset</span>=<span class="sig-default">None</span>,\r
+          <span class="sig-arg">name</span>=<span class="sig-default">None</span>)</span>\r
+    <br /><em class="fname">(Constructor)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__init__"><code>__builtin__.object.__init__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="dst"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">dst</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">dt</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="datetime.tzinfo-class.html#dst"><code>datetime.tzinfo.dst</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="tzname"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">tzname</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">dt</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="datetime.tzinfo-class.html#tzname"><code>datetime.tzinfo.tzname</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="utcoffset"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">utcoffset</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">dt</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="datetime.tzinfo-class.html#utcoffset"><code>datetime.tzinfo.utcoffset</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF CLASS VARIABLE DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Class Variable Details</th></tr>\r
+</table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="_name"></a>\r
+<h3>_name</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>NoneType</code>\r
+\r
+      </dd>\r
+      <dt title="None">Value:</dt>\r
+      <dd title="None"><table><tr><td>\r
+<pre class="variable">\r
+None&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="_offset"></a>\r
+<h3>_offset</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>timedelta</code>\r
+\r
+      </dd>\r
+      <dt title="datetime.timedelta(0)">Value:</dt>\r
+      <dd title="datetime.timedelta(0)"><table><tr><td>\r
+<pre class="variable">\r
+datetime.timedelta(0)                                                  </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/psycopg2.tz.LocalTimezone-class.html b/psycopg2/doc/api/private/psycopg2.tz.LocalTimezone-class.html
new file mode 100644 (file)
index 0000000..0954549
--- /dev/null
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.tz.LocalTimezone</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.tz-module.html">Module&nbsp;tz</a> ::\r
+        Class&nbsp;LocalTimezone\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/psycopg2.tz.LocalTimezone-class.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.tz.LocalTimezone-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type LocalTimezone</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+    \r
+         |    \r
+    <a href="datetime.tzinfo-class.html"><code>tzinfo</code></a> --+\r
+             |\r
+            <strong class="uidshort">LocalTimezone</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>Platform idea of local timezone.</p>\r
+<p>This is the exact implementation from the Pyhton 2.3 documentation.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="dst"></a><span class="summary-sig"><span class="summary-sig-name">dst</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">dt</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="tzname"></a><span class="summary-sig"><span class="summary-sig-name">tzname</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">dt</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="utcoffset"></a><span class="summary-sig"><span class="summary-sig-name">utcoffset</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">dt</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="_isdst"></a><span class="summary-sig"><span class="summary-sig-name">_isdst</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">dt</span>)</span></code>\r
+</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from tzinfo</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#__new__" class="summary-sig-name"><code>__new__</code></a>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+-&gt; (cls, state)</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#fromutc" class="summary-sig-name"><code>fromutc</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+datetime in UTC -&gt; datetime in local time.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="dst"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">dst</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">dt</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="datetime.tzinfo-class.html#dst"><code>datetime.tzinfo.dst</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="tzname"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">tzname</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">dt</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="datetime.tzinfo-class.html#tzname"><code>datetime.tzinfo.tzname</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="utcoffset"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">utcoffset</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">dt</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="datetime.tzinfo-class.html#utcoffset"><code>datetime.tzinfo.utcoffset</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="_isdst"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">_isdst</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">dt</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:34 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/toc-everything.html b/psycopg2/doc/api/private/toc-everything.html
new file mode 100644 (file)
index 0000000..2b60e36
--- /dev/null
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>Everything</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+<h1 class="tocheading">Everything</h1>\r
+<hr />\r
+\r
+<!-- =========== START OF ALL CLASSES =========== -->\r
+<h2 class="tocheading">All&nbsp;Classes</h2>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg.connection-class.html">psycopg2._psycopg.connection</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg.cursor-class.html">psycopg2._psycopg.cursor</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg.ISQLQuote-class.html">psycopg2._psycopg.ISQLQuote</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extras.DictConnection-class.html">psycopg2.extras.DictConnection</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extras.DictCursor-class.html">psycopg2.extras.DictCursor</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extras.DictRow-class.html">psycopg2.extras.DictRow</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extras.SQL_IN-class.html">psycopg2.extras.SQL_IN</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool.AbstractConnectionPool-class.html">psycopg2.pool.AbstractConnectionPool</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool.PersistentConnectionPool-class.html">psycopg2.pool.PersistentConnectionPool</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool.SimpleConnectionPool-class.html">psycopg2.pool.SimpleConnectionPool</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool.ThreadedConnectionPool-class.html">psycopg2.pool.ThreadedConnectionPool</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.psycopg1.connection-class.html">psycopg2.psycopg1.connection</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.psycopg1.cursor-class.html">psycopg2.psycopg1.cursor</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz.FixedOffsetTimezone-class.html">psycopg2.tz.FixedOffsetTimezone</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz.LocalTimezone-class.html">psycopg2.tz.LocalTimezone</a></p>\r
+\r
+<!-- =========== START OF ALL EXCEPTIONS =========== -->\r
+<h2 class="tocheading">All&nbsp;Exceptions</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.DatabaseError-class.html">psycopg2.DatabaseError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.DataError-class.html">psycopg2.DataError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.Error-class.html">psycopg2.Error</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.IntegrityError-class.html">psycopg2.IntegrityError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.InterfaceError-class.html">psycopg2.InterfaceError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.InternalError-class.html">psycopg2.InternalError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.NotSupportedError-class.html">psycopg2.NotSupportedError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.OperationalError-class.html">psycopg2.OperationalError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool.PoolError-class.html">psycopg2.pool.PoolError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.ProgrammingError-class.html">psycopg2.ProgrammingError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.Warning-class.html">psycopg2.Warning</a></p>\r
+\r
+<!-- =========== START OF ALL FUNCTIONS =========== -->\r
+<h2 class="tocheading">All&nbsp;Functions</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#adapt">adapt</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#AsIs">AsIs</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#Binary">Binary</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#Boolean">Boolean</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#connect">connect</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.psycopg1-module.html#connect">connect</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#Date">Date</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#DateFromPy">DateFromPy</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#DateFromTicks">DateFromTicks</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool-module.html#dbg">dbg</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#IntervalFromPy">IntervalFromPy</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#List">List</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#new_type">new_type</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#QuotedString">QuotedString</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#register_adapter">register_adapter</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#register_type">register_type</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#Time">Time</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#TimeFromPy">TimeFromPy</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#TimeFromTicks">TimeFromTicks</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#Timestamp">Timestamp</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#TimestampFromPy">TimestampFromPy</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#TimestampFromTicks">TimestampFromTicks</a></p>\r
+\r
+<!-- =========== START OF ALL VARIABLES =========== -->\r
+<h2 class="tocheading">All&nbsp;Variables</h2>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#__version__">__version__</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#_C_API">_C_API</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#adapters">adapters</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#apilevel">apilevel</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#BINARY">BINARY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#binary_types">binary_types</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#BINARYARRAY">BINARYARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#BOOLEAN">BOOLEAN</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#BOOLEANARRAY">BOOLEANARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#DATE">DATE</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#DATEARRAY">DATEARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#DATETIME">DATETIME</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#DATETIMEARRAY">DATETIMEARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#DECIMAL">DECIMAL</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#DECIMALARRAY">DECIMALARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz-module.html#DSTDIFF">DSTDIFF</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#encodings">encodings</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#FLOAT">FLOAT</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#FLOATARRAY">FLOATARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#INTEGER">INTEGER</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#INTEGERARRAY">INTEGERARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#INTERVAL">INTERVAL</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#INTERVALARRAY">INTERVALARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#ISOLATION_LEVEL_AUTOCOMMIT">ISOLATION_LEVEL_AUTOCOMMIT</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#ISOLATION_LEVEL_READ_COMMITTED">ISOLATION_LEVEL_READ_COMMITTED</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#ISOLATION_LEVEL_READ_UNCOMMITTED">ISOLATION_LEVEL_READ_UNCOMMITTED</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#ISOLATION_LEVEL_REPEATABLE_READ">ISOLATION_LEVEL_REPEATABLE_READ</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#ISOLATION_LEVEL_SERIALIZABLE">ISOLATION_LEVEL_SERIALIZABLE</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz-module.html#LOCAL">LOCAL</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#LONGINTEGER">LONGINTEGER</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#LONGINTEGERARRAY">LONGINTEGERARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#NUMBER">NUMBER</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#paramstyle">paramstyle</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#PYDATE">PYDATE</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#PYDATETIME">PYDATETIME</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#PYINTERVAL">PYINTERVAL</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#PYTIME">PYTIME</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#ROWID">ROWID</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#ROWIDARRAY">ROWIDARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz-module.html#STDOFFSET">STDOFFSET</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#STRING">STRING</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#string_types">string_types</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#STRINGARRAY">STRINGARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#threadsafety">threadsafety</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#TIME">TIME</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#TIMEARRAY">TIMEARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#UNICODE">UNICODE</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#UNICODEARRAY">UNICODEARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz-module.html#ZERO">ZERO</a></p>\r
+\r
+<hr />\r
+<span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/toc-everything.html">hide&nbsp;private</a>]</span>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/toc-psycopg2-module.html b/psycopg2/doc/api/private/toc-psycopg2-module.html
new file mode 100644 (file)
index 0000000..e07c73c
--- /dev/null
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+<h1 class="tocheading"><a target="mainFrame" href="psycopg2-module.html">psycopg2</a></h1>\r
+<hr />\r
+\r
+<!-- =========== START OF MODULES =========== -->\r
+<h2 class="tocheading">Modules</h2>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html">_psycopg</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html">extensions</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extras-module.html">extras</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool-module.html">pool</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.psycopg1-module.html">psycopg1</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz-module.html">tz</a></p>\r
+\r
+<!-- =========== START OF EXCEPTIONS =========== -->\r
+<h2 class="tocheading">Exceptions</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.DatabaseError-class.html">DatabaseError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.DataError-class.html">DataError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.Error-class.html">Error</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.IntegrityError-class.html">IntegrityError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.InterfaceError-class.html">InterfaceError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.InternalError-class.html">InternalError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.NotSupportedError-class.html">NotSupportedError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.OperationalError-class.html">OperationalError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.ProgrammingError-class.html">ProgrammingError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.Warning-class.html">Warning</a></p>\r
+\r
+<!-- =========== START OF FUNCTIONS =========== -->\r
+<h2 class="tocheading">Functions</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#Binary">Binary</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#connect">connect</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#Date">Date</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#DateFromTicks">DateFromTicks</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#Time">Time</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#TimeFromTicks">TimeFromTicks</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#Timestamp">Timestamp</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#TimestampFromTicks">TimestampFromTicks</a></p>\r
+\r
+<hr />\r
+<span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/toc-psycopg2-module.html">hide&nbsp;private</a>]</span>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/toc-psycopg2._psycopg-module.html b/psycopg2/doc/api/private/toc-psycopg2._psycopg-module.html
new file mode 100644 (file)
index 0000000..49975f5
--- /dev/null
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2._psycopg</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+<h1 class="tocheading"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html">_psycopg</a></h1>\r
+<hr />\r
+\r
+<!-- =========== START OF CLASSES =========== -->\r
+<h2 class="tocheading">Classes</h2>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg.connection-class.html">connection</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg.cursor-class.html">cursor</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg.ISQLQuote-class.html">ISQLQuote</a></p>\r
+\r
+<!-- =========== START OF FUNCTIONS =========== -->\r
+<h2 class="tocheading">Functions</h2>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#List">List</a></p>\r
+\r
+<!-- =========== START OF VARIABLES =========== -->\r
+<h2 class="tocheading">Variables</h2>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#__version__">__version__</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#_C_API">_C_API</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#adapters">adapters</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#apilevel">apilevel</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#BINARY">BINARY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#binary_types">binary_types</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#BINARYARRAY">BINARYARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#BOOLEAN">BOOLEAN</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#BOOLEANARRAY">BOOLEANARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#DATE">DATE</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#DATEARRAY">DATEARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#DATETIME">DATETIME</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#DATETIMEARRAY">DATETIMEARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#DECIMAL">DECIMAL</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#DECIMALARRAY">DECIMALARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#encodings">encodings</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#FLOAT">FLOAT</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#FLOATARRAY">FLOATARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#INTEGER">INTEGER</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#INTEGERARRAY">INTEGERARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#INTERVAL">INTERVAL</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#INTERVALARRAY">INTERVALARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#LONGINTEGER">LONGINTEGER</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#LONGINTEGERARRAY">LONGINTEGERARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#NUMBER">NUMBER</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#paramstyle">paramstyle</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#PYDATE">PYDATE</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#PYDATETIME">PYDATETIME</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#PYINTERVAL">PYINTERVAL</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#PYTIME">PYTIME</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#ROWID">ROWID</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#ROWIDARRAY">ROWIDARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#STRING">STRING</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#string_types">string_types</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#STRINGARRAY">STRINGARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#threadsafety">threadsafety</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#TIME">TIME</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#TIMEARRAY">TIMEARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#UNICODE">UNICODE</a></p>\r
+<p class="toc"><a target="mainFrame" href="../private/psycopg2._psycopg-module.html#UNICODEARRAY">UNICODEARRAY</a></p>\r
+\r
+<hr />\r
+<span class="options">[<strong>show&nbsp;private</strong>&nbsp;|&nbsp;hide&nbsp;private]</span>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/toc-psycopg2.extensions-module.html b/psycopg2/doc/api/private/toc-psycopg2.extensions-module.html
new file mode 100644 (file)
index 0000000..2e7c983
--- /dev/null
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.extensions</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+<h1 class="tocheading"><a target="mainFrame" href="psycopg2.extensions-module.html">extensions</a></h1>\r
+<hr />\r
+\r
+<!-- =========== START OF FUNCTIONS =========== -->\r
+<h2 class="tocheading">Functions</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#adapt">adapt</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#AsIs">AsIs</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#Boolean">Boolean</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#DateFromPy">DateFromPy</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#IntervalFromPy">IntervalFromPy</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#new_type">new_type</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#QuotedString">QuotedString</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#register_adapter">register_adapter</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#register_type">register_type</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#TimeFromPy">TimeFromPy</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#TimestampFromPy">TimestampFromPy</a></p>\r
+\r
+<!-- =========== START OF VARIABLES =========== -->\r
+<h2 class="tocheading">Variables</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#ISOLATION_LEVEL_AUTOCOMMIT">ISOLATION_LEVEL_AUTOCOMMIT</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#ISOLATION_LEVEL_READ_COMMITTED">ISOLATION_LEVEL_READ_COMMITTED</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#ISOLATION_LEVEL_READ_UNCOMMITTED">ISOLATION_LEVEL_READ_UNCOMMITTED</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#ISOLATION_LEVEL_REPEATABLE_READ">ISOLATION_LEVEL_REPEATABLE_READ</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#ISOLATION_LEVEL_SERIALIZABLE">ISOLATION_LEVEL_SERIALIZABLE</a></p>\r
+\r
+<hr />\r
+<span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/toc-psycopg2.extensions-module.html">hide&nbsp;private</a>]</span>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/toc-psycopg2.extras-module.html b/psycopg2/doc/api/private/toc-psycopg2.extras-module.html
new file mode 100644 (file)
index 0000000..505d1d8
--- /dev/null
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.extras</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+<h1 class="tocheading"><a target="mainFrame" href="psycopg2.extras-module.html">extras</a></h1>\r
+<hr />\r
+\r
+<!-- =========== START OF CLASSES =========== -->\r
+<h2 class="tocheading">Classes</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extras.DictConnection-class.html">DictConnection</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extras.DictCursor-class.html">DictCursor</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extras.DictRow-class.html">DictRow</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extras.SQL_IN-class.html">SQL_IN</a></p>\r
+\r
+<hr />\r
+<span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/toc-psycopg2.extras-module.html">hide&nbsp;private</a>]</span>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/toc-psycopg2.pool-module.html b/psycopg2/doc/api/private/toc-psycopg2.pool-module.html
new file mode 100644 (file)
index 0000000..2b2a8cc
--- /dev/null
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.pool</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+<h1 class="tocheading"><a target="mainFrame" href="psycopg2.pool-module.html">pool</a></h1>\r
+<hr />\r
+\r
+<!-- =========== START OF CLASSES =========== -->\r
+<h2 class="tocheading">Classes</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool.AbstractConnectionPool-class.html">AbstractConnectionPool</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool.PersistentConnectionPool-class.html">PersistentConnectionPool</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool.SimpleConnectionPool-class.html">SimpleConnectionPool</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool.ThreadedConnectionPool-class.html">ThreadedConnectionPool</a></p>\r
+\r
+<!-- =========== START OF EXCEPTIONS =========== -->\r
+<h2 class="tocheading">Exceptions</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool.PoolError-class.html">PoolError</a></p>\r
+\r
+<!-- =========== START OF FUNCTIONS =========== -->\r
+<h2 class="tocheading">Functions</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool-module.html#dbg">dbg</a></p>\r
+\r
+<hr />\r
+<span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/toc-psycopg2.pool-module.html">hide&nbsp;private</a>]</span>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/toc-psycopg2.psycopg1-module.html b/psycopg2/doc/api/private/toc-psycopg2.psycopg1-module.html
new file mode 100644 (file)
index 0000000..20971b2
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.psycopg1</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+<h1 class="tocheading"><a target="mainFrame" href="psycopg2.psycopg1-module.html">psycopg1</a></h1>\r
+<hr />\r
+\r
+<!-- =========== START OF CLASSES =========== -->\r
+<h2 class="tocheading">Classes</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.psycopg1.connection-class.html">connection</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.psycopg1.cursor-class.html">cursor</a></p>\r
+\r
+<!-- =========== START OF FUNCTIONS =========== -->\r
+<h2 class="tocheading">Functions</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.psycopg1-module.html#connect">connect</a></p>\r
+\r
+<hr />\r
+<span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/toc-psycopg2.psycopg1-module.html">hide&nbsp;private</a>]</span>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/toc-psycopg2.tz-module.html b/psycopg2/doc/api/private/toc-psycopg2.tz-module.html
new file mode 100644 (file)
index 0000000..fce1191
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.tz</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+<h1 class="tocheading"><a target="mainFrame" href="psycopg2.tz-module.html">tz</a></h1>\r
+<hr />\r
+\r
+<!-- =========== START OF CLASSES =========== -->\r
+<h2 class="tocheading">Classes</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz.FixedOffsetTimezone-class.html">FixedOffsetTimezone</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz.LocalTimezone-class.html">LocalTimezone</a></p>\r
+\r
+<!-- =========== START OF VARIABLES =========== -->\r
+<h2 class="tocheading">Variables</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz-module.html#DSTDIFF">DSTDIFF</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz-module.html#LOCAL">LOCAL</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz-module.html#STDOFFSET">STDOFFSET</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz-module.html#ZERO">ZERO</a></p>\r
+\r
+<hr />\r
+<span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/toc-psycopg2.tz-module.html">hide&nbsp;private</a>]</span>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/toc.html b/psycopg2/doc/api/private/toc.html
new file mode 100644 (file)
index 0000000..1e31df5
--- /dev/null
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>Table of Contents</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+<h1 class="tocheading">Table&nbsp;of&nbsp;Contents</h1>\r
+<hr />\r
+<p class="toc"><a target="moduleFrame" href="toc-everything.html">Everything</a></p>\r
+\r
+<!-- =========== START OF PACKAGES =========== -->\r
+<h2 class="tocheading">Packages</h2>\r
+<p class="toc"><a target="moduleFrame" href="toc-psycopg2-module.html" onclick="setFrame('toc-psycopg2-module.html', 'psycopg2-module.html');">psycopg2</a></p>\r
+\r
+<!-- =========== START OF MODULES =========== -->\r
+<h2 class="tocheading">Modules</h2>\r
+<p class="toc"><a target="moduleFrame" href="toc-psycopg2._psycopg-module.html" onclick="setFrame('toc-psycopg2._psycopg-module.html', 'psycopg2._psycopg-module.html');">psycopg2._psycopg</a></p>\r
+<p class="toc"><a target="moduleFrame" href="toc-psycopg2.extensions-module.html" onclick="setFrame('toc-psycopg2.extensions-module.html', 'psycopg2.extensions-module.html');">psycopg2.extensions</a></p>\r
+<p class="toc"><a target="moduleFrame" href="toc-psycopg2.extras-module.html" onclick="setFrame('toc-psycopg2.extras-module.html', 'psycopg2.extras-module.html');">psycopg2.extras</a></p>\r
+<p class="toc"><a target="moduleFrame" href="toc-psycopg2.pool-module.html" onclick="setFrame('toc-psycopg2.pool-module.html', 'psycopg2.pool-module.html');">psycopg2.pool</a></p>\r
+<p class="toc"><a target="moduleFrame" href="toc-psycopg2.psycopg1-module.html" onclick="setFrame('toc-psycopg2.psycopg1-module.html', 'psycopg2.psycopg1-module.html');">psycopg2.psycopg1</a></p>\r
+<p class="toc"><a target="moduleFrame" href="toc-psycopg2.tz-module.html" onclick="setFrame('toc-psycopg2.tz-module.html', 'psycopg2.tz-module.html');">psycopg2.tz</a></p>\r
+\r
+<hr />\r
+<span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/toc.html">hide&nbsp;private</a>]</span>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/private/trees.html b/psycopg2/doc/api/private/trees.html
new file mode 100644 (file)
index 0000000..5907cfa
--- /dev/null
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>Module and Class Hierarchies</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th bgcolor="#70b0f0" class="navselect">&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[show&nbsp;private&nbsp;|&nbsp;<a href="../public/trees.html">hide&nbsp;private</a>]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="trees.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF MODULE HIERARCHY =========== -->\r
+<h2>Module Hierarchy</h2>\r
+<ul>\r
+<li> <strong class="uidlink"><a href="psycopg2-module.html"><code>psycopg2</code></a></strong>: <em class="summary">A Python driver for PostgreSQL</em>  <ul>\r
+    <li> <strong class="uidlink"><a href="../private/psycopg2._psycopg-module.html"><code>_psycopg</code></a></strong>: <em class="summary">psycopg PostgreSQL driver</em></li>\r
+    <li> <strong class="uidlink"><a href="psycopg2.extensions-module.html"><code>extensions</code></a></strong>: <em class="summary">psycopg extensions to the DBAPI-2.0</em></li>\r
+    <li> <strong class="uidlink"><a href="psycopg2.extras-module.html"><code>extras</code></a></strong>: <em class="summary">Miscellaneous goodies for psycopg2</em></li>\r
+    <li> <strong class="uidlink"><a href="psycopg2.pool-module.html"><code>pool</code></a></strong>: <em class="summary">Connection pooling for psycopg2</em></li>\r
+    <li> <strong class="uidlink"><a href="psycopg2.psycopg1-module.html"><code>psycopg1</code></a></strong>: <em class="summary">psycopg 1.1.x compatibility module</em></li>\r
+    <li> <strong class="uidlink"><a href="psycopg2.tz-module.html"><code>tz</code></a></strong>: <em class="summary">tzinfo implementations for psycopg2</em></li>\r
+  </ul>\r
+</li>\r
+</ul>\r
+\r
+<!-- =========== START OF CLASS HIERARCHY =========== -->\r
+<h2>Class Hierarchy</h2>\r
+<ul>\r
+  <li> <strong class="uidlink"><a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></strong>: <em class="summary">\r
+The most base type</em>\r
+   <ul>\r
+    <li> <strong class="uidlink"><a href="psycopg2.pool.AbstractConnectionPool-class.html"><code>psycopg2.pool.AbstractConnectionPool</code></a></strong>: <em class="summary">\r
+Generic key-based pooling code.</em>\r
+     <ul>\r
+      <li> <strong class="uidlink"><a href="psycopg2.pool.PersistentConnectionPool-class.html"><code>psycopg2.pool.PersistentConnectionPool</code></a></strong>: <em class="summary">\r
+A pool that assigns persistent connections to different threads.</em>\r
+      </li>\r
+      <li> <strong class="uidlink"><a href="psycopg2.pool.SimpleConnectionPool-class.html"><code>psycopg2.pool.SimpleConnectionPool</code></a></strong>: <em class="summary">\r
+A connection pool that can't be shared across different threads.</em>\r
+      </li>\r
+      <li> <strong class="uidlink"><a href="psycopg2.pool.ThreadedConnectionPool-class.html"><code>psycopg2.pool.ThreadedConnectionPool</code></a></strong>: <em class="summary">\r
+A connection pool that works with the threading module.</em>\r
+      </li>\r
+     </ul>\r
+    </li>\r
+    <li> <strong class="uidlink"><a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></strong>: <em class="summary">\r
+list() -&gt; new list\r
+list(sequence) -&gt; new list initialized from sequence's items</em>\r
+     <ul>\r
+      <li> <strong class="uidlink"><a href="psycopg2.extras.DictRow-class.html"><code>psycopg2.extras.DictRow</code></a></strong>: <em class="summary">\r
+A row object that allow by-colun-name access to data.</em>\r
+      </li>\r
+     </ul>\r
+    </li>\r
+    <li> <strong class="uidlink"><a href="psycopg2.extras.SQL_IN-class.html"><code>psycopg2.extras.SQL_IN</code></a></strong>: <em class="summary">\r
+Adapt any iterable to an SQL quotable object.</em>\r
+    </li>\r
+    <li> <strong class="uidlink"><a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></strong>: <em class="summary">\r
+type(object) -&gt; the object's type\r
+type(name, bases, dict) -&gt; a new type</em>\r
+    </li>\r
+    <li> <strong class="uidlink"><a href="datetime.tzinfo-class.html"><code>datetime.tzinfo</code></a></strong>: <em class="summary">\r
+Abstract base class for time zone info objects.</em>\r
+     <ul>\r
+      <li> <strong class="uidlink"><a href="psycopg2.tz.FixedOffsetTimezone-class.html"><code>psycopg2.tz.FixedOffsetTimezone</code></a></strong>: <em class="summary">\r
+Fixed offset in minutes east from UTC.</em>\r
+      </li>\r
+      <li> <strong class="uidlink"><a href="psycopg2.tz.LocalTimezone-class.html"><code>psycopg2.tz.LocalTimezone</code></a></strong>: <em class="summary">\r
+Platform idea of local timezone.</em>\r
+      </li>\r
+     </ul>\r
+    </li>\r
+    <li> <strong class="uidlink"><a href="../private/psycopg2._psycopg.connection-class.html"><code>psycopg2._psycopg.connection</code></a></strong>: <em class="summary">\r
+connection(dsn, ...) -&gt; new connection object</em>\r
+     <ul>\r
+      <li> <strong class="uidlink"><a href="psycopg2.psycopg1.connection-class.html"><code>psycopg2.psycopg1.connection</code></a></strong>: <em class="summary">\r
+psycopg 1.1.x connection.</em>\r
+      </li>\r
+      <li> <strong class="uidlink"><a href="psycopg2.extras.DictConnection-class.html"><code>psycopg2.extras.DictConnection</code></a></strong>: <em class="summary">\r
+A connection that uses DictCursor automatically.</em>\r
+      </li>\r
+     </ul>\r
+    </li>\r
+    <li> <strong class="uidlink"><a href="../private/psycopg2._psycopg.cursor-class.html"><code>psycopg2._psycopg.cursor</code></a></strong>: <em class="summary">\r
+A database cursor.</em>\r
+     <ul>\r
+      <li> <strong class="uidlink"><a href="psycopg2.psycopg1.cursor-class.html"><code>psycopg2.psycopg1.cursor</code></a></strong>: <em class="summary">\r
+psycopg 1.1.x cursor.</em>\r
+      </li>\r
+      <li> <strong class="uidlink"><a href="psycopg2.extras.DictCursor-class.html"><code>psycopg2.extras.DictCursor</code></a></strong>: <em class="summary">\r
+A cursor that keeps a list of column name -&gt; index mappings.</em>\r
+      </li>\r
+     </ul>\r
+    </li>\r
+    <li> <strong class="uidlink"><a href="../private/psycopg2._psycopg.ISQLQuote-class.html"><code>psycopg2._psycopg.ISQLQuote</code></a></strong>: <em class="summary">\r
+Abstract ISQLQuote protocol</em>\r
+    </li>\r
+   </ul>\r
+  </li>\r
+  <li> <strong class="uidlink"><a href="exceptions.Exception-class.html"><code>exceptions.Exception</code></a></strong>: <em class="summary">\r
+Common base class for all exceptions.</em>\r
+   <ul>\r
+    <li> <strong class="uidlink"><a href="exceptions.StandardError-class.html"><code>exceptions.StandardError</code></a></strong>: <em class="summary">\r
+Base class for all standard Python exceptions.</em>\r
+     <ul>\r
+      <li> <strong class="uidlink"><a href="psycopg2.Error-class.html"><code>psycopg2.Error</code></a></strong>: <em class="summary">\r
+Base class for error exceptions.</em>\r
+       <ul>\r
+        <li> <strong class="uidlink"><a href="psycopg2.DatabaseError-class.html"><code>psycopg2.DatabaseError</code></a></strong>: <em class="summary">\r
+Error related to the database engine.</em>\r
+         <ul>\r
+          <li> <strong class="uidlink"><a href="psycopg2.DataError-class.html"><code>psycopg2.DataError</code></a></strong>: <em class="summary">\r
+Error related to problems with the processed data.</em>\r
+          </li>\r
+          <li> <strong class="uidlink"><a href="psycopg2.IntegrityError-class.html"><code>psycopg2.IntegrityError</code></a></strong>: <em class="summary">\r
+Error related to database integrity.</em>\r
+          </li>\r
+          <li> <strong class="uidlink"><a href="psycopg2.InternalError-class.html"><code>psycopg2.InternalError</code></a></strong>: <em class="summary">\r
+The database encountered an internal error.</em>\r
+          </li>\r
+          <li> <strong class="uidlink"><a href="psycopg2.NotSupportedError-class.html"><code>psycopg2.NotSupportedError</code></a></strong>: <em class="summary">\r
+A not supported datbase API was called.</em>\r
+          </li>\r
+          <li> <strong class="uidlink"><a href="psycopg2.OperationalError-class.html"><code>psycopg2.OperationalError</code></a></strong>: <em class="summary">\r
+Error related to database operation (disconnect, memory allocation etc).</em>\r
+          </li>\r
+          <li> <strong class="uidlink"><a href="psycopg2.ProgrammingError-class.html"><code>psycopg2.ProgrammingError</code></a></strong>: <em class="summary">\r
+Error related to database programming (SQL error, table not found etc).</em>\r
+          </li>\r
+         </ul>\r
+        </li>\r
+        <li> <strong class="uidlink"><a href="psycopg2.InterfaceError-class.html"><code>psycopg2.InterfaceError</code></a></strong>: <em class="summary">\r
+Error related to the database interface.</em>\r
+        </li>\r
+        <li> <strong class="uidlink"><a href="psycopg2.pool.PoolError-class.html"><code>psycopg2.pool.PoolError</code></a></strong>\r
+        </li>\r
+       </ul>\r
+      </li>\r
+      <li> <strong class="uidlink"><a href="psycopg2.Warning-class.html"><code>psycopg2.Warning</code></a></strong>: <em class="summary">\r
+A database warning.</em>\r
+      </li>\r
+     </ul>\r
+    </li>\r
+   </ul>\r
+  </li>\r
+</ul>\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:37 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/__builtin__.list-class.html b/psycopg2/doc/api/public/__builtin__.list-class.html
new file mode 100644 (file)
index 0000000..4ede43e
--- /dev/null
@@ -0,0 +1,817 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>__builtin__.list</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        Module&nbsp;__builtin__ ::\r
+        Class&nbsp;list\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/__builtin__.list-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="__builtin__.list-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type list</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+\r
+         |\r
+        <strong class="uidshort">list</strong>\r
+</pre><br />\r
+\r
+<dl><dt>Known Subclasses:</dt>\r
+<dd>\r
+    <a href="psycopg2.extras.DictRow-class.html"><code>DictRow</code></a></dd></dl>\r
+\r
+<hr/>\r
+\r
+<p>list() -&gt; new list\r
+list(sequence) -&gt; new list initialized from sequence's items</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__add__"></a><span class="summary-sig"><span class="summary-sig-name">__add__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x+y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__contains__"></a><span class="summary-sig"><span class="summary-sig-name">__contains__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return y in x...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__delitem__"></a><span class="summary-sig"><span class="summary-sig-name">__delitem__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return del x[y]...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__delslice__" class="summary-sig-name"><code>__delslice__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">i</span>,\r
+          <span class="summary-sig-arg">j</span>)</span></code>\r
+<br />\r
+Use of negative indices is not supported.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__eq__"></a><span class="summary-sig"><span class="summary-sig-name">__eq__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x==y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__ge__"></a><span class="summary-sig"><span class="summary-sig-name">__ge__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x&gt;=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__getitem__"></a><span class="summary-sig"><span class="summary-sig-name">__getitem__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x[y]...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__getslice__" class="summary-sig-name"><code>__getslice__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">i</span>,\r
+          <span class="summary-sig-arg">j</span>)</span></code>\r
+<br />\r
+Use of negative indices is not supported.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__gt__"></a><span class="summary-sig"><span class="summary-sig-name">__gt__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x&gt;y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__hash__"></a><span class="summary-sig"><span class="summary-sig-name">__hash__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__iadd__"></a><span class="summary-sig"><span class="summary-sig-name">__iadd__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x+=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__imul__"></a><span class="summary-sig"><span class="summary-sig-name">__imul__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x*=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__iter__"></a><span class="summary-sig"><span class="summary-sig-name">__iter__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return iter(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__le__"></a><span class="summary-sig"><span class="summary-sig-name">__le__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x&lt;=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__len__"></a><span class="summary-sig"><span class="summary-sig-name">__len__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return len(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__lt__"></a><span class="summary-sig"><span class="summary-sig-name">__lt__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x&lt;y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__mul__"></a><span class="summary-sig"><span class="summary-sig-name">__mul__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">n</span>)</span></code>\r
+<br />\r
+Return x*n...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__ne__"></a><span class="summary-sig"><span class="summary-sig-name">__ne__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x!=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__new__"></a><span class="summary-sig"><span class="summary-sig-name">__new__</span>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__repr__"></a><span class="summary-sig"><span class="summary-sig-name">__repr__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__rmul__"></a><span class="summary-sig"><span class="summary-sig-name">__rmul__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">n</span>)</span></code>\r
+<br />\r
+Return n*x...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__setitem__"></a><span class="summary-sig"><span class="summary-sig-name">__setitem__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">i</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x[i]=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__setslice__" class="summary-sig-name"><code>__setslice__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">i</span>,\r
+          <span class="summary-sig-arg">j</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Use  of negative indices is not supported.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#append" class="summary-sig-name"><code>append</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">object</span>)</span></code>\r
+<br />\r
+append object to end</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#count" class="summary-sig-name"><code>count</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">value</span>)</span></code>\r
+<br />\r
+return number of occurrences of value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#extend" class="summary-sig-name"><code>extend</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">iterable</span>)</span></code>\r
+<br />\r
+extend list by appending elements from the iterable</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#index" class="summary-sig-name"><code>index</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+L.index(value, [start, [stop]]) -&gt; integer -- return first index of value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#insert" class="summary-sig-name"><code>insert</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">index</span>,\r
+          <span class="summary-sig-arg">object</span>)</span></code>\r
+<br />\r
+insert object before index</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#pop" class="summary-sig-name"><code>pop</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">index</span>)</span></code>\r
+<br />\r
+remove and return item at index (default last)</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#remove" class="summary-sig-name"><code>remove</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">value</span>)</span></code>\r
+<br />\r
+remove first occurrence of value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#reverse" class="summary-sig-name"><code>reverse</code></a>(<span class="summary-sig-arg">L</span>)</span></code>\r
+<br />\r
+reverse <em>IN PLACE</em></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#sort" class="summary-sig-name"><code>sort</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">cmpfunc</span>)</span></code>\r
+<br />\r
+stable sort <em>IN PLACE</em>; cmpfunc(x, y) -&gt; -1, 0, 1</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__init__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-vararg">...</span>)</span>\r
+    <br /><em class="fname">(Constructor)</em>\r
+  </h3>\r
+<p>x.__init__(...) initializes x; see x.__class__.__doc__ for signature</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__init__"><code>__builtin__.object.__init__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__add__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__add__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Addition operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x+y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__contains__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__contains__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(In operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+y in x\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__delitem__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__delitem__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Index deletion operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+del x[y]\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__delslice__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__delslice__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">i</span>,\r
+          <span class="sig-arg">j</span>)</span>\r
+    <br /><em class="fname">(Slice deletion operator)</em>\r
+  </h3>\r
+<p>Use of negative indices is not supported.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+del x[i:j]\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__eq__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__eq__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Equality operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x==y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__ge__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__ge__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Greater-than-or-equals operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x&gt;=y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__getattribute__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__getattribute__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>x.__getattribute__('name') &lt;==&gt; x.name</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__getattribute__"><code>__builtin__.object.__getattribute__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__getitem__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__getitem__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Indexing operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x[y]\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__getslice__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__getslice__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">i</span>,\r
+          <span class="sig-arg">j</span>)</span>\r
+    <br /><em class="fname">(Slicling operator)</em>\r
+  </h3>\r
+<p>Use of negative indices is not supported.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x[i:j]\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__gt__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__gt__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Greater-than operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x&gt;y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__hash__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__hash__</span>(<span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Hashing function)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+hash(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__hash__"><code>__builtin__.object.__hash__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__iadd__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__iadd__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x+=y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__imul__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__imul__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x*=y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__iter__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__iter__</span>(<span class="sig-arg">x</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+iter(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__le__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__le__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Less-than-or-equals operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x&lt;=y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__len__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__len__</span>(<span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Length operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+len(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__lt__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__lt__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Less-than operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x&lt;y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__mul__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__mul__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">n</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x*n\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__ne__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__ne__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Inequality operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x!=y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__new__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__new__</span>(<span class="sig-arg">T</span>,\r
+          <span class="sig-arg">S</span>,\r
+          <span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+a new object with type S, a subtype of T\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__new__"><code>__builtin__.object.__new__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__repr__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__repr__</span>(<span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Representation operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+repr(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__repr__"><code>__builtin__.object.__repr__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__rmul__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__rmul__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">n</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+n*x\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__setitem__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__setitem__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">i</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Index assignment operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x[i]=y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__setslice__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__setslice__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">i</span>,\r
+          <span class="sig-arg">j</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Slice assignment operator)</em>\r
+  </h3>\r
+<p>Use  of negative indices is not supported.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x[i:j]=y\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="append"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">append</span>(<span class="sig-arg">L</span>,\r
+          <span class="sig-arg">object</span>)</span>\r
+  </h3>\r
+<p>append object to end</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="count"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">count</span>(<span class="sig-arg">L</span>,\r
+          <span class="sig-arg">value</span>)</span>\r
+  </h3>\r
+<p>return number of occurrences of value</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+integer\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="extend"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">extend</span>(<span class="sig-arg">L</span>,\r
+          <span class="sig-arg">iterable</span>)</span>\r
+  </h3>\r
+<p>extend list by appending elements from the iterable</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="index"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">index</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>L.index(value, [start, [stop]]) -&gt; integer -- return first index of value</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="insert"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">insert</span>(<span class="sig-arg">L</span>,\r
+          <span class="sig-arg">index</span>,\r
+          <span class="sig-arg">object</span>)</span>\r
+  </h3>\r
+<p>insert object before index</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="pop"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">pop</span>(<span class="sig-arg">L</span>,\r
+          <span class="sig-arg">index</span>=<span class="sig-default">...</span>)</span>\r
+  </h3>\r
+<p>remove and return item at index (default last)</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+item\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="remove"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">remove</span>(<span class="sig-arg">L</span>,\r
+          <span class="sig-arg">value</span>)</span>\r
+  </h3>\r
+<p>remove first occurrence of value</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="reverse"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">reverse</span>(<span class="sig-arg">L</span>)</span>\r
+  </h3>\r
+<p>reverse <em>IN PLACE</em></p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="sort"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">sort</span>(<span class="sig-arg">L</span>,\r
+          <span class="sig-arg">cmpfunc</span>=<span class="sig-default">None</span>)</span>\r
+  </h3>\r
+<p>stable sort <em>IN PLACE</em>; cmpfunc(x, y) -&gt; -1, 0, 1</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:32 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/__builtin__.object-class.html b/psycopg2/doc/api/public/__builtin__.object-class.html
new file mode 100644 (file)
index 0000000..e9638da
--- /dev/null
@@ -0,0 +1,267 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>__builtin__.object</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        Module&nbsp;__builtin__ ::\r
+        Class&nbsp;object\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/__builtin__.object-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="__builtin__.object-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type object</h2>\r
+\r
+<dl><dt>Known Subclasses:</dt>\r
+<dd>\r
+    <a href="psycopg2.pool.AbstractConnectionPool-class.html"><code>AbstractConnectionPool</code></a>,\r
+    <a href="__builtin__.list-class.html"><code>list</code></a>,\r
+    <a href="psycopg2.extras.SQL_IN-class.html"><code>SQL_IN</code></a>,\r
+    <a href="__builtin__.type-class.html"><code>type</code></a>,\r
+    <a href="datetime.tzinfo-class.html"><code>tzinfo</code></a></dd></dl>\r
+\r
+<hr/>\r
+\r
+<p>The most base type</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__hash__"></a><span class="summary-sig"><span class="summary-sig-name">__hash__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__new__"></a><span class="summary-sig"><span class="summary-sig-name">__new__</span>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__repr__"></a><span class="summary-sig"><span class="summary-sig-name">__repr__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__str__"></a><span class="summary-sig"><span class="summary-sig-name">__str__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF CLASS VARIABLE SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Class Variable Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+  <td><a name="__class__"></a><strong><code class="vname">__class__</code></strong> = <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__init__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-vararg">...</span>)</span>\r
+    <br /><em class="fname">(Constructor)</em>\r
+  </h3>\r
+<p>x.__init__(...) initializes x; see x.__class__.__doc__ for signature</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__delattr__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__delattr__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>x.__delattr__('name') &lt;==&gt; del x.name</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__getattribute__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__getattribute__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>x.__getattribute__('name') &lt;==&gt; x.name</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__hash__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__hash__</span>(<span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Hashing function)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+hash(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__new__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__new__</span>(<span class="sig-arg">T</span>,\r
+          <span class="sig-arg">S</span>,\r
+          <span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+a new object with type S, a subtype of T\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__reduce__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__reduce__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>helper for pickle</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__reduce_ex__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__reduce_ex__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>helper for pickle</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__repr__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__repr__</span>(<span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Representation operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+repr(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__setattr__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__setattr__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>x.__setattr__('name', value) &lt;==&gt; x.name = value</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__str__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Informal representation operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+str(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/__builtin__.type-class.html b/psycopg2/doc/api/public/__builtin__.type-class.html
new file mode 100644 (file)
index 0000000..7af340f
--- /dev/null
@@ -0,0 +1,384 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>__builtin__.type</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        Module&nbsp;__builtin__ ::\r
+        Class&nbsp;type\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/__builtin__.type-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="__builtin__.type-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type type</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+\r
+         |\r
+        <strong class="uidshort">type</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>type(object) -&gt; the object's type\r
+type(name, bases, dict) -&gt; a new type</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__call__"></a><span class="summary-sig"><span class="summary-sig-name">__call__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return x(...)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__cmp__"></a><span class="summary-sig"><span class="summary-sig-name">__cmp__</span>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return cmp(x,y)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.type-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.type-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__hash__"></a><span class="summary-sig"><span class="summary-sig-name">__hash__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__new__"></a><span class="summary-sig"><span class="summary-sig-name">__new__</span>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__repr__"></a><span class="summary-sig"><span class="summary-sig-name">__repr__</span>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.type-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">list of immediate subclasses</td>\r
+  <td><code><a name="__subclasses__"></a><span class="summary-sig"><span class="summary-sig-name">__subclasses__</span>()</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">list</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.type-class.html#mro" class="summary-sig-name"><code>mro</code></a>()</span></code>\r
+<br />\r
+return a type's method resolution order</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF PROPERTY SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Property Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="__base__"></a><strong><code>__base__</code></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="__basicsize__"></a><strong><code>__basicsize__</code></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="__dictoffset__"></a><strong><code>__dictoffset__</code></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="__flags__"></a><strong><code>__flags__</code></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="__itemsize__"></a><strong><code>__itemsize__</code></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="__mro__"></a><strong><code>__mro__</code></strong></td></tr><tr><td align="right" valign="top" width="15%" class="ptype">&nbsp;</td>\r
+  <td><a name="__weakrefoffset__"></a><strong><code>__weakrefoffset__</code></strong></td></tr></table><br />\r
+\r
+\r
+<!-- =========== START OF CLASS VARIABLE SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Class Variable Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>tuple</code></td>\r
+<td><strong><a href="__builtin__.type-class.html#__bases__"><code>__bases__</code></a></strong> = <span title="(&lt;type 'object'&gt;,)"><code>(&lt;type&nbsp;'object'&gt;,)                           </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>str</code></td>\r
+<td><strong><a href="__builtin__.type-class.html#__name__"><code>__name__</code></a></strong> = <span title="'type'"><code><span class="variable-quote">'</span>type<span class="variable-quote">'</span>                                        </code>\r
+</span></td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__call__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__call__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-vararg">...</span>)</span>\r
+    <br /><em class="fname">(Call operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+x(...)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__cmp__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__cmp__</span>(<span class="sig-arg">x</span>,\r
+          <span class="sig-arg">y</span>)</span>\r
+    <br /><em class="fname">(Comparison operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+cmp(x,y)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__delattr__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__delattr__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>x.__delattr__('name') &lt;==&gt; del x.name</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__delattr__"><code>__builtin__.object.__delattr__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__getattribute__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__getattribute__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>x.__getattribute__('name') &lt;==&gt; x.name</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__getattribute__"><code>__builtin__.object.__getattribute__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__hash__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__hash__</span>(<span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Hashing function)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+hash(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__hash__"><code>__builtin__.object.__hash__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__new__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__new__</span>(<span class="sig-arg">T</span>,\r
+          <span class="sig-arg">S</span>,\r
+          <span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+a new object with type S, a subtype of T\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__new__"><code>__builtin__.object.__new__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__repr__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__repr__</span>(<span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Representation operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+repr(x)\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__repr__"><code>__builtin__.object.__repr__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__setattr__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__setattr__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>x.__setattr__('name', value) &lt;==&gt; x.name = value</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__setattr__"><code>__builtin__.object.__setattr__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__subclasses__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__subclasses__</span>()</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+list of immediate subclasses      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="mro"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">mro</span>()</span>\r
+  </h3>\r
+<p>return a type's method resolution order</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+list      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF CLASS VARIABLE DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Class Variable Details</th></tr>\r
+</table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="__bases__"></a>\r
+<h3>__bases__</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>tuple</code>\r
+\r
+      </dd>\r
+      <dt title="(&lt;type 'object'&gt;,)">Value:</dt>\r
+      <dd title="(&lt;type 'object'&gt;,)"><table><tr><td>\r
+<pre class="variable">\r
+(&lt;type 'object'&gt;,)                                                     </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="__name__"></a>\r
+<h3>__name__</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>str</code>\r
+\r
+      </dd>\r
+      <dt title="'type'">Value:</dt>\r
+      <dd title="'type'"><table><tr><td>\r
+<pre class="variable">\r
+<span class="variable-quote">'</span>type<span class="variable-quote">'</span>                                                                 </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:34 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/datetime.tzinfo-class.html b/psycopg2/doc/api/public/datetime.tzinfo-class.html
new file mode 100644 (file)
index 0000000..080afa2
--- /dev/null
@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>datetime.tzinfo</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        Module&nbsp;datetime ::\r
+        Class&nbsp;tzinfo\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/datetime.tzinfo-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="datetime.tzinfo-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type tzinfo</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+\r
+         |\r
+        <strong class="uidshort">tzinfo</strong>\r
+</pre><br />\r
+\r
+<dl><dt>Known Subclasses:</dt>\r
+<dd>\r
+    <a href="psycopg2.tz.FixedOffsetTimezone-class.html"><code>FixedOffsetTimezone</code></a>,\r
+    <a href="psycopg2.tz.LocalTimezone-class.html"><code>LocalTimezone</code></a></dd></dl>\r
+\r
+<hr/>\r
+\r
+<p>Abstract base class for time zone info objects.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__new__"></a><span class="summary-sig"><span class="summary-sig-name">__new__</span>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+-&gt; (cls, state)</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#dst" class="summary-sig-name"><code>dst</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+datetime -&gt; DST offset in minutes east of UTC.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#fromutc" class="summary-sig-name"><code>fromutc</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+datetime in UTC -&gt; datetime in local time.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#tzname" class="summary-sig-name"><code>tzname</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+datetime -&gt; string name of time zone.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#utcoffset" class="summary-sig-name"><code>utcoffset</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+datetime -&gt; minutes east of UTC (negative for west of UTC).</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__getattribute__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__getattribute__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>x.__getattribute__('name') &lt;==&gt; x.name</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__getattribute__"><code>__builtin__.object.__getattribute__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__new__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__new__</span>(<span class="sig-arg">T</span>,\r
+          <span class="sig-arg">S</span>,\r
+          <span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+<pre class="literalblock">\r
+a new object with type S, a subtype of T\r
+</pre>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__new__"><code>__builtin__.object.__new__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__reduce__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__reduce__</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>-&gt; (cls, state)</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__reduce__"><code>__builtin__.object.__reduce__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="dst"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">dst</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>datetime -&gt; DST offset in minutes east of UTC.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="fromutc"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">fromutc</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>datetime in UTC -&gt; datetime in local time.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="tzname"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">tzname</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>datetime -&gt; string name of time zone.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="utcoffset"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">utcoffset</span>(<span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>datetime -&gt; minutes east of UTC (negative for west of UTC).</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/epydoc.css b/psycopg2/doc/api/public/epydoc.css
new file mode 100644 (file)
index 0000000..22e8f7e
--- /dev/null
@@ -0,0 +1,138 @@
+/* Based on the Epydoc "default.css"\r
+** with some missing reST-related classes\r
+** and Python syntax support (from SilverCity)\r
+*/\r
+\r
+/* Body color */ \r
+body               { background: #ffffff; color: #000000; } \r
\r
+/* Tables */ \r
+table.summary, table.details, table.index\r
+                   { background: #e8f0f8; color: #000000; } \r
+tr.summary, tr.details, tr.index\r
+                   { background: #70b0f0; color: #000000;  \r
+                     text-align: left; font-size: 120%; } \r
+tr.group           { background: #c0e0f8; color: #000000;\r
+                     text-align: left; font-size: 120%;\r
+                     font-style: italic; } \r
+\r
+/* Documentation page titles */\r
+h2.module          { margin-top: 0.2em; }\r
+h2.class           { margin-top: 0.2em; }\r
\r
+/* Headings */\r
+h1.heading         { font-size: +140%; font-style: italic;\r
+                     font-weight: bold; }\r
+h2.heading         { font-size: +125%; font-style: italic;\r
+                     font-weight: bold; }\r
+h3.heading         { font-size: +110%; font-style: italic;\r
+                     font-weight: normal; }\r
+                    \r
+/* Base tree */\r
+pre.base-tree      { font-size: 80%; margin: 0; }\r
+\r
+/* TOC */\r
+p.toc { margin: 0; }\r
+\r
+/* Details Sections */\r
+table.func-details { background: #e8f0f8; color: #000000;\r
+                     border: 2px groove #c0d0d0;\r
+                     padding: 0 1em 0 1em; margin: 0.4em 0 0 0; }\r
+h3.func-detail     { background: transparent; color: #000000;\r
+                     margin: 0 0 1em 0; }\r
+\r
+table.var-details  { background: #e8f0f8; color: #000000;\r
+                     border: 2px groove #c0d0d0;\r
+                     padding: 0 1em 0 1em; margin: 0.4em 0 0 0; }\r
+h3.var-details     { background: transparent; color: #000000;\r
+                     margin: 0 0 1em 0; }\r
+\r
+/* Function signatures */\r
+.sig               { background: transparent; color: #000000;\r
+                     font-weight: bold; }  \r
+.sig-name          { background: transparent; color: #006080; }  \r
+.sig-arg, .sig-kwarg, .sig-vararg\r
+                   { background: transparent; color: #008060; }  \r
+.sig-default       { background: transparent; color: #602000; }  \r
+.summary-sig       { background: transparent; color: #000000; }  \r
+.summary-sig-name  { background: transparent; color: #204080; }\r
+.summary-sig-arg, .summary-sig-kwarg, .summary-sig-vararg\r
+                   { background: transparent; color: #008060; }  \r
+\r
+/* Doctest blocks */\r
+.py-src            { background: transparent; color: #000000; }\r
+.py-prompt         { background: transparent; color: #005050;\r
+                     font-weight: bold;}\r
+.py-string         { background: transparent; color: #006030; }\r
+.py-comment        { background: transparent; color: #003060; }\r
+.py-keyword        { background: transparent; color: #600000; }\r
+.py-output         { background: transparent; color: #404040; }\r
+div.code-block,\r
+pre.literal-block,\r
+pre.doctestblock   { background: #f4faff; color: #000000; \r
+                     padding: .5em; margin: 1em;\r
+                     border: 1px solid #708890; }\r
+table pre.doctestblock\r
+                   { background: #dce4ec; color: #000000; \r
+                     padding: .5em; margin: 1em;\r
+                     border: 1px solid #708890; }\r
+div.code-block     { font-family: monospace; }\r
+\r
+/* Variable values */\r
+pre.variable       { background: #dce4ec; color: #000000;\r
+                     padding: .5em; margin: 0;\r
+                     border: 1px solid #708890; }\r
+.variable-linewrap { background: transparent; color: #604000; }\r
+.variable-ellipsis { background: transparent; color: #604000; }\r
+.variable-quote    { background: transparent; color: #604000; }\r
+.re                { background: transparent; color: #000000; }\r
+.re-char           { background: transparent; color: #006030; }\r
+.re-op             { background: transparent; color: #600000; }\r
+.re-group          { background: transparent; color: #003060; }\r
+.re-ref            { background: transparent; color: #404040; }\r
+\r
+/* Navigation bar */ \r
+table.navbar       { background: #a0c0ff; color: #0000ff;\r
+                     border: 2px groove #c0d0d0; }\r
+th.navbar          { background: #a0c0ff; color: #0000ff; } \r
+th.navselect       { background: #70b0ff; color: #000000; } \r
+.nomargin          { margin: 0; }\r
+\r
+/* Links */ \r
+a:link             { background: transparent; color: #0000ff; }  \r
+a:visited          { background: transparent; color: #204080; }  \r
+a.navbar:link      { background: transparent; color: #0000ff; \r
+                     text-decoration: none; }  \r
+a.navbar:visited   { background: transparent; color: #204080; \r
+                     text-decoration: none; }  \r
+\r
+/* Admonitions */\r
+div.warning,\r
+div.note                { background-color: #c0e0f8;\r
+                          border: thin solid black;\r
+                          padding: 1em;\r
+                          margin-left: 1em;\r
+                          margin-right: 1em; }\r
+div.warning .first,\r
+div.note .first      { font-family: sans-serif;\r
+                          font-size: 110%;\r
+                          margin-right: 0.5em; }\r
+\r
+/* Lists */\r
+ul { margin-top: 0; }\r
+\r
+/* Python syntax */\r
+.p_character { color: olive; }\r
+.p_classname { color: blue; font-weight: bold; }\r
+.p_commentblock {color: gray; font-style: italic; }\r
+.p_commentline { color: green; font-style: italic; }\r
+.p_default {}\r
+.p_defname { color: #009999; font-weight: bold; }\r
+.p_identifier { color: black; }\r
+.p_number { color: #009999; }\r
+.p_operator { color: black; }\r
+.p_string { color: #7F007F; }\r
+.p_stringeol { color: #7F007F; }\r
+.p_triple { color: #7F0000; }\r
+.p_tripledouble { color: #7F0000; }\r
+.p_word { color: navy; font-weight: bold; }\r
diff --git a/psycopg2/doc/api/public/exceptions.Exception-class.html b/psycopg2/doc/api/public/exceptions.Exception-class.html
new file mode 100644 (file)
index 0000000..d7e7ba4
--- /dev/null
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>exceptions.Exception</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        Module&nbsp;exceptions ::\r
+        Class&nbsp;Exception\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/exceptions.Exception-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="exceptions.Exception-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class Exception</h2>\r
+\r
+<dl><dt>Known Subclasses:</dt>\r
+<dd>\r
+    <a href="exceptions.StandardError-class.html"><code>StandardError</code></a></dd></dl>\r
+\r
+<hr/>\r
+\r
+<p>Common base class for all exceptions.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__init__"></a><span class="summary-sig"><span class="summary-sig-name">__init__</span>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__getitem__"></a><span class="summary-sig"><span class="summary-sig-name">__getitem__</span>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__str__"></a><span class="summary-sig"><span class="summary-sig-name">__str__</span>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__init__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-vararg">...</span>)</span>\r
+    <br /><em class="fname">(Constructor)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__getitem__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__getitem__</span>(<span class="sig-vararg">...</span>)</span>\r
+    <br /><em class="fname">(Indexing operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__str__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-vararg">...</span>)</span>\r
+    <br /><em class="fname">(Informal representation operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:35 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/exceptions.StandardError-class.html b/psycopg2/doc/api/public/exceptions.StandardError-class.html
new file mode 100644 (file)
index 0000000..ab0a1c3
--- /dev/null
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>exceptions.StandardError</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        Module&nbsp;exceptions ::\r
+        Class&nbsp;StandardError\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/exceptions.StandardError-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="exceptions.StandardError-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class StandardError</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+\r
+            |\r
+           <strong class="uidshort">StandardError</strong>\r
+</pre><br />\r
+\r
+<dl><dt>Known Subclasses:</dt>\r
+<dd>\r
+    <a href="psycopg2.Error-class.html"><code>Error</code></a>,\r
+    <a href="psycopg2.Warning-class.html"><code>Warning</code></a></dd></dl>\r
+\r
+<hr/>\r
+\r
+<p>Base class for all standard Python exceptions.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/frames.html b/psycopg2/doc/api/public/frames.html
new file mode 100644 (file)
index 0000000..ffd6536
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"\r
+          "DTD/xhtml1-frameset.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title> API Documentation </title>\r
+</head>\r
+<frameset cols="20%,80%">\r
+  <frameset rows="30%,70%">\r
+    <frame src="toc.html" name="moduleListFrame" id="moduleListFrame" />\r
+    <frame src="toc-everything.html" name="moduleFrame" id="moduleFrame" />\r
+  </frameset>\r
+  <frame src="psycopg2-module.html" name="mainFrame" id="mainFrame" />\r
+</frameset>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/help.html b/psycopg2/doc/api/public/help.html
new file mode 100644 (file)
index 0000000..0e9a1cf
--- /dev/null
@@ -0,0 +1,231 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>Help</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th bgcolor="#70b0f0" class="navselect">&nbsp;&nbsp;&nbsp;Help&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/help.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="help.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<h1 class="help"> API Documentation </h1>\r
+\r
+<p> This document contains the API (Application Programming Interface)\r
+documentation for this project.  Documentation for the Python\r
+objects defined by the project is divided into separate pages for each\r
+package, module, and class.  The API documentation also includes two\r
+pages containing information about the project as a whole: a trees\r
+page, and an index page.  </p>\r
+\r
+<h2> Object Documentation </h2>\r
+\r
+  <p>Each <strong>Package Documentation</strong> page contains: </p>\r
+  <ul>\r
+    <li> A description of the package. </li>\r
+    <li> A list of the modules and sub-packages contained by the\r
+    package.  </li>\r
+    <li> A summary of the classes defined by the package. </li>\r
+    <li> A summary of the functions defined by the package. </li>\r
+    <li> A summary of the variables defined by the package. </li>\r
+    <li> A detailed description of each function defined by the\r
+    package. </li>\r
+    <li> A detailed description of each variable defined by the\r
+    package. </li>\r
+  </ul>\r
+  \r
+  <p>Each <strong>Module Documentation</strong> page contains:</p>\r
+  <ul>\r
+    <li> A description of the module. </li>\r
+    <li> A summary of the classes defined by the module. </li>\r
+    <li> A summary of the functions defined by the module. </li>\r
+    <li> A summary of the variables defined by the module. </li>\r
+    <li> A detailed description of each function defined by the\r
+    module. </li>\r
+    <li> A detailed description of each variable defined by the\r
+    module. </li>\r
+  </ul>\r
+  \r
+  <p>Each <strong>Class Documentation</strong> page contains: </p>\r
+  <ul>\r
+    <li> A class inheritance diagram. </li>\r
+    <li> A list of known subclasses. </li>\r
+    <li> A description of the class. </li>\r
+    <li> A summary of the methods defined by the class. </li>\r
+    <li> A summary of the instance variables defined by the class. </li>\r
+    <li> A summary of the class (static) variables defined by the\r
+    class. </li> \r
+    <li> A detailed description of each method defined by the\r
+    class. </li>\r
+    <li> A detailed description of each instance variable defined by the\r
+    class. </li> \r
+    <li> A detailed description of each class (static) variable defined\r
+    by the class. </li> \r
+  </ul>\r
+\r
+<h2> Project Documentation </h2>\r
+\r
+  <p> The <strong>Trees</strong> page contains the module and class hierarchies: </p>\r
+  <ul>\r
+    <li> The <em>module hierarchy</em> lists every package and module, with\r
+    modules grouped into packages.  At the top level, and within each\r
+    package, modules and sub-packages are listed alphabetically. </li>\r
+    <li> The <em>class hierarchy</em> lists every class, grouped by base\r
+    class.  If a class has more than one base class, then it will be\r
+    listed under each base class.  At the top level, and under each base\r
+    class, classes are listed alphabetically. </li>\r
+  </ul>\r
+  \r
+  <p> The <strong>Index</strong> page contains indices of terms and\r
+  identifiers: </p>\r
+  <ul>\r
+    <li> The <em>term index</em> lists every term indexed by any object's\r
+    documentation.  For each term, the index provides links to each\r
+    place where the term is indexed. </li>\r
+    <li> The <em>identifier index</em> lists the (short) name of every package,\r
+    module, class, method, function, variable, and parameter.  For each\r
+    identifier, the index provides a short description, and a link to\r
+    its documentation. </li>\r
+  </ul>\r
+\r
+<h2> The Table of Contents </h2>\r
+\r
+<p> The table of contents occupies the two frames on the left side of\r
+the window.  The upper-left frame displays the <em>project\r
+contents</em>, and the lower-left frame displays the <em>module\r
+contents</em>: </p>\r
+\r
+<table class="help summary" border="1" cellspacing="0" cellpadding="3">\r
+  <tr style="height: 30%">\r
+    <td align="center" style="font-size: small">\r
+       Project<br />Contents<hr />...</td>\r
+    <td align="center" style="font-size: small" rowspan="2" width="70%">\r
+      API<br />Documentation<br />Frame<br /><br /><br />\r
+    </td>\r
+  </tr>\r
+  <tr>\r
+    <td align="center" style="font-size: small">\r
+      Module<br />Contents<hr />&nbsp;<br />...<br />&nbsp;\r
+    </td>\r
+  </tr>\r
+</table><br />\r
+\r
+<p> The <strong>project contents frame</strong> contains a list of all packages\r
+and modules that are defined by the project.  Clicking on an entry\r
+will display its contents in the module contents frame.  Clicking on a\r
+special entry, labeled "Everything," will display the contents of\r
+the entire project. </p>\r
+\r
+<p> The <strong>module contents frame</strong> contains a list of every\r
+submodule, class, type, exception, function, and variable defined by a\r
+module or package.  Clicking on an entry will display its\r
+documentation in the API documentation frame.  Clicking on the name of\r
+the module, at the top of the frame, will display the documentation\r
+for the module itself. </p>\r
+\r
+<p> The "<strong>frames</strong>" and "<strong>no frames</strong>" buttons below the top\r
+navigation bar can be used to control whether the table of contents is\r
+displayed or not. </p>\r
+\r
+<h2> The Navigation Bar </h2>\r
+\r
+<p> A navigation bar is located at the top and bottom of every page.\r
+It indicates what type of page you are currently viewing, and allows\r
+you to go to related pages.  The following table describes the labels\r
+on the navigation bar.  Note that not some labels (such as\r
+[Parent]) are not displayed on all pages. </p>\r
+\r
+<table class="summary" border="1" cellspacing="0" cellpadding="3" width="100%">\r
+<tr class="summary">\r
+  <th>Label</th>\r
+  <th>Highlighted when...</th>\r
+  <th>Links to...</th>\r
+</tr>\r
+  <tr><td valign="top"><strong>[Parent]</strong></td>\r
+      <td valign="top"><em>(never highlighted)</em></td>\r
+      <td valign="top"> the parent of the current package </td></tr>\r
+  <tr><td valign="top"><strong>[Package]</strong></td>\r
+      <td valign="top">viewing a package</td>\r
+      <td valign="top">the package containing the current object\r
+      </td></tr>\r
+  <tr><td valign="top"><strong>[Module]</strong></td>\r
+      <td valign="top">viewing a module</td>\r
+      <td valign="top">the module containing the current object\r
+      </td></tr> \r
+  <tr><td valign="top"><strong>[Class]</strong></td>\r
+      <td valign="top">viewing a class </td>\r
+      <td valign="top">the class containing the current object</td></tr>\r
+  <tr><td valign="top"><strong>[Trees]</strong></td>\r
+      <td valign="top">viewing the trees page</td>\r
+      <td valign="top"> the trees page </td></tr>\r
+  <tr><td valign="top"><strong>[Index]</strong></td>\r
+      <td valign="top">viewing the index page</td>\r
+      <td valign="top"> the index page </td></tr>\r
+  <tr><td valign="top"><strong>[Help]</strong></td>\r
+      <td valign="top">viewing the help page</td>\r
+      <td valign="top"> the help page </td></tr>\r
+</table>\r
+\r
+<p> The "<strong>show private</strong>" and "<strong>hide private</strong>" buttons below\r
+the top navigation bar can be used to control whether documentation\r
+for private objects is displayed.  Private objects are usually defined\r
+as objects whose (short) names begin with a single underscore, but do\r
+not end with an underscore.  For example, "<code>_x</code>",\r
+"<code>__pprint</code>", and "<code>epydoc.epytext._tokenize</code>"\r
+are private objects; but "<code>re.sub</code>",\r
+"<code>__init__</code>", and "<code>type_</code>" are not.  However,\r
+if a module defines the "<code>__all__</code>" variable, then its\r
+contents are used to decide which objects are private. </p>\r
+\r
+<p> A timestamp below the bottom navigation bar indicates when each\r
+page was last updated. </p>\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th bgcolor="#70b0f0" class="navselect">&nbsp;&nbsp;&nbsp;Help&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:37 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/index.html b/psycopg2/doc/api/public/index.html
new file mode 100644 (file)
index 0000000..ffd6536
--- /dev/null
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"\r
+          "DTD/xhtml1-frameset.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title> API Documentation </title>\r
+</head>\r
+<frameset cols="20%,80%">\r
+  <frameset rows="30%,70%">\r
+    <frame src="toc.html" name="moduleListFrame" id="moduleListFrame" />\r
+    <frame src="toc-everything.html" name="moduleFrame" id="moduleFrame" />\r
+  </frameset>\r
+  <frame src="psycopg2-module.html" name="mainFrame" id="mainFrame" />\r
+</frameset>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/indices.html b/psycopg2/doc/api/public/indices.html
new file mode 100644 (file)
index 0000000..a6d0fad
--- /dev/null
@@ -0,0 +1,418 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>Index</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th bgcolor="#70b0f0" class="navselect">&nbsp;&nbsp;&nbsp;Index&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/indices.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="indices.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+<br />\r
+\r
+<!-- =========== START OF IDENTIFIER INDEX =========== -->\r
+<table class="index" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="index">\r
+  <th colspan="2">Identifier Index</th></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__add__"><code>__add__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__base__"><code>__base__</code></a></td>\r
+    <td>member_descriptor in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__bases__"><code>__bases__</code></a></td>\r
+    <td>Variable in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__basicsize__"><code>__basicsize__</code></a></td>\r
+    <td>member_descriptor in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__call__"><code>__call__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html"><code>type</code></a></td>\r
+    <td>Class in module <code>__builtin__</code></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__cmp__"><code>__cmp__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__contains__"><code>__contains__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html#__delattr__"><code>__delattr__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__delattr__"><code>__delattr__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__delitem__"><code>__delitem__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__delslice__"><code>__delslice__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__dictoffset__"><code>__dictoffset__</code></a></td>\r
+    <td>member_descriptor in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__eq__"><code>__eq__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__flags__"><code>__flags__</code></a></td>\r
+    <td>member_descriptor in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__ge__"><code>__ge__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__getattribute__"><code>__getattribute__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html#__getattribute__"><code>__getattribute__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__getattribute__"><code>__getattribute__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="datetime.tzinfo-class.html#__getattribute__"><code>__getattribute__</code></a></td>\r
+    <td>Method in class <a href="datetime.tzinfo-class.html"><code>datetime.tzinfo</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__getitem__"><code>__getitem__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="exceptions.Exception-class.html#__getitem__"><code>__getitem__</code></a></td>\r
+    <td>Method in class <a href="exceptions.Exception-class.html"><code>exceptions.Exception</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictRow-class.html#__getitem__"><code>__getitem__</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictRow-class.html"><code>psycopg2.extras.DictRow</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__getslice__"><code>__getslice__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__gt__"><code>__gt__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__hash__"><code>__hash__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html#__hash__"><code>__hash__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__hash__"><code>__hash__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__iadd__"><code>__iadd__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__imul__"><code>__imul__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__init__"><code>__init__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html#__init__"><code>__init__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></td></tr>\r
+  <tr><td width="15%"><a href="exceptions.Exception-class.html#__init__"><code>__init__</code></a></td>\r
+    <td>Method in class <a href="exceptions.Exception-class.html"><code>exceptions.Exception</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictRow-class.html#__init__"><code>__init__</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictRow-class.html"><code>psycopg2.extras.DictRow</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.SQL_IN-class.html#__init__"><code>__init__</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.SQL_IN-class.html"><code>psycopg2.extras.SQL_IN</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.AbstractConnectionPool-class.html#__init__"><code>__init__</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.AbstractConnectionPool-class.html"><code>psycopg2.pool.AbstractConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.PersistentConnectionPool-class.html#__init__"><code>__init__</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.PersistentConnectionPool-class.html"><code>psycopg2.pool.PersistentConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.ThreadedConnectionPool-class.html#__init__"><code>__init__</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.ThreadedConnectionPool-class.html"><code>psycopg2.pool.ThreadedConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz.FixedOffsetTimezone-class.html#__init__"><code>__init__</code></a></td>\r
+    <td>Method in class <a href="psycopg2.tz.FixedOffsetTimezone-class.html"><code>psycopg2.tz.FixedOffsetTimezone</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__itemsize__"><code>__itemsize__</code></a></td>\r
+    <td>member_descriptor in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__iter__"><code>__iter__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__le__"><code>__le__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__len__"><code>__len__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__lt__"><code>__lt__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__mro__"><code>__mro__</code></a></td>\r
+    <td>member_descriptor in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__mul__"><code>__mul__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__name__"><code>__name__</code></a></td>\r
+    <td>Variable in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__ne__"><code>__ne__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__new__"><code>__new__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html#__new__"><code>__new__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__new__"><code>__new__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="datetime.tzinfo-class.html#__new__"><code>__new__</code></a></td>\r
+    <td>Method in class <a href="datetime.tzinfo-class.html"><code>datetime.tzinfo</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html#__reduce__"><code>__reduce__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></td></tr>\r
+  <tr><td width="15%"><a href="datetime.tzinfo-class.html#__reduce__"><code>__reduce__</code></a></td>\r
+    <td>Method in class <a href="datetime.tzinfo-class.html"><code>datetime.tzinfo</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html#__reduce_ex__"><code>__reduce_ex__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__repr__"><code>__repr__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html#__repr__"><code>__repr__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__repr__"><code>__repr__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__rmul__"><code>__rmul__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html#__setattr__"><code>__setattr__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__setattr__"><code>__setattr__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__setitem__"><code>__setitem__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#__setslice__"><code>__setslice__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html#__str__"><code>__str__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></td></tr>\r
+  <tr><td width="15%"><a href="exceptions.Exception-class.html#__str__"><code>__str__</code></a></td>\r
+    <td>Method in class <a href="exceptions.Exception-class.html"><code>exceptions.Exception</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__subclasses__"><code>__subclasses__</code></a></td>\r
+    <td>Method in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#__weakrefoffset__"><code>__weakrefoffset__</code></a></td>\r
+    <td>member_descriptor in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.AbstractConnectionPool-class.html"><code>AbstractConnectionPool</code></a></td>\r
+    <td>Class in module <a href="psycopg2.pool-module.html"><code>psycopg2.pool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#adapt"><code>adapt</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#append"><code>append</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#AsIs"><code>AsIs</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.psycopg1.connection-class.html#autocommit"><code>autocommit</code></a></td>\r
+    <td>Method in class <a href="psycopg2.psycopg1.connection-class.html"><code>psycopg2.psycopg1.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2-module.html#Binary"><code>Binary</code></a></td>\r
+    <td>Function in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#Boolean"><code>Boolean</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictCursor-class.html#callproc"><code>callproc</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictCursor-class.html"><code>psycopg2.extras.DictCursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.PersistentConnectionPool-class.html#closeall"><code>closeall</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.PersistentConnectionPool-class.html"><code>psycopg2.pool.PersistentConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.ThreadedConnectionPool-class.html#closeall"><code>closeall</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.ThreadedConnectionPool-class.html"><code>psycopg2.pool.ThreadedConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2-module.html#connect"><code>connect</code></a></td>\r
+    <td>Function in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.psycopg1-module.html#connect"><code>connect</code></a></td>\r
+    <td>Function in module <a href="psycopg2.psycopg1-module.html"><code>psycopg2.psycopg1</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.psycopg1.connection-class.html"><code>connection</code></a></td>\r
+    <td>Class in module <a href="psycopg2.psycopg1-module.html"><code>psycopg2.psycopg1</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#count"><code>count</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictConnection-class.html#cursor"><code>cursor</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictConnection-class.html"><code>psycopg2.extras.DictConnection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.psycopg1.connection-class.html#cursor"><code>cursor</code></a></td>\r
+    <td>Method in class <a href="psycopg2.psycopg1.connection-class.html"><code>psycopg2.psycopg1.connection</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.psycopg1.cursor-class.html"><code>cursor</code></a></td>\r
+    <td>Class in module <a href="psycopg2.psycopg1-module.html"><code>psycopg2.psycopg1</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.DatabaseError-class.html"><code>DatabaseError</code></a></td>\r
+    <td>Class in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.DataError-class.html"><code>DataError</code></a></td>\r
+    <td>Class in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2-module.html#Date"><code>Date</code></a></td>\r
+    <td>Function in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#DateFromPy"><code>DateFromPy</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2-module.html#DateFromTicks"><code>DateFromTicks</code></a></td>\r
+    <td>Function in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool-module.html#dbg"><code>dbg</code></a></td>\r
+    <td>Function in module <a href="psycopg2.pool-module.html"><code>psycopg2.pool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictConnection-class.html"><code>DictConnection</code></a></td>\r
+    <td>Class in module <a href="psycopg2.extras-module.html"><code>psycopg2.extras</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictCursor-class.html"><code>DictCursor</code></a></td>\r
+    <td>Class in module <a href="psycopg2.extras-module.html"><code>psycopg2.extras</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.psycopg1.cursor-class.html#dictfetchall"><code>dictfetchall</code></a></td>\r
+    <td>Method in class <a href="psycopg2.psycopg1.cursor-class.html"><code>psycopg2.psycopg1.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.psycopg1.cursor-class.html#dictfetchmany"><code>dictfetchmany</code></a></td>\r
+    <td>Method in class <a href="psycopg2.psycopg1.cursor-class.html"><code>psycopg2.psycopg1.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.psycopg1.cursor-class.html#dictfetchone"><code>dictfetchone</code></a></td>\r
+    <td>Method in class <a href="psycopg2.psycopg1.cursor-class.html"><code>psycopg2.psycopg1.cursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictRow-class.html"><code>DictRow</code></a></td>\r
+    <td>Class in module <a href="psycopg2.extras-module.html"><code>psycopg2.extras</code></a></td></tr>\r
+  <tr><td width="15%"><a href="datetime.tzinfo-class.html#dst"><code>dst</code></a></td>\r
+    <td>Method in class <a href="datetime.tzinfo-class.html"><code>datetime.tzinfo</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz.FixedOffsetTimezone-class.html#dst"><code>dst</code></a></td>\r
+    <td>Method in class <a href="psycopg2.tz.FixedOffsetTimezone-class.html"><code>psycopg2.tz.FixedOffsetTimezone</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz.LocalTimezone-class.html#dst"><code>dst</code></a></td>\r
+    <td>Method in class <a href="psycopg2.tz.LocalTimezone-class.html"><code>psycopg2.tz.LocalTimezone</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz-module.html#DSTDIFF"><code>DSTDIFF</code></a></td>\r
+    <td>Variable in module <a href="psycopg2.tz-module.html"><code>psycopg2.tz</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.Error-class.html"><code>Error</code></a></td>\r
+    <td>Class in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="exceptions.Exception-class.html"><code>Exception</code></a></td>\r
+    <td>Class in module <code>exceptions</code></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictCursor-class.html#execute"><code>execute</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictCursor-class.html"><code>psycopg2.extras.DictCursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#extend"><code>extend</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html"><code>extensions</code></a></td>\r
+    <td>Module in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras-module.html"><code>extras</code></a></td>\r
+    <td>Module in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictCursor-class.html#fetchall"><code>fetchall</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictCursor-class.html"><code>psycopg2.extras.DictCursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictCursor-class.html#fetchmany"><code>fetchmany</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictCursor-class.html"><code>psycopg2.extras.DictCursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictCursor-class.html#fetchone"><code>fetchone</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictCursor-class.html"><code>psycopg2.extras.DictCursor</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz.FixedOffsetTimezone-class.html"><code>FixedOffsetTimezone</code></a></td>\r
+    <td>Class in module <a href="psycopg2.tz-module.html"><code>psycopg2.tz</code></a></td></tr>\r
+  <tr><td width="15%"><a href="datetime.tzinfo-class.html#fromutc"><code>fromutc</code></a></td>\r
+    <td>Method in class <a href="datetime.tzinfo-class.html"><code>datetime.tzinfo</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictRow-class.html#get"><code>get</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictRow-class.html"><code>psycopg2.extras.DictRow</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.PersistentConnectionPool-class.html#getconn"><code>getconn</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.PersistentConnectionPool-class.html"><code>psycopg2.pool.PersistentConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.ThreadedConnectionPool-class.html#getconn"><code>getconn</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.ThreadedConnectionPool-class.html"><code>psycopg2.pool.ThreadedConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.SQL_IN-class.html#getquoted"><code>getquoted</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.SQL_IN-class.html"><code>psycopg2.extras.SQL_IN</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictRow-class.html#has_key"><code>has_key</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictRow-class.html"><code>psycopg2.extras.DictRow</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#index"><code>index</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#insert"><code>insert</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.IntegrityError-class.html"><code>IntegrityError</code></a></td>\r
+    <td>Class in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.InterfaceError-class.html"><code>InterfaceError</code></a></td>\r
+    <td>Class in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.InternalError-class.html"><code>InternalError</code></a></td>\r
+    <td>Class in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#IntervalFromPy"><code>IntervalFromPy</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#ISOLATION_LEVEL_AUTOCOMMIT"><code>ISOLATION_LEVEL_AUTOCOMMIT</code></a></td>\r
+    <td>Variable in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#ISOLATION_LEVEL_READ_COMMITTED"><code>ISOLATION_LEVEL_READ_COMMITTED</code></a></td>\r
+    <td>Variable in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#ISOLATION_LEVEL_READ_UNCOMMITTED"><code>ISOLATION_LEVEL_READ_UNCOMMITTED</code></a></td>\r
+    <td>Variable in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#ISOLATION_LEVEL_REPEATABLE_READ"><code>ISOLATION_LEVEL_REPEATABLE_READ</code></a></td>\r
+    <td>Variable in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#ISOLATION_LEVEL_SERIALIZABLE"><code>ISOLATION_LEVEL_SERIALIZABLE</code></a></td>\r
+    <td>Variable in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictRow-class.html#items"><code>items</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictRow-class.html"><code>psycopg2.extras.DictRow</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictRow-class.html#keys"><code>keys</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictRow-class.html"><code>psycopg2.extras.DictRow</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html"><code>list</code></a></td>\r
+    <td>Class in module <code>__builtin__</code></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz-module.html#LOCAL"><code>LOCAL</code></a></td>\r
+    <td>Variable in module <a href="psycopg2.tz-module.html"><code>psycopg2.tz</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz.LocalTimezone-class.html"><code>LocalTimezone</code></a></td>\r
+    <td>Class in module <a href="psycopg2.tz-module.html"><code>psycopg2.tz</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html#mro"><code>mro</code></a></td>\r
+    <td>Method in class <a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#new_type"><code>new_type</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.NotSupportedError-class.html"><code>NotSupportedError</code></a></td>\r
+    <td>Class in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.object-class.html"><code>object</code></a></td>\r
+    <td>Class in module <code>__builtin__</code></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.OperationalError-class.html"><code>OperationalError</code></a></td>\r
+    <td>Class in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.PersistentConnectionPool-class.html"><code>PersistentConnectionPool</code></a></td>\r
+    <td>Class in module <a href="psycopg2.pool-module.html"><code>psycopg2.pool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool-module.html"><code>pool</code></a></td>\r
+    <td>Module in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.PoolError-class.html"><code>PoolError</code></a></td>\r
+    <td>Class in module <a href="psycopg2.pool-module.html"><code>psycopg2.pool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#pop"><code>pop</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.ProgrammingError-class.html"><code>ProgrammingError</code></a></td>\r
+    <td>Class in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.psycopg1-module.html"><code>psycopg1</code></a></td>\r
+    <td>Module in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2-module.html"><code>psycopg2</code></a></td>\r
+    <td>Package</td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.PersistentConnectionPool-class.html#putconn"><code>putconn</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.PersistentConnectionPool-class.html"><code>psycopg2.pool.PersistentConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.ThreadedConnectionPool-class.html#putconn"><code>putconn</code></a></td>\r
+    <td>Method in class <a href="psycopg2.pool.ThreadedConnectionPool-class.html"><code>psycopg2.pool.ThreadedConnectionPool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#QuotedString"><code>QuotedString</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#register_adapter"><code>register_adapter</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#register_type"><code>register_type</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#remove"><code>remove</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#reverse"><code>reverse</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.SimpleConnectionPool-class.html"><code>SimpleConnectionPool</code></a></td>\r
+    <td>Class in module <a href="psycopg2.pool-module.html"><code>psycopg2.pool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.list-class.html#sort"><code>sort</code></a></td>\r
+    <td>Method in class <a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.SQL_IN-class.html"><code>SQL_IN</code></a></td>\r
+    <td>Class in module <a href="psycopg2.extras-module.html"><code>psycopg2.extras</code></a></td></tr>\r
+  <tr><td width="15%"><a href="exceptions.StandardError-class.html"><code>StandardError</code></a></td>\r
+    <td>Class in module <code>exceptions</code></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz-module.html#STDOFFSET"><code>STDOFFSET</code></a></td>\r
+    <td>Variable in module <a href="psycopg2.tz-module.html"><code>psycopg2.tz</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.pool.ThreadedConnectionPool-class.html"><code>ThreadedConnectionPool</code></a></td>\r
+    <td>Class in module <a href="psycopg2.pool-module.html"><code>psycopg2.pool</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2-module.html#Time"><code>Time</code></a></td>\r
+    <td>Function in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#TimeFromPy"><code>TimeFromPy</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2-module.html#TimeFromTicks"><code>TimeFromTicks</code></a></td>\r
+    <td>Function in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2-module.html#Timestamp"><code>Timestamp</code></a></td>\r
+    <td>Function in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extensions-module.html#TimestampFromPy"><code>TimestampFromPy</code></a></td>\r
+    <td>Function in module <a href="psycopg2.extensions-module.html"><code>psycopg2.extensions</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2-module.html#TimestampFromTicks"><code>TimestampFromTicks</code></a></td>\r
+    <td>Function in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="__builtin__.type-class.html"><code>type</code></a></td>\r
+    <td>Class in module <code>__builtin__</code></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz-module.html"><code>tz</code></a></td>\r
+    <td>Module in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="datetime.tzinfo-class.html"><code>tzinfo</code></a></td>\r
+    <td>Class in module <code>datetime</code></td></tr>\r
+  <tr><td width="15%"><a href="datetime.tzinfo-class.html#tzname"><code>tzname</code></a></td>\r
+    <td>Method in class <a href="datetime.tzinfo-class.html"><code>datetime.tzinfo</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz.FixedOffsetTimezone-class.html#tzname"><code>tzname</code></a></td>\r
+    <td>Method in class <a href="psycopg2.tz.FixedOffsetTimezone-class.html"><code>psycopg2.tz.FixedOffsetTimezone</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz.LocalTimezone-class.html#tzname"><code>tzname</code></a></td>\r
+    <td>Method in class <a href="psycopg2.tz.LocalTimezone-class.html"><code>psycopg2.tz.LocalTimezone</code></a></td></tr>\r
+  <tr><td width="15%"><a href="datetime.tzinfo-class.html#utcoffset"><code>utcoffset</code></a></td>\r
+    <td>Method in class <a href="datetime.tzinfo-class.html"><code>datetime.tzinfo</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz.FixedOffsetTimezone-class.html#utcoffset"><code>utcoffset</code></a></td>\r
+    <td>Method in class <a href="psycopg2.tz.FixedOffsetTimezone-class.html"><code>psycopg2.tz.FixedOffsetTimezone</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz.LocalTimezone-class.html#utcoffset"><code>utcoffset</code></a></td>\r
+    <td>Method in class <a href="psycopg2.tz.LocalTimezone-class.html"><code>psycopg2.tz.LocalTimezone</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.extras.DictRow-class.html#values"><code>values</code></a></td>\r
+    <td>Method in class <a href="psycopg2.extras.DictRow-class.html"><code>psycopg2.extras.DictRow</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.Warning-class.html"><code>Warning</code></a></td>\r
+    <td>Class in package <a href="psycopg2-module.html"><code>psycopg2</code></a></td></tr>\r
+  <tr><td width="15%"><a href="psycopg2.tz-module.html#ZERO"><code>ZERO</code></a></td>\r
+    <td>Variable in module <a href="psycopg2.tz-module.html"><code>psycopg2.tz</code></a></td></tr>\r
+</table>\r
+<br />\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th bgcolor="#70b0f0" class="navselect">&nbsp;&nbsp;&nbsp;Index&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:37 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2-module.html b/psycopg2/doc/api/public/psycopg2-module.html
new file mode 100644 (file)
index 0000000..052c338
--- /dev/null
@@ -0,0 +1,335 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th bgcolor="#70b0f0" class="navselect">&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        Package&nbsp;psycopg2\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2-module.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2-module.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF PACKAGE DESCRIPTION =========== -->\r
+<h2 class="package">Package psycopg2</h2>\r
+\r
+<p>A Python driver for PostgreSQL</p>\r
+<p>psycopg is a <a class="reference" href="http://www.postgresql.org/">PostgreSQL</a> database adapter for the <a class="reference" href="http://www.python.org/">Python</a> programming\r
+language. This is version 2, a complete rewrite of the original code to\r
+provide new-style classes for connection and cursor objects and other sweet\r
+candies. Like the original, psycopg 2 was written with the aim of being very\r
+small and fast, and stable as a rock.</p>\r
+<p>Homepage: <a class="reference" href="http://initd.org/projects/psycopg2">http://initd.org/projects/psycopg2</a></p>\r
+<hr/>\r
+\r
+<!-- =========== START OF SUBMODULES =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Submodules</th></tr>\r
+  <tr><td><ul>\r
+<li> <strong class="uidlink"><a href="psycopg2.extensions-module.html"><code>extensions</code></a></strong>: <em class="summary">psycopg extensions to the DBAPI-2.0</em></li>\r
+<li> <strong class="uidlink"><a href="psycopg2.extras-module.html"><code>extras</code></a></strong>: <em class="summary">Miscellaneous goodies for psycopg2</em></li>\r
+<li> <strong class="uidlink"><a href="psycopg2.pool-module.html"><code>pool</code></a></strong>: <em class="summary">Connection pooling for psycopg2</em></li>\r
+<li> <strong class="uidlink"><a href="psycopg2.psycopg1-module.html"><code>psycopg1</code></a></strong>: <em class="summary">psycopg 1.1.x compatibility module</em></li>\r
+<li> <strong class="uidlink"><a href="psycopg2.tz-module.html"><code>tz</code></a></strong>: <em class="summary">tzinfo implementations for psycopg2</em></li>\r
+  </ul></td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF EXCEPTIONS =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Exceptions</th></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.DatabaseError-class.html"><code>DatabaseError</code></a></strong></td>\r
+  <td>Error related to the database engine.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.DataError-class.html"><code>DataError</code></a></strong></td>\r
+  <td>Error related to problems with the processed data.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.Error-class.html"><code>Error</code></a></strong></td>\r
+  <td>Base class for error exceptions.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.IntegrityError-class.html"><code>IntegrityError</code></a></strong></td>\r
+  <td>Error related to database integrity.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.InterfaceError-class.html"><code>InterfaceError</code></a></strong></td>\r
+  <td>Error related to the database interface.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.InternalError-class.html"><code>InternalError</code></a></strong></td>\r
+  <td>The database encountered an internal error.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.NotSupportedError-class.html"><code>NotSupportedError</code></a></strong></td>\r
+  <td>A not supported datbase API was called.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.OperationalError-class.html"><code>OperationalError</code></a></strong></td>\r
+  <td>Error related to database operation (disconnect, memory allocation etc).</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.ProgrammingError-class.html"><code>ProgrammingError</code></a></strong></td>\r
+  <td>Error related to database programming (SQL error, table not found etc).</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.Warning-class.html"><code>Warning</code></a></strong></td>\r
+  <td>A database warning.</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF FUNCTION SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Function Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Connections creation</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype"><a href="../private/psycopg2._psycopg.connection-class.html" class="link"><code>extensions.connection</code></a></td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2-module.html#connect" class="summary-sig-name"><code>connect</code></a>(<span class="summary-sig-arg">dsn</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Create a new database connection.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Value objects constructors</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new binary object</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2-module.html#Binary" class="summary-sig-name"><code>Binary</code></a>(<span class="summary-sig-arg">buffer</span>)</span></code>\r
+<br />\r
+Build an object capable to hold a bynary string value.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new date</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2-module.html#Date" class="summary-sig-name"><code>Date</code></a>(<span class="summary-sig-arg">year</span>,\r
+          <span class="summary-sig-arg">month</span>,\r
+          <span class="summary-sig-arg">day</span>)</span></code>\r
+<br />\r
+Build an object holding a date value.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new date</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2-module.html#DateFromTicks" class="summary-sig-name"><code>DateFromTicks</code></a>(<span class="summary-sig-arg">ticks</span>)</span></code>\r
+<br />\r
+Build an object holding a date value from the given ticks value.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new time</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2-module.html#Time" class="summary-sig-name"><code>Time</code></a>(<span class="summary-sig-arg">hour</span>,\r
+          <span class="summary-sig-arg">minutes</span>,\r
+          <span class="summary-sig-arg">seconds</span>,\r
+          <span class="summary-sig-arg">tzinfo</span>)</span></code>\r
+<br />\r
+Build an object holding a time value.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new time</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2-module.html#TimeFromTicks" class="summary-sig-name"><code>TimeFromTicks</code></a>(<span class="summary-sig-arg">ticks</span>)</span></code>\r
+<br />\r
+Build an object holding a time value from the given ticks value.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new timestamp</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2-module.html#Timestamp" class="summary-sig-name"><code>Timestamp</code></a>(<span class="summary-sig-arg">year</span>,\r
+          <span class="summary-sig-arg">month</span>,\r
+          <span class="summary-sig-arg">day</span>,\r
+          <span class="summary-sig-arg">hour</span>,\r
+          <span class="summary-sig-arg">minutes</span>,\r
+          <span class="summary-sig-arg">seconds</span>,\r
+          <span class="summary-sig-arg">tzinfo</span>)</span></code>\r
+<br />\r
+Build an object holding a timestamp value.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new timestamp</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2-module.html#TimestampFromTicks" class="summary-sig-name"><code>TimestampFromTicks</code></a>(<span class="summary-sig-arg">ticks</span>)</span></code>\r
+<br />\r
+Build an object holding a timestamp value from the given ticks value.</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF FUNCTION DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Function Details</th></tr>\r
+</table>\r
+\r
+<a name="connect"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">connect</span>(<span class="sig-arg">dsn</span>,\r
+          <span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+<p>Create a new database connection.</p>\r
+<p>This function supports two different but equivalent sets of arguments.\r
+A single data source name or <tt class="docutils literal"><span class="pre">dsn</span></tt> string can be used to specify the\r
+connection parameters, as follows:</p>\r
+<pre class="literal-block">\r
+psycopg2.connect(&quot;dbname=xxx user=xxx ...&quot;)\r
+</pre>\r
+<p>If <tt class="docutils literal"><span class="pre">dsn</span></tt> is not provided it is possible to pass the parameters as\r
+keyword arguments; e.g.:</p>\r
+<pre class="literal-block">\r
+psycopg2.connect(database='xxx', user='xxx', ...)\r
+</pre>\r
+<p>The full list of available parameters is:</p>\r
+<ul class="rst-simple">\r
+<li><tt class="docutils literal"><span class="pre">dbname</span></tt> -- database name (only in 'dsn')</li>\r
+<li><tt class="docutils literal"><span class="pre">database</span></tt> -- database name (only as keyword argument)</li>\r
+<li><tt class="docutils literal"><span class="pre">host</span></tt> -- host address (defaults to UNIX socket if not provided)</li>\r
+<li><tt class="docutils literal"><span class="pre">port</span></tt> -- port number (defaults to 5432 if not provided)</li>\r
+<li><tt class="docutils literal"><span class="pre">user</span></tt> -- user name used to authenticate</li>\r
+<li><tt class="docutils literal"><span class="pre">password</span></tt> -- password used to authenticate</li>\r
+<li><tt class="docutils literal"><span class="pre">sslmode</span></tt> -- SSL mode (see PostgreSQL documentation)</li>\r
+</ul>\r
+<p>If the <tt class="docutils literal"><span class="pre">connection_factory</span></tt> keyword argument is not provided this\r
+function always return an instance of the <code>connection</code> class.\r
+Else the given sub-class of <a href="../private/psycopg2._psycopg.connection-class.html" class="link"><code>extensions.connection</code></a> will be used to\r
+instantiate the connection object.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+New database connection        <br /><em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r
+        (type=<a href="../private/psycopg2._psycopg.connection-class.html" class="link"><code>extensions.connection</code></a>)</em>\r
+      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="Binary"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">Binary</span>(<span class="sig-arg">buffer</span>)</span>\r
+  </h3>\r
+<p>Build an object capable to hold a bynary string value.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new binary object      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="Date"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">Date</span>(<span class="sig-arg">year</span>,\r
+          <span class="sig-arg">month</span>,\r
+          <span class="sig-arg">day</span>)</span>\r
+  </h3>\r
+<p>Build an object holding a date value.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new date      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="DateFromTicks"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">DateFromTicks</span>(<span class="sig-arg">ticks</span>)</span>\r
+  </h3>\r
+<p>Build an object holding a date value from the given ticks value.</p>\r
+<p>Ticks are the number of seconds since the epoch; see the documentation of the standard Python time module for details).</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new date      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="Time"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">Time</span>(<span class="sig-arg">hour</span>,\r
+          <span class="sig-arg">minutes</span>,\r
+          <span class="sig-arg">seconds</span>,\r
+          <span class="sig-arg">tzinfo</span>=<span class="sig-default">None</span>)</span>\r
+  </h3>\r
+<p>Build an object holding a time value.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new time      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="TimeFromTicks"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">TimeFromTicks</span>(<span class="sig-arg">ticks</span>)</span>\r
+  </h3>\r
+<p>Build an object holding a time value from the given ticks value.</p>\r
+<p>Ticks are the number of seconds since the epoch; see the documentation of the standard Python time module for details).</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new time      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="Timestamp"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">Timestamp</span>(<span class="sig-arg">year</span>,\r
+          <span class="sig-arg">month</span>,\r
+          <span class="sig-arg">day</span>,\r
+          <span class="sig-arg">hour</span>,\r
+          <span class="sig-arg">minutes</span>,\r
+          <span class="sig-arg">seconds</span>,\r
+          <span class="sig-arg">tzinfo</span>=<span class="sig-default">None</span>)</span>\r
+  </h3>\r
+<p>Build an object holding a timestamp value.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new timestamp      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="TimestampFromTicks"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">TimestampFromTicks</span>(<span class="sig-arg">ticks</span>)</span>\r
+  </h3>\r
+<p>Build an object holding a timestamp value from the given ticks value.</p>\r
+<p>Ticks are the number of seconds since the epoch; see the documentation of the standard Python time module for details).</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new timestamp      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th bgcolor="#70b0f0" class="navselect">&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:35 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.DataError-class.html b/psycopg2/doc/api/public/psycopg2.DataError-class.html
new file mode 100644 (file)
index 0000000..48749b9
--- /dev/null
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.DataError</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Class&nbsp;DataError\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.DataError-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.DataError-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class DataError</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+            \r
+            |            \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+        \r
+                |        \r
+            <a href="psycopg2.Error-class.html"><code>Error</code></a> --+    \r
+                    |    \r
+        <a href="psycopg2.DatabaseError-class.html"><code>DatabaseError</code></a> --+\r
+                        |\r
+                       <strong class="uidshort">DataError</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>Error related to problems with the processed data.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.DatabaseError-class.html b/psycopg2/doc/api/public/psycopg2.DatabaseError-class.html
new file mode 100644 (file)
index 0000000..154af85
--- /dev/null
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.DatabaseError</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Class&nbsp;DatabaseError\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.DatabaseError-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.DatabaseError-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class DatabaseError</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+        \r
+            |        \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+    \r
+                |    \r
+            <a href="psycopg2.Error-class.html"><code>Error</code></a> --+\r
+                    |\r
+                   <strong class="uidshort">DatabaseError</strong>\r
+</pre><br />\r
+\r
+<dl><dt>Known Subclasses:</dt>\r
+<dd>\r
+    <a href="psycopg2.DataError-class.html"><code>DataError</code></a>,\r
+    <a href="psycopg2.IntegrityError-class.html"><code>IntegrityError</code></a>,\r
+    <a href="psycopg2.InternalError-class.html"><code>InternalError</code></a>,\r
+    <a href="psycopg2.NotSupportedError-class.html"><code>NotSupportedError</code></a>,\r
+    <a href="psycopg2.OperationalError-class.html"><code>OperationalError</code></a>,\r
+    <a href="psycopg2.ProgrammingError-class.html"><code>ProgrammingError</code></a></dd></dl>\r
+\r
+<hr/>\r
+\r
+<p>Error related to the database engine.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:34 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.Error-class.html b/psycopg2/doc/api/public/psycopg2.Error-class.html
new file mode 100644 (file)
index 0000000..ed0b9fa
--- /dev/null
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.Error</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Class&nbsp;Error\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.Error-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.Error-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class Error</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+    \r
+            |    \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+\r
+                |\r
+               <strong class="uidshort">Error</strong>\r
+</pre><br />\r
+\r
+<dl><dt>Known Subclasses:</dt>\r
+<dd>\r
+    <a href="psycopg2.DatabaseError-class.html"><code>DatabaseError</code></a>,\r
+    <a href="psycopg2.InterfaceError-class.html"><code>InterfaceError</code></a>,\r
+    <a href="psycopg2.pool.PoolError-class.html"><code>PoolError</code></a></dd></dl>\r
+\r
+<hr/>\r
+\r
+<p>Base class for error exceptions.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.IntegrityError-class.html b/psycopg2/doc/api/public/psycopg2.IntegrityError-class.html
new file mode 100644 (file)
index 0000000..f2e2752
--- /dev/null
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.IntegrityError</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Class&nbsp;IntegrityError\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.IntegrityError-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.IntegrityError-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class IntegrityError</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+            \r
+            |            \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+        \r
+                |        \r
+            <a href="psycopg2.Error-class.html"><code>Error</code></a> --+    \r
+                    |    \r
+        <a href="psycopg2.DatabaseError-class.html"><code>DatabaseError</code></a> --+\r
+                        |\r
+                       <strong class="uidshort">IntegrityError</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>Error related to database integrity.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:34 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.InterfaceError-class.html b/psycopg2/doc/api/public/psycopg2.InterfaceError-class.html
new file mode 100644 (file)
index 0000000..40667fa
--- /dev/null
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.InterfaceError</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Class&nbsp;InterfaceError\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.InterfaceError-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.InterfaceError-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class InterfaceError</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+        \r
+            |        \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+    \r
+                |    \r
+            <a href="psycopg2.Error-class.html"><code>Error</code></a> --+\r
+                    |\r
+                   <strong class="uidshort">InterfaceError</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>Error related to the database interface.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:34 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.InternalError-class.html b/psycopg2/doc/api/public/psycopg2.InternalError-class.html
new file mode 100644 (file)
index 0000000..13290d4
--- /dev/null
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.InternalError</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Class&nbsp;InternalError\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.InternalError-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.InternalError-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class InternalError</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+            \r
+            |            \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+        \r
+                |        \r
+            <a href="psycopg2.Error-class.html"><code>Error</code></a> --+    \r
+                    |    \r
+        <a href="psycopg2.DatabaseError-class.html"><code>DatabaseError</code></a> --+\r
+                        |\r
+                       <strong class="uidshort">InternalError</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>The database encountered an internal error.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:34 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.NotSupportedError-class.html b/psycopg2/doc/api/public/psycopg2.NotSupportedError-class.html
new file mode 100644 (file)
index 0000000..842c79f
--- /dev/null
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.NotSupportedError</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Class&nbsp;NotSupportedError\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.NotSupportedError-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.NotSupportedError-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class NotSupportedError</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+            \r
+            |            \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+        \r
+                |        \r
+            <a href="psycopg2.Error-class.html"><code>Error</code></a> --+    \r
+                    |    \r
+        <a href="psycopg2.DatabaseError-class.html"><code>DatabaseError</code></a> --+\r
+                        |\r
+                       <strong class="uidshort">NotSupportedError</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>A not supported datbase API was called.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.OperationalError-class.html b/psycopg2/doc/api/public/psycopg2.OperationalError-class.html
new file mode 100644 (file)
index 0000000..e52e8b1
--- /dev/null
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.OperationalError</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Class&nbsp;OperationalError\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.OperationalError-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.OperationalError-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class OperationalError</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+            \r
+            |            \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+        \r
+                |        \r
+            <a href="psycopg2.Error-class.html"><code>Error</code></a> --+    \r
+                    |    \r
+        <a href="psycopg2.DatabaseError-class.html"><code>DatabaseError</code></a> --+\r
+                        |\r
+                       <strong class="uidshort">OperationalError</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>Error related to database operation (disconnect, memory allocation etc).</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:35 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.ProgrammingError-class.html b/psycopg2/doc/api/public/psycopg2.ProgrammingError-class.html
new file mode 100644 (file)
index 0000000..ea995a5
--- /dev/null
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.ProgrammingError</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Class&nbsp;ProgrammingError\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.ProgrammingError-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.ProgrammingError-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class ProgrammingError</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+            \r
+            |            \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+        \r
+                |        \r
+            <a href="psycopg2.Error-class.html"><code>Error</code></a> --+    \r
+                    |    \r
+        <a href="psycopg2.DatabaseError-class.html"><code>DatabaseError</code></a> --+\r
+                        |\r
+                       <strong class="uidshort">ProgrammingError</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>Error related to database programming (SQL error, table not found etc).</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:35 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.Warning-class.html b/psycopg2/doc/api/public/psycopg2.Warning-class.html
new file mode 100644 (file)
index 0000000..86631fe
--- /dev/null
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.Warning</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Class&nbsp;Warning\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.Warning-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.Warning-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class Warning</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+    \r
+            |    \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+\r
+                |\r
+               <strong class="uidshort">Warning</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>A database warning.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2._psycopg-module.html b/psycopg2/doc/api/public/psycopg2._psycopg-module.html
new file mode 100644 (file)
index 0000000..034827e
--- /dev/null
@@ -0,0 +1,1001 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2._psycopg</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Module&nbsp;_psycopg\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2._psycopg-module.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2._psycopg-module.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF MODULE DESCRIPTION =========== -->\r
+<h2 class="module">Module psycopg2._psycopg</h2>\r
+\r
+<p>psycopg PostgreSQL driver</p>\r
+<hr/>\r
+\r
+<!-- =========== START OF VARIABLE SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Variable Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>str</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#__version__"><code>__version__</code></a></strong> = <span title="'2.0b7 (dt ext pq3)'"><code><span class="variable-quote">'</span>2.0b7&nbsp;(dt&nbsp;ext&nbsp;pq3)<span class="variable-quote">'</span>                       </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>dict</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#adapters"><code>adapters</code></a></strong> = <span title="{(&lt;type 'bool'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.Boolean'&gt;, (&lt;type 'list'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.List'&gt;, (&lt;type 'datetime.datetime'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;built-in function TimestampFromPy&gt;, (&lt;type 'buffer'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.Binary'&gt;, (&lt;type 'unicode'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.QuotedString'&gt;, (&lt;type 'datetime.date'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;built-in function DateFromPy&gt;, (&lt;type 'datetime.time'&gt;, ..."><code>{(&lt;type&nbsp;'bool'&gt;,&nbsp;&lt;type&nbsp;'psycopg2._psycopg.ISQ<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>str</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#apilevel"><code>apilevel</code></a></strong> = <span title="'2.0'"><code><span class="variable-quote">'</span>2.0<span class="variable-quote">'</span>                                         </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#BINARY"><code>BINARY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x009558C0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x009558C0&gt;   </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>dict</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#binary_types"><code>binary_types</code></a></strong> = <span title="{}"><code>{}                                        </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#BINARYARRAY"><code>BINARYARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955B60&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00955B<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#BOOLEAN"><code>BOOLEAN</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955760&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00955760&gt;  </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#BOOLEANARRAY"><code>BOOLEANARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955A20&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00955<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#DATE"><code>DATE</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x009558A0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x009558A0&gt;     </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#DATEARRAY"><code>DATEARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955AA0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00955AA0<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#DATETIME"><code>DATETIME</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x009557C0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x009557C0&gt; </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#DATETIMEARRAY"><code>DATETIMEARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955AC0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x0095<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#DECIMAL"><code>DECIMAL</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955680&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00955680&gt;  </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#DECIMALARRAY"><code>DECIMALARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955260&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00955<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>dict</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#encodings"><code>encodings</code></a></strong> = <span title="{'UTF8': 'utf_8', 'LATIN-1': 'latin_1', 'SQL_ASCII': 'ascii', 'UNICODE': 'utf_8', 'LATIN1': 'latin_1'}"><code>{'UTF8':&nbsp;'utf_8',&nbsp;'LATIN-1':&nbsp;'latin_1',&nbsp;'SQL<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#FLOAT"><code>FLOAT</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955660&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00955660&gt;    </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#FLOATARRAY"><code>FLOATARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x009559E0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x009559E<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#INTEGER"><code>INTEGER</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955620&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00955620&gt;  </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#INTEGERARRAY"><code>INTEGERARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955A00&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00955<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#INTERVAL"><code>INTERVAL</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955860&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00955860&gt; </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#INTERVALARRAY"><code>INTERVALARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955BA0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x0095<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#LONGINTEGER"><code>LONGINTEGER</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x009555C0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x009555<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#LONGINTEGERARRAY"><code>LONGINTEGERARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955960&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x0<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#NUMBER"><code>NUMBER</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955540&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00955540&gt;   </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>str</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#paramstyle"><code>paramstyle</code></a></strong> = <span title="'pyformat'"><code><span class="variable-quote">'</span>pyformat<span class="variable-quote">'</span>                                  </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#PYDATE"><code>PYDATE</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955D00&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00955D00&gt;   </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#PYDATETIME"><code>PYDATETIME</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955C00&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00955C0<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#PYINTERVAL"><code>PYINTERVAL</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955CE0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00955CE<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#PYTIME"><code>PYTIME</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955C40&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00955C40&gt;   </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#ROWID"><code>ROWID</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x009559A0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x009559A0&gt;    </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#ROWIDARRAY"><code>ROWIDARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955BE0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00955BE<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#STRING"><code>STRING</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955720&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00955720&gt;   </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>dict</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#string_types"><code>string_types</code></a></strong> = <span title="{1028: &lt;psycopg2._psycopg.type object at 0x00955BE0&gt;, 1005: &lt;psycopg2._psycopg.type object at 0x00955A00&gt;, 16: &lt;psycopg2._psycopg.type object at 0x00955760&gt;, 17: &lt;psycopg2._psycopg.type object at 0x009558C0&gt;, 1042: &lt;psycopg2._psycopg.type object at 0x00955720&gt;, 1043: &lt;psycopg2._psycopg.type object at 0x00955720&gt;, 20: &lt;psycopg2._psycopg.type object at 0x009555C0&gt;, 21: &lt;psycopg2._psycopg.type object at 0x00955620&gt;, 23: &lt;psycopg2._psycopg.type object at 0x00955620&gt;, 25: &lt;psycopg2._psycopg.type object at 0x00955720&gt;, 26: &lt;psycopg2._psycopg.type object at 0x009559A0&gt;, 1182: &lt;psycopg2._psycopg.ty..."><code>{1028:&nbsp;&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#STRINGARRAY"><code>STRINGARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955A80&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00955A<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>int</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#threadsafety"><code>threadsafety</code></a></strong> = <span title="2">2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#TIME"><code>TIME</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955840&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00955840&gt;     </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#TIMEARRAY"><code>TIMEARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955B00&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00955B00<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#UNICODE"><code>UNICODE</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x009556C0&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x009556C0&gt;  </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>type</code></td>\r
+<td><strong><a href="psycopg2._psycopg-module.html#UNICODEARRAY"><code>UNICODEARRAY</code></a></strong> = <span title="&lt;psycopg2._psycopg.type object at 0x00955A40&gt;"><code>&lt;psycopg2._psycopg.type&nbsp;object&nbsp;at&nbsp;0x00955<span class="variable-ellipsis">...</span></code>\r
+</span></td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF VARIABLE DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Variable Details</th></tr>\r
+</table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="__version__"></a>\r
+<h3>__version__</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>str</code>\r
+\r
+      </dd>\r
+      <dt title="'2.0b7 (dt ext pq3)'">Value:</dt>\r
+      <dd title="'2.0b7 (dt ext pq3)'"><table><tr><td>\r
+<pre class="variable">\r
+<span class="variable-quote">'</span>2.0b7 (dt ext pq3)<span class="variable-quote">'</span>                                                   </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="adapters"></a>\r
+<h3>adapters</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>dict</code>\r
+\r
+      </dd>\r
+      <dt title="{(&lt;type 'bool'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.Boolean'&gt;, (&lt;type 'list'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.List'&gt;, (&lt;type 'datetime.datetime'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;built-in function TimestampFromPy&gt;, (&lt;type 'buffer'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.Binary'&gt;, (&lt;type 'unicode'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.QuotedString'&gt;, (&lt;type 'datetime.date'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;built-in function DateFromPy&gt;, (&lt;type 'datetime.time'&gt;, ...">Value:</dt>\r
+      <dd title="{(&lt;type 'bool'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.Boolean'&gt;, (&lt;type 'list'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.List'&gt;, (&lt;type 'datetime.datetime'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;built-in function TimestampFromPy&gt;, (&lt;type 'buffer'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.Binary'&gt;, (&lt;type 'unicode'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;type 'psycopg2._psycopg.QuotedString'&gt;, (&lt;type 'datetime.date'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;built-in function DateFromPy&gt;, (&lt;type 'datetime.time'&gt;, ..."><table><tr><td>\r
+<pre class="variable">\r
+{(&lt;type 'datetime.timedelta'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): <span class="variable-linewrap">\</span>\r
+&lt;built-in function IntervalFromPy&gt;,\r
+ (&lt;type 'datetime.date'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;buil<span class="variable-linewrap">\</span>\r
+t-in function DateFromPy&gt;,\r
+ (&lt;type 'datetime.time'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;buil<span class="variable-linewrap">\</span>\r
+t-in function TimeFromPy&gt;,\r
+ (&lt;type 'datetime.datetime'&gt;, &lt;type 'psycopg2._psycopg.ISQLQuote'&gt;): &lt;<span class="variable-linewrap">\</span>\r
+built-in function TimestampFromPy&gt;,\r
+<span class="variable-ellipsis">...</span>                                                                    </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="apilevel"></a>\r
+<h3>apilevel</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>str</code>\r
+\r
+      </dd>\r
+      <dt title="'2.0'">Value:</dt>\r
+      <dd title="'2.0'"><table><tr><td>\r
+<pre class="variable">\r
+<span class="variable-quote">'</span>2.0<span class="variable-quote">'</span>                                                                  </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="BINARY"></a>\r
+<h3>BINARY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x009558C0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x009558C0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x009558C0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="binary_types"></a>\r
+<h3>binary_types</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>dict</code>\r
+\r
+      </dd>\r
+      <dt title="{}">Value:</dt>\r
+      <dd title="{}"><table><tr><td>\r
+<pre class="variable">\r
+{}                                                                     </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="BINARYARRAY"></a>\r
+<h3>BINARYARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955B60&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955B60&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955B60&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="BOOLEAN"></a>\r
+<h3>BOOLEAN</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955760&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955760&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955760&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="BOOLEANARRAY"></a>\r
+<h3>BOOLEANARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955A20&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955A20&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955A20&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="DATE"></a>\r
+<h3>DATE</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x009558A0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x009558A0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x009558A0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="DATEARRAY"></a>\r
+<h3>DATEARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955AA0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955AA0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955AA0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="DATETIME"></a>\r
+<h3>DATETIME</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x009557C0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x009557C0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x009557C0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="DATETIMEARRAY"></a>\r
+<h3>DATETIMEARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955AC0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955AC0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955AC0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="DECIMAL"></a>\r
+<h3>DECIMAL</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955680&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955680&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955680&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="DECIMALARRAY"></a>\r
+<h3>DECIMALARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955260&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955260&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955260&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="encodings"></a>\r
+<h3>encodings</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>dict</code>\r
+\r
+      </dd>\r
+      <dt title="{'UTF8': 'utf_8', 'LATIN-1': 'latin_1', 'SQL_ASCII': 'ascii', 'UNICODE': 'utf_8', 'LATIN1': 'latin_1'}">Value:</dt>\r
+      <dd title="{'UTF8': 'utf_8', 'LATIN-1': 'latin_1', 'SQL_ASCII': 'ascii', 'UNICODE': 'utf_8', 'LATIN1': 'latin_1'}"><table><tr><td>\r
+<pre class="variable">\r
+{'LATIN-1': 'latin_1',\r
+ 'LATIN1': 'latin_1',\r
+ 'SQL_ASCII': 'ascii',\r
+ 'UNICODE': 'utf_8',\r
+ 'UTF8': 'utf_8'}                                                      </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="FLOAT"></a>\r
+<h3>FLOAT</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955660&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955660&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955660&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="FLOATARRAY"></a>\r
+<h3>FLOATARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x009559E0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x009559E0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x009559E0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="INTEGER"></a>\r
+<h3>INTEGER</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955620&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955620&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955620&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="INTEGERARRAY"></a>\r
+<h3>INTEGERARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955A00&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955A00&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955A00&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="INTERVAL"></a>\r
+<h3>INTERVAL</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955860&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955860&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955860&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="INTERVALARRAY"></a>\r
+<h3>INTERVALARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955BA0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955BA0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955BA0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="LONGINTEGER"></a>\r
+<h3>LONGINTEGER</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x009555C0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x009555C0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x009555C0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="LONGINTEGERARRAY"></a>\r
+<h3>LONGINTEGERARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955960&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955960&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955960&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="NUMBER"></a>\r
+<h3>NUMBER</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955540&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955540&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955540&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="paramstyle"></a>\r
+<h3>paramstyle</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>str</code>\r
+\r
+      </dd>\r
+      <dt title="'pyformat'">Value:</dt>\r
+      <dd title="'pyformat'"><table><tr><td>\r
+<pre class="variable">\r
+<span class="variable-quote">'</span>pyformat<span class="variable-quote">'</span>                                                             </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="PYDATE"></a>\r
+<h3>PYDATE</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955D00&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955D00&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955D00&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="PYDATETIME"></a>\r
+<h3>PYDATETIME</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955C00&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955C00&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955C00&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="PYINTERVAL"></a>\r
+<h3>PYINTERVAL</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955CE0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955CE0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955CE0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="PYTIME"></a>\r
+<h3>PYTIME</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955C40&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955C40&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955C40&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="ROWID"></a>\r
+<h3>ROWID</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x009559A0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x009559A0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x009559A0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="ROWIDARRAY"></a>\r
+<h3>ROWIDARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955BE0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955BE0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955BE0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="STRING"></a>\r
+<h3>STRING</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955720&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955720&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955720&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="string_types"></a>\r
+<h3>string_types</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>dict</code>\r
+\r
+      </dd>\r
+      <dt title="{1028: &lt;psycopg2._psycopg.type object at 0x00955BE0&gt;, 1005: &lt;psycopg2._psycopg.type object at 0x00955A00&gt;, 16: &lt;psycopg2._psycopg.type object at 0x00955760&gt;, 17: &lt;psycopg2._psycopg.type object at 0x009558C0&gt;, 1042: &lt;psycopg2._psycopg.type object at 0x00955720&gt;, 1043: &lt;psycopg2._psycopg.type object at 0x00955720&gt;, 20: &lt;psycopg2._psycopg.type object at 0x009555C0&gt;, 21: &lt;psycopg2._psycopg.type object at 0x00955620&gt;, 23: &lt;psycopg2._psycopg.type object at 0x00955620&gt;, 25: &lt;psycopg2._psycopg.type object at 0x00955720&gt;, 26: &lt;psycopg2._psycopg.type object at 0x009559A0&gt;, 1182: &lt;psycopg2._psycopg.ty...">Value:</dt>\r
+      <dd title="{1028: &lt;psycopg2._psycopg.type object at 0x00955BE0&gt;, 1005: &lt;psycopg2._psycopg.type object at 0x00955A00&gt;, 16: &lt;psycopg2._psycopg.type object at 0x00955760&gt;, 17: &lt;psycopg2._psycopg.type object at 0x009558C0&gt;, 1042: &lt;psycopg2._psycopg.type object at 0x00955720&gt;, 1043: &lt;psycopg2._psycopg.type object at 0x00955720&gt;, 20: &lt;psycopg2._psycopg.type object at 0x009555C0&gt;, 21: &lt;psycopg2._psycopg.type object at 0x00955620&gt;, 23: &lt;psycopg2._psycopg.type object at 0x00955620&gt;, 25: &lt;psycopg2._psycopg.type object at 0x00955720&gt;, 26: &lt;psycopg2._psycopg.type object at 0x009559A0&gt;, 1182: &lt;psycopg2._psycopg.ty..."><table><tr><td>\r
+<pre class="variable">\r
+{16: &lt;psycopg2._psycopg.type object at 0x00955760&gt;,\r
+ 17: &lt;psycopg2._psycopg.type object at 0x009558C0&gt;,\r
+ 18: &lt;psycopg2._psycopg.type object at 0x00955720&gt;,\r
+ 19: &lt;psycopg2._psycopg.type object at 0x00955720&gt;,\r
+ 20: &lt;psycopg2._psycopg.type object at 0x009555C0&gt;,\r
+ 21: &lt;psycopg2._psycopg.type object at 0x00955620&gt;,\r
+ 23: &lt;psycopg2._psycopg.type object at 0x00955620&gt;,\r
+ 25: &lt;psycopg2._psycopg.type object at 0x00955720&gt;,\r
+<span class="variable-ellipsis">...</span>                                                                    </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="STRINGARRAY"></a>\r
+<h3>STRINGARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955A80&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955A80&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955A80&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="threadsafety"></a>\r
+<h3>threadsafety</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>int</code>\r
+\r
+      </dd>\r
+      <dt title="2">Value:</dt>\r
+      <dd title="2"><table><tr><td>\r
+<pre class="variable">\r
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="TIME"></a>\r
+<h3>TIME</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955840&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955840&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955840&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="TIMEARRAY"></a>\r
+<h3>TIMEARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955B00&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955B00&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955B00&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="UNICODE"></a>\r
+<h3>UNICODE</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x009556C0&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x009556C0&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x009556C0&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="UNICODEARRAY"></a>\r
+<h3>UNICODEARRAY</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>type</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2._psycopg.type object at 0x00955A40&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2._psycopg.type object at 0x00955A40&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2._psycopg.type object at 0x00955A40&gt;                          </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Fri Jan 13 10:57:06 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.extensions-module.html b/psycopg2/doc/api/public/psycopg2.extensions-module.html
new file mode 100644 (file)
index 0000000..4e97448
--- /dev/null
@@ -0,0 +1,418 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.extensions</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Module&nbsp;extensions\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.extensions-module.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.extensions-module.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF MODULE DESCRIPTION =========== -->\r
+<h2 class="module">Module psycopg2.extensions</h2>\r
+\r
+<p>psycopg extensions to the DBAPI-2.0</p>\r
+<p>This module holds all the extensions to the DBAPI-2.0 provided by psycopg.</p>\r
+<ul class="rst-simple">\r
+<li><a href="../private/psycopg2._psycopg.connection-class.html" class="link"><code>connection</code></a> -- the new-type inheritable connection class</li>\r
+<li><a href="../private/psycopg2._psycopg.cursor-class.html" class="link"><code>cursor</code></a> -- the new-type inheritable cursor class</li>\r
+<li><a href="psycopg2.extensions-module.html#adapt" class="link"><code>adapt()</code></a> -- exposes the <a class="reference" href="http://www.python.org/peps/pep-0246.html">PEP-246</a> compatible adapting mechanism used\r
+by psycopg to adapt Python types to PostgreSQL ones</li>\r
+</ul>\r
+<hr/>\r
+\r
+<!-- =========== START OF FUNCTION SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Function Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">object</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.extensions-module.html#adapt" class="summary-sig-name"><code>adapt</code></a>(<span class="summary-sig-arg">obj</span>,\r
+          <span class="summary-sig-arg">protocol</span>,\r
+          <span class="summary-sig-arg">alternate</span>)</span></code>\r
+<br />\r
+adapt obj to given protocol</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new AsIs wrapper object</td>\r
+  <td><code><a name="AsIs"></a><span class="summary-sig"><span class="summary-sig-name">AsIs</span>(<span class="summary-sig-arg">obj</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new boolean value</td>\r
+  <td><code><a name="Boolean"></a><span class="summary-sig"><span class="summary-sig-name">Boolean</span>(<span class="summary-sig-arg">obj</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new wrapper</td>\r
+  <td><code><a name="DateFromPy"></a><span class="summary-sig"><span class="summary-sig-name">DateFromPy</span>(<span class="summary-sig-arg">datetime.date</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new wrapper</td>\r
+  <td><code><a name="IntervalFromPy"></a><span class="summary-sig"><span class="summary-sig-name">IntervalFromPy</span>(<span class="summary-sig-arg">datetime.timedelta</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new type object</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.extensions-module.html#new_type" class="summary-sig-name"><code>new_type</code></a>(<span class="summary-sig-arg">oids</span>,\r
+          <span class="summary-sig-arg">name</span>,\r
+          <span class="summary-sig-arg">adapter</span>)</span></code>\r
+<br />\r
+Create a new binding object.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new quoted string</td>\r
+  <td><code><a name="QuotedString"></a><span class="summary-sig"><span class="summary-sig-name">QuotedString</span>(<span class="summary-sig-arg">str</span>,\r
+          <span class="summary-sig-arg">enc</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.extensions-module.html#register_adapter" class="summary-sig-name"><code>register_adapter</code></a>(<span class="summary-sig-arg">typ</span>,\r
+          <span class="summary-sig-arg">callable</span>)</span></code>\r
+<br />\r
+Register 'callable' as an ISQLQuote adapter for type 'typ'.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">None</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.extensions-module.html#register_type" class="summary-sig-name"><code>register_type</code></a>(<span class="summary-sig-arg">obj</span>)</span></code>\r
+<br />\r
+register obj with psycopg type system</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new wrapper</td>\r
+  <td><code><a name="TimeFromPy"></a><span class="summary-sig"><span class="summary-sig-name">TimeFromPy</span>(<span class="summary-sig-arg">datetime.time</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new wrapper</td>\r
+  <td><code><a name="TimestampFromPy"></a><span class="summary-sig"><span class="summary-sig-name">TimestampFromPy</span>(<span class="summary-sig-arg">datetime.datetime</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF VARIABLE SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Variable Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>int</code></td>\r
+<td><strong><a href="psycopg2.extensions-module.html#ISOLATION_LEVEL_AUTOCOMMIT"><code>ISOLATION_LEVEL_AUTOCOMMIT</code></a></strong> = <span title="0">0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>int</code></td>\r
+<td><strong><a href="psycopg2.extensions-module.html#ISOLATION_LEVEL_READ_COMMITTED"><code>ISOLATION_LEVEL_READ_COMMITTED</code></a></strong> = <span title="1">1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>int</code></td>\r
+<td><strong><a href="psycopg2.extensions-module.html#ISOLATION_LEVEL_READ_UNCOMMITTED"><code>ISOLATION_LEVEL_READ_UNCOMMITTED</code></a></strong> = <span title="1">1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>int</code></td>\r
+<td><strong><a href="psycopg2.extensions-module.html#ISOLATION_LEVEL_REPEATABLE_READ"><code>ISOLATION_LEVEL_REPEATABLE_READ</code></a></strong> = <span title="2">2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>int</code></td>\r
+<td><strong><a href="psycopg2.extensions-module.html#ISOLATION_LEVEL_SERIALIZABLE"><code>ISOLATION_LEVEL_SERIALIZABLE</code></a></strong> = <span title="2">2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF FUNCTION DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Function Details</th></tr>\r
+</table>\r
+\r
+<a name="adapt"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">adapt</span>(<span class="sig-arg">obj</span>,\r
+          <span class="sig-arg">protocol</span>,\r
+          <span class="sig-arg">alternate</span>)</span>\r
+  </h3>\r
+<p>adapt obj to given protocol</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+object      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="AsIs"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">AsIs</span>(<span class="sig-arg">obj</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new AsIs wrapper object      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="Boolean"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">Boolean</span>(<span class="sig-arg">obj</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new boolean value      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="DateFromPy"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">DateFromPy</span>(<span class="sig-arg">datetime.date</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new wrapper      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="IntervalFromPy"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">IntervalFromPy</span>(<span class="sig-arg">datetime.timedelta</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new wrapper      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="new_type"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">new_type</span>(<span class="sig-arg">oids</span>,\r
+          <span class="sig-arg">name</span>,\r
+          <span class="sig-arg">adapter</span>)</span>\r
+  </h3>\r
+<p>Create a new binding object. The object can be used with the\r
+<a href="psycopg2.extensions-module.html#register_type" class="link"><code>register_type()</code></a> function to bind PostgreSQL objects to python objects.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Parameters:</dt>\r
+      <dd><code><strong class="pname">oids</strong></code> -\r
+ Tuple of <tt class="docutils literal"><span class="pre">oid</span></tt> of the PostgreSQL types to convert.\r
+      </dd>\r
+      <dd><code><strong class="pname">name</strong></code> -\r
+ Name for the new type\r
+      </dd>\r
+      <dd><code><strong class="pname">adapter</strong></code> -\r
+ Callable to perform type conversion.\r
+It must have the signature <tt class="docutils literal"><span class="pre">fun(value,</span> <span class="pre">cur)</span></tt> where <tt class="docutils literal"><span class="pre">value</span></tt> is\r
+the string representation returned by PostgreSQL (<code>None</code> if <tt class="docutils literal"><span class="pre">NULL</span></tt>)\r
+and <tt class="docutils literal"><span class="pre">cur</span></tt> is the cursor from which data are read.\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new type object      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="QuotedString"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">QuotedString</span>(<span class="sig-arg">str</span>,\r
+          <span class="sig-arg">enc</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new quoted string      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="register_adapter"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">register_adapter</span>(<span class="sig-arg">typ</span>,\r
+          <span class="sig-arg">callable</span>)</span>\r
+  </h3>\r
+<p>Register 'callable' as an ISQLQuote adapter for type 'typ'.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="register_type"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">register_type</span>(<span class="sig-arg">obj</span>)</span>\r
+  </h3>\r
+<p>register obj with psycopg type system</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Parameters:</dt>\r
+      <dd><code><strong class="pname">obj</strong></code> -\r
+ A type adapter created by <a href="psycopg2.extensions-module.html#new_type" class="link"><code>new_type()</code></a>\r
+      </dd>\r
+    </dl>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+None      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="TimeFromPy"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">TimeFromPy</span>(<span class="sig-arg">datetime.time</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new wrapper      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="TimestampFromPy"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">TimestampFromPy</span>(<span class="sig-arg">datetime.datetime</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new wrapper      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF VARIABLE DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Variable Details</th></tr>\r
+</table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="ISOLATION_LEVEL_AUTOCOMMIT"></a>\r
+<h3>ISOLATION_LEVEL_AUTOCOMMIT</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>int</code>\r
+\r
+      </dd>\r
+      <dt title="0">Value:</dt>\r
+      <dd title="0"><table><tr><td>\r
+<pre class="variable">\r
+0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="ISOLATION_LEVEL_READ_COMMITTED"></a>\r
+<h3>ISOLATION_LEVEL_READ_COMMITTED</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>int</code>\r
+\r
+      </dd>\r
+      <dt title="1">Value:</dt>\r
+      <dd title="1"><table><tr><td>\r
+<pre class="variable">\r
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="ISOLATION_LEVEL_READ_UNCOMMITTED"></a>\r
+<h3>ISOLATION_LEVEL_READ_UNCOMMITTED</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>int</code>\r
+\r
+      </dd>\r
+      <dt title="1">Value:</dt>\r
+      <dd title="1"><table><tr><td>\r
+<pre class="variable">\r
+1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="ISOLATION_LEVEL_REPEATABLE_READ"></a>\r
+<h3>ISOLATION_LEVEL_REPEATABLE_READ</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>int</code>\r
+\r
+      </dd>\r
+      <dt title="2">Value:</dt>\r
+      <dd title="2"><table><tr><td>\r
+<pre class="variable">\r
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="ISOLATION_LEVEL_SERIALIZABLE"></a>\r
+<h3>ISOLATION_LEVEL_SERIALIZABLE</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>int</code>\r
+\r
+      </dd>\r
+      <dt title="2">Value:</dt>\r
+      <dd title="2"><table><tr><td>\r
+<pre class="variable">\r
+2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:32 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.extras-module.html b/psycopg2/doc/api/public/psycopg2.extras-module.html
new file mode 100644 (file)
index 0000000..c99a0ce
--- /dev/null
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.extras</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Module&nbsp;extras\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.extras-module.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.extras-module.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF MODULE DESCRIPTION =========== -->\r
+<h2 class="module">Module psycopg2.extras</h2>\r
+\r
+<p>Miscellaneous goodies for psycopg2</p>\r
+<p>This module is a generic place used to hold little helper functions\r
+and classes untill a better place in the distribution is found.</p>\r
+<hr/>\r
+\r
+<!-- =========== START OF CLASSES =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Classes</th></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.extras.DictConnection-class.html"><code>DictConnection</code></a></strong></td>\r
+  <td>A connection that uses DictCursor automatically.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.extras.DictCursor-class.html"><code>DictCursor</code></a></strong></td>\r
+  <td>A cursor that keeps a list of column name -&gt; index mappings.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.extras.DictRow-class.html"><code>DictRow</code></a></strong></td>\r
+  <td>A row object that allow by-colun-name access to data.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.extras.SQL_IN-class.html"><code>SQL_IN</code></a></strong></td>\r
+  <td>Adapt any iterable to an SQL quotable object.</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:32 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.extras.DictConnection-class.html b/psycopg2/doc/api/public/psycopg2.extras.DictConnection-class.html
new file mode 100644 (file)
index 0000000..988bd79
--- /dev/null
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.extras.DictConnection</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.extras-module.html">Module&nbsp;extras</a> ::\r
+        Class&nbsp;DictConnection\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.extras.DictConnection-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.extras.DictConnection-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type DictConnection</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+    \r
+         |    \r
+<a href="../private/psycopg2._psycopg.connection-class.html"><code>connection</code></a> --+\r
+             |\r
+            <strong class="uidshort">DictConnection</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>A connection that uses DictCursor automatically.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="cursor"></a><span class="summary-sig"><span class="summary-sig-name">cursor</span>(<span class="summary-sig-arg">self</span>)</span></code>\r
+</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="cursor"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">cursor</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="../private/psycopg2._psycopg.connection-class.html#cursor"><code>psycopg2._psycopg.connection.cursor</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:31 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.extras.DictCursor-class.html b/psycopg2/doc/api/public/psycopg2.extras.DictCursor-class.html
new file mode 100644 (file)
index 0000000..d546d3a
--- /dev/null
@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.extras.DictCursor</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.extras-module.html">Module&nbsp;extras</a> ::\r
+        Class&nbsp;DictCursor\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.extras.DictCursor-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.extras.DictCursor-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type DictCursor</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+    \r
+         |    \r
+    <a href="../private/psycopg2._psycopg.cursor-class.html"><code>cursor</code></a> --+\r
+             |\r
+            <strong class="uidshort">DictCursor</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>A cursor that keeps a list of column name -&gt; index mappings.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="callproc"></a><span class="summary-sig"><span class="summary-sig-name">callproc</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">procname</span>,\r
+          <span class="summary-sig-arg">vars</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="execute"></a><span class="summary-sig"><span class="summary-sig-name">execute</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">query</span>,\r
+          <span class="summary-sig-arg">vars</span>,\r
+          <span class="summary-sig-arg">async</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="fetchall"></a><span class="summary-sig"><span class="summary-sig-name">fetchall</span>(<span class="summary-sig-arg">self</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="fetchmany"></a><span class="summary-sig"><span class="summary-sig-name">fetchmany</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">size</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="fetchone"></a><span class="summary-sig"><span class="summary-sig-name">fetchone</span>(<span class="summary-sig-arg">self</span>)</span></code>\r
+</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="callproc"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">callproc</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">procname</span>,\r
+          <span class="sig-arg">vars</span>=<span class="sig-default">None</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="../private/psycopg2._psycopg.cursor-class.html#callproc"><code>psycopg2._psycopg.cursor.callproc</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="execute"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">execute</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">query</span>,\r
+          <span class="sig-arg">vars</span>=<span class="sig-default">None</span>,\r
+          <span class="sig-arg">async</span>=<span class="sig-default">0</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="../private/psycopg2._psycopg.cursor-class.html#execute"><code>psycopg2._psycopg.cursor.execute</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="fetchall"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">fetchall</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="../private/psycopg2._psycopg.cursor-class.html#fetchall"><code>psycopg2._psycopg.cursor.fetchall</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="fetchmany"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">fetchmany</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">size</span>=<span class="sig-default">None</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="../private/psycopg2._psycopg.cursor-class.html#fetchmany"><code>psycopg2._psycopg.cursor.fetchmany</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="fetchone"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">fetchone</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="../private/psycopg2._psycopg.cursor-class.html#fetchone"><code>psycopg2._psycopg.cursor.fetchone</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:32 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.extras.DictRow-class.html b/psycopg2/doc/api/public/psycopg2.extras.DictRow-class.html
new file mode 100644 (file)
index 0000000..e278ca3
--- /dev/null
@@ -0,0 +1,376 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.extras.DictRow</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.extras-module.html">Module&nbsp;extras</a> ::\r
+        Class&nbsp;DictRow\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.extras.DictRow-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.extras.DictRow-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type DictRow</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+    \r
+         |    \r
+      <a href="__builtin__.list-class.html"><code>list</code></a> --+\r
+             |\r
+            <strong class="uidshort">DictRow</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>A row object that allow by-colun-name access to data.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__init__"></a><span class="summary-sig"><span class="summary-sig-name">__init__</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">cursor</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__getitem__"></a><span class="summary-sig"><span class="summary-sig-name">__getitem__</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">x</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="get"></a><span class="summary-sig"><span class="summary-sig-name">get</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">default</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="has_key"></a><span class="summary-sig"><span class="summary-sig-name">has_key</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">x</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="items"></a><span class="summary-sig"><span class="summary-sig-name">items</span>(<span class="summary-sig-arg">self</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="keys"></a><span class="summary-sig"><span class="summary-sig-name">keys</span>(<span class="summary-sig-arg">self</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="values"></a><span class="summary-sig"><span class="summary-sig-name">values</span>(<span class="summary-sig-arg">self</span>)</span></code>\r
+</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from list</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__add__" class="summary-sig-name"><code>__add__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x+y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__contains__" class="summary-sig-name"><code>__contains__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return y in x...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__delitem__" class="summary-sig-name"><code>__delitem__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return del x[y]...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__delslice__" class="summary-sig-name"><code>__delslice__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">i</span>,\r
+          <span class="summary-sig-arg">j</span>)</span></code>\r
+<br />\r
+Use of negative indices is not supported.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__eq__" class="summary-sig-name"><code>__eq__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x==y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__ge__" class="summary-sig-name"><code>__ge__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x&gt;=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__getslice__" class="summary-sig-name"><code>__getslice__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">i</span>,\r
+          <span class="summary-sig-arg">j</span>)</span></code>\r
+<br />\r
+Use of negative indices is not supported.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__gt__" class="summary-sig-name"><code>__gt__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x&gt;y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__iadd__" class="summary-sig-name"><code>__iadd__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x+=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__imul__" class="summary-sig-name"><code>__imul__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x*=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__iter__" class="summary-sig-name"><code>__iter__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return iter(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__le__" class="summary-sig-name"><code>__le__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x&lt;=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__len__" class="summary-sig-name"><code>__len__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return len(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__lt__" class="summary-sig-name"><code>__lt__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x&lt;y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__mul__" class="summary-sig-name"><code>__mul__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">n</span>)</span></code>\r
+<br />\r
+Return x*n...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__ne__" class="summary-sig-name"><code>__ne__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x!=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__new__" class="summary-sig-name"><code>__new__</code></a>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__rmul__" class="summary-sig-name"><code>__rmul__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">n</span>)</span></code>\r
+<br />\r
+Return n*x...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__setitem__" class="summary-sig-name"><code>__setitem__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">i</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Return x[i]=y...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#__setslice__" class="summary-sig-name"><code>__setslice__</code></a>(<span class="summary-sig-arg">x</span>,\r
+          <span class="summary-sig-arg">i</span>,\r
+          <span class="summary-sig-arg">j</span>,\r
+          <span class="summary-sig-arg">y</span>)</span></code>\r
+<br />\r
+Use  of negative indices is not supported.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#append" class="summary-sig-name"><code>append</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">object</span>)</span></code>\r
+<br />\r
+append object to end</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#count" class="summary-sig-name"><code>count</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">value</span>)</span></code>\r
+<br />\r
+return number of occurrences of value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#extend" class="summary-sig-name"><code>extend</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">iterable</span>)</span></code>\r
+<br />\r
+extend list by appending elements from the iterable</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#index" class="summary-sig-name"><code>index</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+L.index(value, [start, [stop]]) -&gt; integer -- return first index of value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#insert" class="summary-sig-name"><code>insert</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">index</span>,\r
+          <span class="summary-sig-arg">object</span>)</span></code>\r
+<br />\r
+insert object before index</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#pop" class="summary-sig-name"><code>pop</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">index</span>)</span></code>\r
+<br />\r
+remove and return item at index (default last)</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#remove" class="summary-sig-name"><code>remove</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">value</span>)</span></code>\r
+<br />\r
+remove first occurrence of value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#reverse" class="summary-sig-name"><code>reverse</code></a>(<span class="summary-sig-arg">L</span>)</span></code>\r
+<br />\r
+reverse <em>IN PLACE</em></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.list-class.html#sort" class="summary-sig-name"><code>sort</code></a>(<span class="summary-sig-arg">L</span>,\r
+          <span class="summary-sig-arg">cmpfunc</span>)</span></code>\r
+<br />\r
+stable sort <em>IN PLACE</em>; cmpfunc(x, y) -&gt; -1, 0, 1</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__init__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">cursor</span>)</span>\r
+    <br /><em class="fname">(Constructor)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.list-class.html#__init__"><code>__builtin__.list.__init__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="__getitem__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__getitem__</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">x</span>)</span>\r
+    <br /><em class="fname">(Indexing operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.list-class.html#__getitem__"><code>__builtin__.list.__getitem__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="get"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">get</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">x</span>,\r
+          <span class="sig-arg">default</span>=<span class="sig-default">None</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="has_key"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">has_key</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">x</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="items"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">items</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="keys"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">keys</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="values"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">values</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.extras.SQL_IN-class.html b/psycopg2/doc/api/public/psycopg2.extras.SQL_IN-class.html
new file mode 100644 (file)
index 0000000..0b05cd2
--- /dev/null
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.extras.SQL_IN</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.extras-module.html">Module&nbsp;extras</a> ::\r
+        Class&nbsp;SQL_IN\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.extras.SQL_IN-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.extras.SQL_IN-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type SQL_IN</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+\r
+         |\r
+        <strong class="uidshort">SQL_IN</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>Adapt any iterable to an SQL quotable object.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__init__"></a><span class="summary-sig"><span class="summary-sig-name">__init__</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">seq</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="getquoted"></a><span class="summary-sig"><span class="summary-sig-name">__str__</span>(<span class="summary-sig-arg">self</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="getquoted"></a><span class="summary-sig"><span class="summary-sig-name">getquoted</span>(<span class="summary-sig-arg">self</span>)</span></code>\r
+</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__new__" class="summary-sig-name"><code>__new__</code></a>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__init__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">seq</span>)</span>\r
+    <br /><em class="fname">(Constructor)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__init__"><code>__builtin__.object.__init__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="getquoted"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">self</span>)</span>\r
+    <br /><em class="fname">(Informal representation operator)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="getquoted"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">getquoted</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:35 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.pool-module.html b/psycopg2/doc/api/public/psycopg2.pool-module.html
new file mode 100644 (file)
index 0000000..34fbebd
--- /dev/null
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.pool</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Module&nbsp;pool\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.pool-module.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.pool-module.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF MODULE DESCRIPTION =========== -->\r
+<h2 class="module">Module psycopg2.pool</h2>\r
+\r
+<p>Connection pooling for psycopg2</p>\r
+<p>This module implements thread-safe (and not) connection pools.</p>\r
+<hr/>\r
+\r
+<!-- =========== START OF CLASSES =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Classes</th></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.pool.AbstractConnectionPool-class.html"><code>AbstractConnectionPool</code></a></strong></td>\r
+  <td>Generic key-based pooling code.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.pool.PersistentConnectionPool-class.html"><code>PersistentConnectionPool</code></a></strong></td>\r
+  <td>A pool that assigns persistent connections to different threads.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.pool.SimpleConnectionPool-class.html"><code>SimpleConnectionPool</code></a></strong></td>\r
+  <td>A connection pool that can't be shared across different threads.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.pool.ThreadedConnectionPool-class.html"><code>ThreadedConnectionPool</code></a></strong></td>\r
+  <td>A connection pool that works with the threading module.</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF EXCEPTIONS =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Exceptions</th></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.pool.PoolError-class.html"><code>PoolError</code></a></strong></td>\r
+  <td>&nbsp;</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF FUNCTION SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Function Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="dbg"></a><span class="summary-sig"><span class="summary-sig-name">dbg</span>(<span class="summary-sig-vararg">*args</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF FUNCTION DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Function Details</th></tr>\r
+</table>\r
+\r
+<a name="dbg"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">dbg</span>(<span class="sig-vararg">*args</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:34 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.pool.AbstractConnectionPool-class.html b/psycopg2/doc/api/public/psycopg2.pool.AbstractConnectionPool-class.html
new file mode 100644 (file)
index 0000000..41d63b9
--- /dev/null
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.pool.AbstractConnectionPool</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.pool-module.html">Module&nbsp;pool</a> ::\r
+        Class&nbsp;AbstractConnectionPool\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.pool.AbstractConnectionPool-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.pool.AbstractConnectionPool-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type AbstractConnectionPool</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+\r
+         |\r
+        <strong class="uidshort">AbstractConnectionPool</strong>\r
+</pre><br />\r
+\r
+<dl><dt>Known Subclasses:</dt>\r
+<dd>\r
+    <a href="psycopg2.pool.PersistentConnectionPool-class.html"><code>PersistentConnectionPool</code></a>,\r
+    <a href="psycopg2.pool.SimpleConnectionPool-class.html"><code>SimpleConnectionPool</code></a>,\r
+    <a href="psycopg2.pool.ThreadedConnectionPool-class.html"><code>ThreadedConnectionPool</code></a></dd></dl>\r
+\r
+<hr/>\r
+\r
+<p>Generic key-based pooling code.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.pool.AbstractConnectionPool-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">minconn</span>,\r
+          <span class="summary-sig-arg">maxconn</span>,\r
+          <span class="summary-sig-vararg">*args</span>,\r
+          <span class="summary-sig-kwarg">**kwargs</span>)</span></code>\r
+<br />\r
+Initialize the connection pool.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__new__" class="summary-sig-name"><code>__new__</code></a>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__init__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">minconn</span>,\r
+          <span class="sig-arg">maxconn</span>,\r
+          <span class="sig-vararg">*args</span>,\r
+          <span class="sig-kwarg">**kwargs</span>)</span>\r
+    <br /><em class="fname">(Constructor)</em>\r
+  </h3>\r
+<p>Initialize the connection pool.</p>\r
+<p>New 'minconn' connections are created immediately calling 'connfunc'\r
+with given parameters. The connection pool will support a maximum of\r
+about 'maxconn' connections.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__init__"><code>__builtin__.object.__init__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:34 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.pool.PersistentConnectionPool-class.html b/psycopg2/doc/api/public/psycopg2.pool.PersistentConnectionPool-class.html
new file mode 100644 (file)
index 0000000..954b8b5
--- /dev/null
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.pool.PersistentConnectionPool</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.pool-module.html">Module&nbsp;pool</a> ::\r
+        Class&nbsp;PersistentConnectionPool\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.pool.PersistentConnectionPool-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.pool.PersistentConnectionPool-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type PersistentConnectionPool</h2>\r
+\r
+<pre class="base-tree">\r
+            <a href="__builtin__.object-class.html"><code>object</code></a> --+    \r
+                     |    \r
+<a href="psycopg2.pool.AbstractConnectionPool-class.html"><code>AbstractConnectionPool</code></a> --+\r
+                         |\r
+                        <strong class="uidshort">PersistentConnectionPool</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>A pool that assigns persistent connections to different threads.</p>\r
+<p>Note that this connection pool generates by itself the required keys\r
+using the current thread id.  This means that untill a thread put away\r
+a connection it will always get the same connection object by successive\r
+.getconn() calls. This also means that a thread can't use more than one\r
+single connection from the pool.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.pool.PersistentConnectionPool-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">minconn</span>,\r
+          <span class="summary-sig-arg">maxconn</span>,\r
+          <span class="summary-sig-vararg">*args</span>,\r
+          <span class="summary-sig-kwarg">**kwargs</span>)</span></code>\r
+<br />\r
+Initialize the threading lock.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.pool.PersistentConnectionPool-class.html#closeall" class="summary-sig-name"><code>closeall</code></a>(<span class="summary-sig-arg">self</span>)</span></code>\r
+<br />\r
+Close all connections (even the one currently in use.)</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.pool.PersistentConnectionPool-class.html#getconn" class="summary-sig-name"><code>getconn</code></a>(<span class="summary-sig-arg">self</span>)</span></code>\r
+<br />\r
+Generate thread id and return a connection.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.pool.PersistentConnectionPool-class.html#putconn" class="summary-sig-name"><code>putconn</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">conn</span>,\r
+          <span class="summary-sig-arg">close</span>)</span></code>\r
+<br />\r
+Put away an unused connection.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__new__" class="summary-sig-name"><code>__new__</code></a>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__init__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">minconn</span>,\r
+          <span class="sig-arg">maxconn</span>,\r
+          <span class="sig-vararg">*args</span>,\r
+          <span class="sig-kwarg">**kwargs</span>)</span>\r
+    <br /><em class="fname">(Constructor)</em>\r
+  </h3>\r
+<p>Initialize the threading lock.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="psycopg2.pool.AbstractConnectionPool-class.html#__init__"><code>psycopg2.pool.AbstractConnectionPool.__init__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="closeall"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">closeall</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+<p>Close all connections (even the one currently in use.)</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="getconn"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">getconn</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+<p>Generate thread id and return a connection.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="putconn"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">putconn</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">conn</span>=<span class="sig-default">None</span>,\r
+          <span class="sig-arg">close</span>=<span class="sig-default">False</span>)</span>\r
+  </h3>\r
+<p>Put away an unused connection.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:34 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.pool.PoolError-class.html b/psycopg2/doc/api/public/psycopg2.pool.PoolError-class.html
new file mode 100644 (file)
index 0000000..89cd4f7
--- /dev/null
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.pool.PoolError</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.pool-module.html">Module&nbsp;pool</a> ::\r
+        Class&nbsp;PoolError\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.pool.PoolError-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.pool.PoolError-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Class PoolError</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="exceptions.Exception-class.html"><code>Exception</code></a> --+        \r
+            |        \r
+<a href="exceptions.StandardError-class.html"><code>StandardError</code></a> --+    \r
+                |    \r
+            <a href="psycopg2.Error-class.html"><code>Error</code></a> --+\r
+                    |\r
+                   <strong class="uidshort">PoolError</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from Exception</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__getitem__" class="summary-sig-name"><code>__getitem__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="exceptions.Exception-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:34 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.pool.SimpleConnectionPool-class.html b/psycopg2/doc/api/public/psycopg2.pool.SimpleConnectionPool-class.html
new file mode 100644 (file)
index 0000000..ea8f605
--- /dev/null
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.pool.SimpleConnectionPool</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.pool-module.html">Module&nbsp;pool</a> ::\r
+        Class&nbsp;SimpleConnectionPool\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.pool.SimpleConnectionPool-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.pool.SimpleConnectionPool-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type SimpleConnectionPool</h2>\r
+\r
+<pre class="base-tree">\r
+            <a href="__builtin__.object-class.html"><code>object</code></a> --+    \r
+                     |    \r
+<a href="psycopg2.pool.AbstractConnectionPool-class.html"><code>AbstractConnectionPool</code></a> --+\r
+                         |\r
+                        <strong class="uidshort">SimpleConnectionPool</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>A connection pool that can't be shared across different threads.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from AbstractConnectionPool</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.pool.AbstractConnectionPool-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">minconn</span>,\r
+          <span class="summary-sig-arg">maxconn</span>,\r
+          <span class="summary-sig-vararg">*args</span>,\r
+          <span class="summary-sig-kwarg">**kwargs</span>)</span></code>\r
+<br />\r
+Initialize the connection pool.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__new__" class="summary-sig-name"><code>__new__</code></a>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:35 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.pool.ThreadedConnectionPool-class.html b/psycopg2/doc/api/public/psycopg2.pool.ThreadedConnectionPool-class.html
new file mode 100644 (file)
index 0000000..64c95a9
--- /dev/null
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.pool.ThreadedConnectionPool</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.pool-module.html">Module&nbsp;pool</a> ::\r
+        Class&nbsp;ThreadedConnectionPool\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.pool.ThreadedConnectionPool-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.pool.ThreadedConnectionPool-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type ThreadedConnectionPool</h2>\r
+\r
+<pre class="base-tree">\r
+            <a href="__builtin__.object-class.html"><code>object</code></a> --+    \r
+                     |    \r
+<a href="psycopg2.pool.AbstractConnectionPool-class.html"><code>AbstractConnectionPool</code></a> --+\r
+                         |\r
+                        <strong class="uidshort">ThreadedConnectionPool</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>A connection pool that works with the threading module.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.pool.ThreadedConnectionPool-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">minconn</span>,\r
+          <span class="summary-sig-arg">maxconn</span>,\r
+          <span class="summary-sig-vararg">*args</span>,\r
+          <span class="summary-sig-kwarg">**kwargs</span>)</span></code>\r
+<br />\r
+Initialize the threading lock.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.pool.ThreadedConnectionPool-class.html#closeall" class="summary-sig-name"><code>closeall</code></a>(<span class="summary-sig-arg">self</span>)</span></code>\r
+<br />\r
+Close all connections (even the one currently in use.)</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.pool.ThreadedConnectionPool-class.html#getconn" class="summary-sig-name"><code>getconn</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">key</span>)</span></code>\r
+<br />\r
+Get a free connection and assign it to 'key' if not None.</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="psycopg2.pool.ThreadedConnectionPool-class.html#putconn" class="summary-sig-name"><code>putconn</code></a>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">conn</span>,\r
+          <span class="summary-sig-arg">key</span>,\r
+          <span class="summary-sig-arg">close</span>)</span></code>\r
+<br />\r
+Put away an unused connection.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__new__" class="summary-sig-name"><code>__new__</code></a>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__init__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">minconn</span>,\r
+          <span class="sig-arg">maxconn</span>,\r
+          <span class="sig-vararg">*args</span>,\r
+          <span class="sig-kwarg">**kwargs</span>)</span>\r
+    <br /><em class="fname">(Constructor)</em>\r
+  </h3>\r
+<p>Initialize the threading lock.</p>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="psycopg2.pool.AbstractConnectionPool-class.html#__init__"><code>psycopg2.pool.AbstractConnectionPool.__init__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="closeall"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">closeall</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+<p>Close all connections (even the one currently in use.)</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="getconn"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">getconn</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">key</span>=<span class="sig-default">None</span>)</span>\r
+  </h3>\r
+<p>Get a free connection and assign it to 'key' if not None.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="putconn"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">putconn</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">conn</span>=<span class="sig-default">None</span>,\r
+          <span class="sig-arg">key</span>=<span class="sig-default">None</span>,\r
+          <span class="sig-arg">close</span>=<span class="sig-default">False</span>)</span>\r
+  </h3>\r
+<p>Put away an unused connection.</p>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:35 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.psycopg1-module.html b/psycopg2/doc/api/public/psycopg2.psycopg1-module.html
new file mode 100644 (file)
index 0000000..18a9a75
--- /dev/null
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.psycopg1</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Module&nbsp;psycopg1\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.psycopg1-module.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.psycopg1-module.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF MODULE DESCRIPTION =========== -->\r
+<h2 class="module">Module psycopg2.psycopg1</h2>\r
+\r
+<p>psycopg 1.1.x compatibility module</p>\r
+<p>This module uses the new style connection and cursor types to build a psycopg\r
+1.1.1.x compatibility layer. It should be considered a temporary hack to run\r
+old code while porting to psycopg 2. Import it as follows:</p>\r
+<pre class="literal-block">\r
+from psycopg2 import psycopg1 as psycopg\r
+</pre>\r
+<hr/>\r
+\r
+<!-- =========== START OF CLASSES =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Classes</th></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.psycopg1.connection-class.html"><code>connection</code></a></strong></td>\r
+  <td>psycopg 1.1.x connection.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.psycopg1.cursor-class.html"><code>cursor</code></a></strong></td>\r
+  <td>psycopg 1.1.x cursor.</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF FUNCTION SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Function Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new psycopg 1.1.x compatible connection object</td>\r
+  <td><code><a name="connect"></a><span class="summary-sig"><span class="summary-sig-name">connect</span>(<span class="summary-sig-arg">dsn</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF FUNCTION DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Function Details</th></tr>\r
+</table>\r
+\r
+<a name="connect"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">connect</span>(<span class="sig-arg">dsn</span>,\r
+          <span class="sig-vararg">...</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new psycopg 1.1.x compatible connection object      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.psycopg1.connection-class.html b/psycopg2/doc/api/public/psycopg2.psycopg1.connection-class.html
new file mode 100644 (file)
index 0000000..9b5b429
--- /dev/null
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.psycopg1.connection</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.psycopg1-module.html">Module&nbsp;psycopg1</a> ::\r
+        Class&nbsp;connection\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.psycopg1.connection-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.psycopg1.connection-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type connection</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+    \r
+         |    \r
+<a href="../private/psycopg2._psycopg.connection-class.html"><code>connection</code></a> --+\r
+             |\r
+            <strong class="uidshort">connection</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>psycopg 1.1.x connection.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">switch autocommit on (1) or off (0)</td>\r
+  <td><code><a name="autocommit"></a><span class="summary-sig"><span class="summary-sig-name">autocommit</span>(<span class="summary-sig-arg">on_off</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">new psycopg 1.1.x compatible cursor object</td>\r
+  <td><code><a name="cursor"></a><span class="summary-sig"><span class="summary-sig-name">cursor</span>()</span></code>\r
+</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="autocommit"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">autocommit</span>(<span class="sig-arg">on_off</span>=<span class="sig-default">1</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+switch autocommit on (1) or off (0)      </dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="cursor"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">cursor</span>()</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Returns:</dt>\r
+      <dd>\r
+new psycopg 1.1.x compatible cursor object      </dd>\r
+    </dl>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="../private/psycopg2._psycopg.connection-class.html#cursor"><code>psycopg2._psycopg.connection.cursor</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.psycopg1.cursor-class.html b/psycopg2/doc/api/public/psycopg2.psycopg1.cursor-class.html
new file mode 100644 (file)
index 0000000..f80677d
--- /dev/null
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.psycopg1.cursor</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.psycopg1-module.html">Module&nbsp;psycopg1</a> ::\r
+        Class&nbsp;cursor\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.psycopg1.cursor-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.psycopg1.cursor-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type cursor</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+    \r
+         |    \r
+    <a href="../private/psycopg2._psycopg.cursor-class.html"><code>cursor</code></a> --+\r
+             |\r
+            <strong class="uidshort">cursor</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>psycopg 1.1.x cursor.</p>\r
+<p>Note that this cursor implements the exact procedure used by psycopg 1 to\r
+build dictionaries out of result rows. The DictCursor in the\r
+psycopg.extras modules implements a much better and faster algorithm.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="dictfetchall"></a><span class="summary-sig"><span class="summary-sig-name">dictfetchall</span>(<span class="summary-sig-arg">self</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="dictfetchmany"></a><span class="summary-sig"><span class="summary-sig-name">dictfetchmany</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">size</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="dictfetchone"></a><span class="summary-sig"><span class="summary-sig-name">dictfetchone</span>(<span class="summary-sig-arg">self</span>)</span></code>\r
+</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="dictfetchall"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">dictfetchall</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="dictfetchmany"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">dictfetchmany</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">size</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="dictfetchone"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">dictfetchone</span>(<span class="sig-arg">self</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:33 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.tz-module.html b/psycopg2/doc/api/public/psycopg2.tz-module.html
new file mode 100644 (file)
index 0000000..192ac5e
--- /dev/null
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.tz</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        Module&nbsp;tz\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.tz-module.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.tz-module.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF MODULE DESCRIPTION =========== -->\r
+<h2 class="module">Module psycopg2.tz</h2>\r
+\r
+<p>tzinfo implementations for psycopg2</p>\r
+<p>This module holds two different tzinfo implementations that can be used as\r
+the 'tzinfo' argument to datetime constructors, directly passed to psycopg\r
+functions or used to set the .tzinfo_factory attribute in cursors.</p>\r
+<hr/>\r
+\r
+<!-- =========== START OF CLASSES =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Classes</th></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.tz.FixedOffsetTimezone-class.html"><code>FixedOffsetTimezone</code></a></strong></td>\r
+  <td>Fixed offset in minutes east from UTC.</td></tr>\r
+<tr><td width="15%">\r
+  <strong><a href="psycopg2.tz.LocalTimezone-class.html"><code>LocalTimezone</code></a></strong></td>\r
+  <td>Platform idea of local timezone.</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF VARIABLE SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Variable Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>timedelta</code></td>\r
+<td><strong><a href="psycopg2.tz-module.html#DSTDIFF"><code>DSTDIFF</code></a></strong> = <span title="datetime.timedelta(0, 3600)"><code>datetime.timedelta(0,&nbsp;3600)                    </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>LocalTimezone</code></td>\r
+<td><strong><a href="psycopg2.tz-module.html#LOCAL"><code>LOCAL</code></a></strong> = <span title="&lt;psycopg2.tz.LocalTimezone object at 0x00847090&gt;"><code>&lt;psycopg2.tz.LocalTimezone&nbsp;object&nbsp;at&nbsp;0x00847090&gt; </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>timedelta</code></td>\r
+<td><strong><a href="psycopg2.tz-module.html#STDOFFSET"><code>STDOFFSET</code></a></strong> = <span title="datetime.timedelta(0, 3600)"><code>datetime.timedelta(0,&nbsp;3600)                  </code>\r
+</span></td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="vtype"><code>timedelta</code></td>\r
+<td><strong><a href="psycopg2.tz-module.html#ZERO"><code>ZERO</code></a></strong> = <span title="datetime.timedelta(0)"><code>datetime.timedelta(0)                             </code>\r
+</span></td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF VARIABLE DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Variable Details</th></tr>\r
+</table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="DSTDIFF"></a>\r
+<h3>DSTDIFF</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>timedelta</code>\r
+\r
+      </dd>\r
+      <dt title="datetime.timedelta(0, 3600)">Value:</dt>\r
+      <dd title="datetime.timedelta(0, 3600)"><table><tr><td>\r
+<pre class="variable">\r
+datetime.timedelta(0, 3600)                                            </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="LOCAL"></a>\r
+<h3>LOCAL</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>LocalTimezone</code>\r
+\r
+      </dd>\r
+      <dt title="&lt;psycopg2.tz.LocalTimezone object at 0x00847090&gt;">Value:</dt>\r
+      <dd title="&lt;psycopg2.tz.LocalTimezone object at 0x00847090&gt;"><table><tr><td>\r
+<pre class="variable">\r
+&lt;psycopg2.tz.LocalTimezone object at 0x00847090&gt;                       </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="STDOFFSET"></a>\r
+<h3>STDOFFSET</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>timedelta</code>\r
+\r
+      </dd>\r
+      <dt title="datetime.timedelta(0, 3600)">Value:</dt>\r
+      <dd title="datetime.timedelta(0, 3600)"><table><tr><td>\r
+<pre class="variable">\r
+datetime.timedelta(0, 3600)                                            </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>\r
+<a name="ZERO"></a>\r
+<h3>ZERO</h3>\r
+<dl>\r
+  <dt></dt>\r
+  <dd>\r
+    <dl>\r
+      <dt>Type:</dt>\r
+      <dd>\r
+          <code>timedelta</code>\r
+\r
+      </dd>\r
+      <dt title="datetime.timedelta(0)">Value:</dt>\r
+      <dd title="datetime.timedelta(0)"><table><tr><td>\r
+<pre class="variable">\r
+datetime.timedelta(0)                                                  </pre>\r
+        </td></tr></table></dd>\r
+    </dl>\r
+  </dd>\r
+</dl></td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:37 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.tz.FixedOffsetTimezone-class.html b/psycopg2/doc/api/public/psycopg2.tz.FixedOffsetTimezone-class.html
new file mode 100644 (file)
index 0000000..71145dd
--- /dev/null
@@ -0,0 +1,213 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.tz.FixedOffsetTimezone</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.tz-module.html">Module&nbsp;tz</a> ::\r
+        Class&nbsp;FixedOffsetTimezone\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.tz.FixedOffsetTimezone-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.tz.FixedOffsetTimezone-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type FixedOffsetTimezone</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+    \r
+         |    \r
+    <a href="datetime.tzinfo-class.html"><code>tzinfo</code></a> --+\r
+             |\r
+            <strong class="uidshort">FixedOffsetTimezone</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>Fixed offset in minutes east from UTC.</p>\r
+<p>This is exactly the implementation found in Python 2.3.x documentation,\r
+with a small change to the __init__ method to allow for pickling and a\r
+default name in the form 'sHH:MM' ('s' is the sign.)</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="__init__"></a><span class="summary-sig"><span class="summary-sig-name">__init__</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">offset</span>,\r
+          <span class="summary-sig-arg">name</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="dst"></a><span class="summary-sig"><span class="summary-sig-name">dst</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">dt</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="tzname"></a><span class="summary-sig"><span class="summary-sig-name">tzname</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">dt</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="utcoffset"></a><span class="summary-sig"><span class="summary-sig-name">utcoffset</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">dt</span>)</span></code>\r
+</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from tzinfo</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#__new__" class="summary-sig-name"><code>__new__</code></a>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+-&gt; (cls, state)</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#fromutc" class="summary-sig-name"><code>fromutc</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+datetime in UTC -&gt; datetime in local time.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="__init__"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">offset</span>=<span class="sig-default">None</span>,\r
+          <span class="sig-arg">name</span>=<span class="sig-default">None</span>)</span>\r
+    <br /><em class="fname">(Constructor)</em>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="__builtin__.object-class.html#__init__"><code>__builtin__.object.__init__</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="dst"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">dst</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">dt</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="datetime.tzinfo-class.html#dst"><code>datetime.tzinfo.dst</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="tzname"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">tzname</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">dt</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="datetime.tzinfo-class.html#tzname"><code>datetime.tzinfo.tzname</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="utcoffset"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">utcoffset</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">dt</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="datetime.tzinfo-class.html#utcoffset"><code>datetime.tzinfo.utcoffset</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:36 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/psycopg2.tz.LocalTimezone-class.html b/psycopg2/doc/api/public/psycopg2.tz.LocalTimezone-class.html
new file mode 100644 (file)
index 0000000..7f95294
--- /dev/null
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.tz.LocalTimezone</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+      <span class="breadcrumbs">\r
+        <a href="psycopg2-module.html">Package&nbsp;psycopg2</a> ::\r
+        <a href="psycopg2.tz-module.html">Module&nbsp;tz</a> ::\r
+        Class&nbsp;LocalTimezone\r
+      </span><br />\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/psycopg2.tz.LocalTimezone-class.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="psycopg2.tz.LocalTimezone-class.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF CLASS DESCRIPTION =========== -->\r
+<h2 class="class">Type LocalTimezone</h2>\r
+\r
+<pre class="base-tree">\r
+<a href="__builtin__.object-class.html"><code>object</code></a> --+    \r
+         |    \r
+    <a href="datetime.tzinfo-class.html"><code>tzinfo</code></a> --+\r
+             |\r
+            <strong class="uidshort">LocalTimezone</strong>\r
+</pre><br />\r
+\r
+<hr/>\r
+\r
+<p>Platform idea of local timezone.</p>\r
+<p>This is the exact implementation from the Pyhton 2.3 documentation.</p>\r
+<hr/>\r
+\r
+\r
+<!-- =========== START OF METHOD SUMMARY =========== -->\r
+<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="summary">\r
+  <th colspan="2">Method Summary</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="dst"></a><span class="summary-sig"><span class="summary-sig-name">dst</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">dt</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="tzname"></a><span class="summary-sig"><span class="summary-sig-name">tzname</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">dt</span>)</span></code>\r
+</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><a name="utcoffset"></a><span class="summary-sig"><span class="summary-sig-name">utcoffset</span>(<span class="summary-sig-arg">self</span>,\r
+          <span class="summary-sig-arg">dt</span>)</span></code>\r
+</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from tzinfo</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#__getattribute__" class="summary-sig-name"><code>__getattribute__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__getattribute__('name') &lt;==&gt; x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#__new__" class="summary-sig-name"><code>__new__</code></a>(<span class="summary-sig-arg">T</span>,\r
+          <span class="summary-sig-arg">S</span>,\r
+          <span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+Return a new object with type S, a subtype of T...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#__reduce__" class="summary-sig-name"><code>__reduce__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+-&gt; (cls, state)</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="datetime.tzinfo-class.html#fromutc" class="summary-sig-name"><code>fromutc</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+datetime in UTC -&gt; datetime in local time.</td></tr>\r
+<tr bgcolor="#e8f0f8" class="group">\r
+  <th colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;Inherited from object</th></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__init__" class="summary-sig-name"><code>__init__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__init__(...) initializes x; see x.__class__.__doc__ for signature</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__delattr__" class="summary-sig-name"><code>__delattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__delattr__('name') &lt;==&gt; del x.name</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__hash__" class="summary-sig-name"><code>__hash__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return hash(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__reduce_ex__" class="summary-sig-name"><code>__reduce_ex__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+helper for pickle</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__repr__" class="summary-sig-name"><code>__repr__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return repr(x)...</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__setattr__" class="summary-sig-name"><code>__setattr__</code></a>(<span class="summary-sig-vararg">...</span>)</span></code>\r
+<br />\r
+x.__setattr__('name', value) &lt;==&gt; x.name = value</td></tr>\r
+<tr><td align="right" valign="top" width="15%" class="rtype">&nbsp;</td>\r
+  <td><code><span class="summary-sig"><a href="__builtin__.object-class.html#__str__" class="summary-sig-name"><code>__str__</code></a>(<span class="summary-sig-arg">x</span>)</span></code>\r
+<br />\r
+Return str(x)...</td></tr>\r
+</table><br />\r
+\r
+\r
+<!-- =========== START OF METHOD DETAILS =========== -->\r
+<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">\r
+<tr bgcolor="#70b0f0" class="details">\r
+  <th colspan="2">Method Details</th></tr>\r
+</table>\r
+\r
+<a name="dst"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">dst</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">dt</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="datetime.tzinfo-class.html#dst"><code>datetime.tzinfo.dst</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="tzname"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">tzname</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">dt</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="datetime.tzinfo-class.html#tzname"><code>datetime.tzinfo.tzname</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+\r
+<a name="utcoffset"></a>\r
+<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>\r
+  <h3><span class="sig"><span class="sig-name">utcoffset</span>(<span class="sig-arg">self</span>,\r
+          <span class="sig-arg">dt</span>)</span>\r
+  </h3>\r
+  <dl><dt></dt><dd>\r
+    <dl><dt>Overrides:</dt>\r
+      <dd><a href="datetime.tzinfo-class.html#utcoffset"><code>datetime.tzinfo.utcoffset</code></a></dd>\r
+    </dl>\r
+  </dd></dl>\r
+</td></tr></table>\r
+<br />\r
+\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:34 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/toc-everything.html b/psycopg2/doc/api/public/toc-everything.html
new file mode 100644 (file)
index 0000000..a13c502
--- /dev/null
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>Everything</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+<h1 class="tocheading">Everything</h1>\r
+<hr />\r
+\r
+<!-- =========== START OF ALL CLASSES =========== -->\r
+<h2 class="tocheading">All&nbsp;Classes</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extras.DictConnection-class.html">psycopg2.extras.DictConnection</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extras.DictCursor-class.html">psycopg2.extras.DictCursor</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extras.DictRow-class.html">psycopg2.extras.DictRow</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extras.SQL_IN-class.html">psycopg2.extras.SQL_IN</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool.AbstractConnectionPool-class.html">psycopg2.pool.AbstractConnectionPool</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool.PersistentConnectionPool-class.html">psycopg2.pool.PersistentConnectionPool</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool.SimpleConnectionPool-class.html">psycopg2.pool.SimpleConnectionPool</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool.ThreadedConnectionPool-class.html">psycopg2.pool.ThreadedConnectionPool</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.psycopg1.connection-class.html">psycopg2.psycopg1.connection</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.psycopg1.cursor-class.html">psycopg2.psycopg1.cursor</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz.FixedOffsetTimezone-class.html">psycopg2.tz.FixedOffsetTimezone</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz.LocalTimezone-class.html">psycopg2.tz.LocalTimezone</a></p>\r
+\r
+<!-- =========== START OF ALL EXCEPTIONS =========== -->\r
+<h2 class="tocheading">All&nbsp;Exceptions</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.DatabaseError-class.html">psycopg2.DatabaseError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.DataError-class.html">psycopg2.DataError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.Error-class.html">psycopg2.Error</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.IntegrityError-class.html">psycopg2.IntegrityError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.InterfaceError-class.html">psycopg2.InterfaceError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.InternalError-class.html">psycopg2.InternalError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.NotSupportedError-class.html">psycopg2.NotSupportedError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.OperationalError-class.html">psycopg2.OperationalError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool.PoolError-class.html">psycopg2.pool.PoolError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.ProgrammingError-class.html">psycopg2.ProgrammingError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.Warning-class.html">psycopg2.Warning</a></p>\r
+\r
+<!-- =========== START OF ALL FUNCTIONS =========== -->\r
+<h2 class="tocheading">All&nbsp;Functions</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#adapt">adapt</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#AsIs">AsIs</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#Binary">Binary</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#Boolean">Boolean</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#connect">connect</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.psycopg1-module.html#connect">connect</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#Date">Date</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#DateFromPy">DateFromPy</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#DateFromTicks">DateFromTicks</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool-module.html#dbg">dbg</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#IntervalFromPy">IntervalFromPy</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#new_type">new_type</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#QuotedString">QuotedString</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#register_adapter">register_adapter</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#register_type">register_type</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#Time">Time</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#TimeFromPy">TimeFromPy</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#TimeFromTicks">TimeFromTicks</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#Timestamp">Timestamp</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#TimestampFromPy">TimestampFromPy</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#TimestampFromTicks">TimestampFromTicks</a></p>\r
+\r
+<!-- =========== START OF ALL VARIABLES =========== -->\r
+<h2 class="tocheading">All&nbsp;Variables</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz-module.html#DSTDIFF">DSTDIFF</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#ISOLATION_LEVEL_AUTOCOMMIT">ISOLATION_LEVEL_AUTOCOMMIT</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#ISOLATION_LEVEL_READ_COMMITTED">ISOLATION_LEVEL_READ_COMMITTED</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#ISOLATION_LEVEL_READ_UNCOMMITTED">ISOLATION_LEVEL_READ_UNCOMMITTED</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#ISOLATION_LEVEL_REPEATABLE_READ">ISOLATION_LEVEL_REPEATABLE_READ</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#ISOLATION_LEVEL_SERIALIZABLE">ISOLATION_LEVEL_SERIALIZABLE</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz-module.html#LOCAL">LOCAL</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz-module.html#STDOFFSET">STDOFFSET</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz-module.html#ZERO">ZERO</a></p>\r
+\r
+<hr />\r
+<span class="options">[<a href="../private/toc-everything.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/toc-psycopg2-module.html b/psycopg2/doc/api/public/toc-psycopg2-module.html
new file mode 100644 (file)
index 0000000..fa15e9b
--- /dev/null
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+<h1 class="tocheading"><a target="mainFrame" href="psycopg2-module.html">psycopg2</a></h1>\r
+<hr />\r
+\r
+<!-- =========== START OF MODULES =========== -->\r
+<h2 class="tocheading">Modules</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html">extensions</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extras-module.html">extras</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool-module.html">pool</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.psycopg1-module.html">psycopg1</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz-module.html">tz</a></p>\r
+\r
+<!-- =========== START OF EXCEPTIONS =========== -->\r
+<h2 class="tocheading">Exceptions</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.DatabaseError-class.html">DatabaseError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.DataError-class.html">DataError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.Error-class.html">Error</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.IntegrityError-class.html">IntegrityError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.InterfaceError-class.html">InterfaceError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.InternalError-class.html">InternalError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.NotSupportedError-class.html">NotSupportedError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.OperationalError-class.html">OperationalError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.ProgrammingError-class.html">ProgrammingError</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.Warning-class.html">Warning</a></p>\r
+\r
+<!-- =========== START OF FUNCTIONS =========== -->\r
+<h2 class="tocheading">Functions</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#Binary">Binary</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#connect">connect</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#Date">Date</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#DateFromTicks">DateFromTicks</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#Time">Time</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#TimeFromTicks">TimeFromTicks</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#Timestamp">Timestamp</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2-module.html#TimestampFromTicks">TimestampFromTicks</a></p>\r
+\r
+<hr />\r
+<span class="options">[<a href="../private/toc-psycopg2-module.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/toc-psycopg2._psycopg-module.html b/psycopg2/doc/api/public/toc-psycopg2._psycopg-module.html
new file mode 100644 (file)
index 0000000..6e8fa49
--- /dev/null
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2._psycopg</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+<h1 class="tocheading"><a target="mainFrame" href="psycopg2._psycopg-module.html">_psycopg</a></h1>\r
+<hr />\r
+\r
+<!-- =========== START OF CLASSES =========== -->\r
+<h2 class="tocheading">Classes</h2>\r
+\r
+<!-- =========== START OF FUNCTIONS =========== -->\r
+<h2 class="tocheading">Functions</h2>\r
+\r
+<!-- =========== START OF VARIABLES =========== -->\r
+<h2 class="tocheading">Variables</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#__version__">__version__</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#adapters">adapters</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#apilevel">apilevel</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#BINARY">BINARY</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#binary_types">binary_types</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#BINARYARRAY">BINARYARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#BOOLEAN">BOOLEAN</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#BOOLEANARRAY">BOOLEANARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#DATE">DATE</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#DATEARRAY">DATEARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#DATETIME">DATETIME</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#DATETIMEARRAY">DATETIMEARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#DECIMAL">DECIMAL</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#DECIMALARRAY">DECIMALARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#encodings">encodings</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#FLOAT">FLOAT</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#FLOATARRAY">FLOATARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#INTEGER">INTEGER</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#INTEGERARRAY">INTEGERARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#INTERVAL">INTERVAL</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#INTERVALARRAY">INTERVALARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#LONGINTEGER">LONGINTEGER</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#LONGINTEGERARRAY">LONGINTEGERARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#NUMBER">NUMBER</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#paramstyle">paramstyle</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#PYDATE">PYDATE</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#PYDATETIME">PYDATETIME</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#PYINTERVAL">PYINTERVAL</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#PYTIME">PYTIME</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#ROWID">ROWID</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#ROWIDARRAY">ROWIDARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#STRING">STRING</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#string_types">string_types</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#STRINGARRAY">STRINGARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#threadsafety">threadsafety</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#TIME">TIME</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#TIMEARRAY">TIMEARRAY</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#UNICODE">UNICODE</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2._psycopg-module.html#UNICODEARRAY">UNICODEARRAY</a></p>\r
+\r
+<hr />\r
+<span class="options">[<a href="../private/toc-psycopg2._psycopg-module.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/toc-psycopg2.extensions-module.html b/psycopg2/doc/api/public/toc-psycopg2.extensions-module.html
new file mode 100644 (file)
index 0000000..abf93eb
--- /dev/null
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.extensions</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+<h1 class="tocheading"><a target="mainFrame" href="psycopg2.extensions-module.html">extensions</a></h1>\r
+<hr />\r
+\r
+<!-- =========== START OF FUNCTIONS =========== -->\r
+<h2 class="tocheading">Functions</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#adapt">adapt</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#AsIs">AsIs</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#Boolean">Boolean</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#DateFromPy">DateFromPy</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#IntervalFromPy">IntervalFromPy</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#new_type">new_type</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#QuotedString">QuotedString</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#register_adapter">register_adapter</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#register_type">register_type</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#TimeFromPy">TimeFromPy</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#TimestampFromPy">TimestampFromPy</a></p>\r
+\r
+<!-- =========== START OF VARIABLES =========== -->\r
+<h2 class="tocheading">Variables</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#ISOLATION_LEVEL_AUTOCOMMIT">ISOLATION_LEVEL_AUTOCOMMIT</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#ISOLATION_LEVEL_READ_COMMITTED">ISOLATION_LEVEL_READ_COMMITTED</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#ISOLATION_LEVEL_READ_UNCOMMITTED">ISOLATION_LEVEL_READ_UNCOMMITTED</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#ISOLATION_LEVEL_REPEATABLE_READ">ISOLATION_LEVEL_REPEATABLE_READ</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extensions-module.html#ISOLATION_LEVEL_SERIALIZABLE">ISOLATION_LEVEL_SERIALIZABLE</a></p>\r
+\r
+<hr />\r
+<span class="options">[<a href="../private/toc-psycopg2.extensions-module.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/toc-psycopg2.extras-module.html b/psycopg2/doc/api/public/toc-psycopg2.extras-module.html
new file mode 100644 (file)
index 0000000..f193b47
--- /dev/null
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.extras</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+<h1 class="tocheading"><a target="mainFrame" href="psycopg2.extras-module.html">extras</a></h1>\r
+<hr />\r
+\r
+<!-- =========== START OF CLASSES =========== -->\r
+<h2 class="tocheading">Classes</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extras.DictConnection-class.html">DictConnection</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extras.DictCursor-class.html">DictCursor</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extras.DictRow-class.html">DictRow</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.extras.SQL_IN-class.html">SQL_IN</a></p>\r
+\r
+<hr />\r
+<span class="options">[<a href="../private/toc-psycopg2.extras-module.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/toc-psycopg2.pool-module.html b/psycopg2/doc/api/public/toc-psycopg2.pool-module.html
new file mode 100644 (file)
index 0000000..0736019
--- /dev/null
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.pool</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+<h1 class="tocheading"><a target="mainFrame" href="psycopg2.pool-module.html">pool</a></h1>\r
+<hr />\r
+\r
+<!-- =========== START OF CLASSES =========== -->\r
+<h2 class="tocheading">Classes</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool.AbstractConnectionPool-class.html">AbstractConnectionPool</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool.PersistentConnectionPool-class.html">PersistentConnectionPool</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool.SimpleConnectionPool-class.html">SimpleConnectionPool</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool.ThreadedConnectionPool-class.html">ThreadedConnectionPool</a></p>\r
+\r
+<!-- =========== START OF EXCEPTIONS =========== -->\r
+<h2 class="tocheading">Exceptions</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool.PoolError-class.html">PoolError</a></p>\r
+\r
+<!-- =========== START OF FUNCTIONS =========== -->\r
+<h2 class="tocheading">Functions</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.pool-module.html#dbg">dbg</a></p>\r
+\r
+<hr />\r
+<span class="options">[<a href="../private/toc-psycopg2.pool-module.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/toc-psycopg2.psycopg1-module.html b/psycopg2/doc/api/public/toc-psycopg2.psycopg1-module.html
new file mode 100644 (file)
index 0000000..69b1f79
--- /dev/null
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.psycopg1</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+<h1 class="tocheading"><a target="mainFrame" href="psycopg2.psycopg1-module.html">psycopg1</a></h1>\r
+<hr />\r
+\r
+<!-- =========== START OF CLASSES =========== -->\r
+<h2 class="tocheading">Classes</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.psycopg1.connection-class.html">connection</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.psycopg1.cursor-class.html">cursor</a></p>\r
+\r
+<!-- =========== START OF FUNCTIONS =========== -->\r
+<h2 class="tocheading">Functions</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.psycopg1-module.html#connect">connect</a></p>\r
+\r
+<hr />\r
+<span class="options">[<a href="../private/toc-psycopg2.psycopg1-module.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/toc-psycopg2.tz-module.html b/psycopg2/doc/api/public/toc-psycopg2.tz-module.html
new file mode 100644 (file)
index 0000000..6f617fe
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>psycopg2.tz</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+<h1 class="tocheading"><a target="mainFrame" href="psycopg2.tz-module.html">tz</a></h1>\r
+<hr />\r
+\r
+<!-- =========== START OF CLASSES =========== -->\r
+<h2 class="tocheading">Classes</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz.FixedOffsetTimezone-class.html">FixedOffsetTimezone</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz.LocalTimezone-class.html">LocalTimezone</a></p>\r
+\r
+<!-- =========== START OF VARIABLES =========== -->\r
+<h2 class="tocheading">Variables</h2>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz-module.html#DSTDIFF">DSTDIFF</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz-module.html#LOCAL">LOCAL</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz-module.html#STDOFFSET">STDOFFSET</a></p>\r
+<p class="toc"><a target="mainFrame" href="psycopg2.tz-module.html#ZERO">ZERO</a></p>\r
+\r
+<hr />\r
+<span class="options">[<a href="../private/toc-psycopg2.tz-module.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/toc.html b/psycopg2/doc/api/public/toc.html
new file mode 100644 (file)
index 0000000..89021cc
--- /dev/null
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>Table of Contents</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+<h1 class="tocheading">Table&nbsp;of&nbsp;Contents</h1>\r
+<hr />\r
+<p class="toc"><a target="moduleFrame" href="toc-everything.html">Everything</a></p>\r
+\r
+<!-- =========== START OF PACKAGES =========== -->\r
+<h2 class="tocheading">Packages</h2>\r
+<p class="toc"><a target="moduleFrame" href="toc-psycopg2-module.html" onclick="setFrame('toc-psycopg2-module.html', 'psycopg2-module.html');">psycopg2</a></p>\r
+\r
+<!-- =========== START OF MODULES =========== -->\r
+<h2 class="tocheading">Modules</h2>\r
+<p class="toc"><a target="moduleFrame" href="toc-psycopg2.extensions-module.html" onclick="setFrame('toc-psycopg2.extensions-module.html', 'psycopg2.extensions-module.html');">psycopg2.extensions</a></p>\r
+<p class="toc"><a target="moduleFrame" href="toc-psycopg2.extras-module.html" onclick="setFrame('toc-psycopg2.extras-module.html', 'psycopg2.extras-module.html');">psycopg2.extras</a></p>\r
+<p class="toc"><a target="moduleFrame" href="toc-psycopg2.pool-module.html" onclick="setFrame('toc-psycopg2.pool-module.html', 'psycopg2.pool-module.html');">psycopg2.pool</a></p>\r
+<p class="toc"><a target="moduleFrame" href="toc-psycopg2.psycopg1-module.html" onclick="setFrame('toc-psycopg2.psycopg1-module.html', 'psycopg2.psycopg1-module.html');">psycopg2.psycopg1</a></p>\r
+<p class="toc"><a target="moduleFrame" href="toc-psycopg2.tz-module.html" onclick="setFrame('toc-psycopg2.tz-module.html', 'psycopg2.tz-module.html');">psycopg2.tz</a></p>\r
+\r
+<hr />\r
+<span class="options">[<a href="../private/toc.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/api/public/trees.html b/psycopg2/doc/api/public/trees.html
new file mode 100644 (file)
index 0000000..44573d9
--- /dev/null
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\r
+          "DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">\r
+<head>\r
+  <title>Module and Class Hierarchies</title>\r
+  <link rel="stylesheet" href="epydoc.css" type="text/css" />\r
+<script type="text/javascript">\r
+<!--\r
+function setFrame(url1, url2){\r
+    parent.frames[1].location.href = url1;\r
+    parent.frames[2].location.href = url2;\r
+}\r
+-->\r
+</script>\r
+</head>\r
+<body bgcolor="white" text="black" link="blue" vlink="#204080"\r
+      alink="#204080">\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th bgcolor="#70b0f0" class="navselect">&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+<table width="100%" cellpadding="0" cellspacing="0">\r
+  <tr valign="top">\r
+    <td width="100%">\r
+    </td>\r
+    <td><table cellpadding="0" cellspacing="0">\r
+      <tr><td align="right"><span class="options">[<a href="../private/trees.html">show&nbsp;private</a>&nbsp;|&nbsp;hide&nbsp;private]</span></td></tr>\r
+      <tr><td align="right"><span class="options">[<a href="frames.html" target="_top">frames</a>&nbsp;|&nbsp;<a href="trees.html" target="_top">no&nbsp;frames</a>]</span></td></tr>\r
+    </table></td>\r
+</tr></table>\r
+\r
+<!-- =========== START OF MODULE HIERARCHY =========== -->\r
+<h2>Module Hierarchy</h2>\r
+<ul>\r
+<li> <strong class="uidlink"><a href="psycopg2-module.html"><code>psycopg2</code></a></strong>: <em class="summary">A Python driver for PostgreSQL</em>  <ul>\r
+    <li> <strong class="uidlink"><a href="psycopg2.extensions-module.html"><code>extensions</code></a></strong>: <em class="summary">psycopg extensions to the DBAPI-2.0</em></li>\r
+    <li> <strong class="uidlink"><a href="psycopg2.extras-module.html"><code>extras</code></a></strong>: <em class="summary">Miscellaneous goodies for psycopg2</em></li>\r
+    <li> <strong class="uidlink"><a href="psycopg2.pool-module.html"><code>pool</code></a></strong>: <em class="summary">Connection pooling for psycopg2</em></li>\r
+    <li> <strong class="uidlink"><a href="psycopg2.psycopg1-module.html"><code>psycopg1</code></a></strong>: <em class="summary">psycopg 1.1.x compatibility module</em></li>\r
+    <li> <strong class="uidlink"><a href="psycopg2.tz-module.html"><code>tz</code></a></strong>: <em class="summary">tzinfo implementations for psycopg2</em></li>\r
+  </ul>\r
+</li>\r
+</ul>\r
+\r
+<!-- =========== START OF CLASS HIERARCHY =========== -->\r
+<h2>Class Hierarchy</h2>\r
+<ul>\r
+  <li> <strong class="uidlink"><a href="__builtin__.object-class.html"><code>__builtin__.object</code></a></strong>: <em class="summary">\r
+The most base type</em>\r
+   <ul>\r
+    <li> <strong class="uidlink"><a href="psycopg2.pool.AbstractConnectionPool-class.html"><code>psycopg2.pool.AbstractConnectionPool</code></a></strong>: <em class="summary">\r
+Generic key-based pooling code.</em>\r
+     <ul>\r
+      <li> <strong class="uidlink"><a href="psycopg2.pool.PersistentConnectionPool-class.html"><code>psycopg2.pool.PersistentConnectionPool</code></a></strong>: <em class="summary">\r
+A pool that assigns persistent connections to different threads.</em>\r
+      </li>\r
+      <li> <strong class="uidlink"><a href="psycopg2.pool.SimpleConnectionPool-class.html"><code>psycopg2.pool.SimpleConnectionPool</code></a></strong>: <em class="summary">\r
+A connection pool that can't be shared across different threads.</em>\r
+      </li>\r
+      <li> <strong class="uidlink"><a href="psycopg2.pool.ThreadedConnectionPool-class.html"><code>psycopg2.pool.ThreadedConnectionPool</code></a></strong>: <em class="summary">\r
+A connection pool that works with the threading module.</em>\r
+      </li>\r
+     </ul>\r
+    </li>\r
+    <li> <strong class="uidlink"><a href="__builtin__.list-class.html"><code>__builtin__.list</code></a></strong>: <em class="summary">\r
+list() -&gt; new list\r
+list(sequence) -&gt; new list initialized from sequence's items</em>\r
+     <ul>\r
+      <li> <strong class="uidlink"><a href="psycopg2.extras.DictRow-class.html"><code>psycopg2.extras.DictRow</code></a></strong>: <em class="summary">\r
+A row object that allow by-colun-name access to data.</em>\r
+      </li>\r
+     </ul>\r
+    </li>\r
+    <li> <strong class="uidlink"><a href="psycopg2.extras.SQL_IN-class.html"><code>psycopg2.extras.SQL_IN</code></a></strong>: <em class="summary">\r
+Adapt any iterable to an SQL quotable object.</em>\r
+    </li>\r
+    <li> <strong class="uidlink"><a href="__builtin__.type-class.html"><code>__builtin__.type</code></a></strong>: <em class="summary">\r
+type(object) -&gt; the object's type\r
+type(name, bases, dict) -&gt; a new type</em>\r
+    </li>\r
+    <li> <strong class="uidlink"><a href="datetime.tzinfo-class.html"><code>datetime.tzinfo</code></a></strong>: <em class="summary">\r
+Abstract base class for time zone info objects.</em>\r
+     <ul>\r
+      <li> <strong class="uidlink"><a href="psycopg2.tz.FixedOffsetTimezone-class.html"><code>psycopg2.tz.FixedOffsetTimezone</code></a></strong>: <em class="summary">\r
+Fixed offset in minutes east from UTC.</em>\r
+      </li>\r
+      <li> <strong class="uidlink"><a href="psycopg2.tz.LocalTimezone-class.html"><code>psycopg2.tz.LocalTimezone</code></a></strong>: <em class="summary">\r
+Platform idea of local timezone.</em>\r
+      </li>\r
+     </ul>\r
+    </li>\r
+     <ul>\r
+     </ul>\r
+     <ul>\r
+     </ul>\r
+   </ul>\r
+  </li>\r
+  <li> <strong class="uidlink"><a href="exceptions.Exception-class.html"><code>exceptions.Exception</code></a></strong>: <em class="summary">\r
+Common base class for all exceptions.</em>\r
+   <ul>\r
+    <li> <strong class="uidlink"><a href="exceptions.StandardError-class.html"><code>exceptions.StandardError</code></a></strong>: <em class="summary">\r
+Base class for all standard Python exceptions.</em>\r
+     <ul>\r
+      <li> <strong class="uidlink"><a href="psycopg2.Error-class.html"><code>psycopg2.Error</code></a></strong>: <em class="summary">\r
+Base class for error exceptions.</em>\r
+       <ul>\r
+        <li> <strong class="uidlink"><a href="psycopg2.DatabaseError-class.html"><code>psycopg2.DatabaseError</code></a></strong>: <em class="summary">\r
+Error related to the database engine.</em>\r
+         <ul>\r
+          <li> <strong class="uidlink"><a href="psycopg2.DataError-class.html"><code>psycopg2.DataError</code></a></strong>: <em class="summary">\r
+Error related to problems with the processed data.</em>\r
+          </li>\r
+          <li> <strong class="uidlink"><a href="psycopg2.IntegrityError-class.html"><code>psycopg2.IntegrityError</code></a></strong>: <em class="summary">\r
+Error related to database integrity.</em>\r
+          </li>\r
+          <li> <strong class="uidlink"><a href="psycopg2.InternalError-class.html"><code>psycopg2.InternalError</code></a></strong>: <em class="summary">\r
+The database encountered an internal error.</em>\r
+          </li>\r
+          <li> <strong class="uidlink"><a href="psycopg2.NotSupportedError-class.html"><code>psycopg2.NotSupportedError</code></a></strong>: <em class="summary">\r
+A not supported datbase API was called.</em>\r
+          </li>\r
+          <li> <strong class="uidlink"><a href="psycopg2.OperationalError-class.html"><code>psycopg2.OperationalError</code></a></strong>: <em class="summary">\r
+Error related to database operation (disconnect, memory allocation etc).</em>\r
+          </li>\r
+          <li> <strong class="uidlink"><a href="psycopg2.ProgrammingError-class.html"><code>psycopg2.ProgrammingError</code></a></strong>: <em class="summary">\r
+Error related to database programming (SQL error, table not found etc).</em>\r
+          </li>\r
+         </ul>\r
+        </li>\r
+        <li> <strong class="uidlink"><a href="psycopg2.InterfaceError-class.html"><code>psycopg2.InterfaceError</code></a></strong>: <em class="summary">\r
+Error related to the database interface.</em>\r
+        </li>\r
+        <li> <strong class="uidlink"><a href="psycopg2.pool.PoolError-class.html"><code>psycopg2.pool.PoolError</code></a></strong>\r
+        </li>\r
+       </ul>\r
+      </li>\r
+      <li> <strong class="uidlink"><a href="psycopg2.Warning-class.html"><code>psycopg2.Warning</code></a></strong>: <em class="summary">\r
+A database warning.</em>\r
+      </li>\r
+     </ul>\r
+    </li>\r
+   </ul>\r
+  </li>\r
+</ul>\r
+\r
+<!-- =========== START OF NAVBAR =========== -->\r
+<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">\r
+  <tr valign="middle">\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="psycopg2-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="trees.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="indices.html">Index</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar">&nbsp;&nbsp;&nbsp;<a class="navbar" href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>\r
+    <th class="navbar" width="100%"></th>\r
+  </tr>\r
+</table>\r
+\r
+<table border="0" cellpadding="0" cellspacing="0" width="100%">\r
+  <tr>\r
+    <td align="left" class="footer">Generated by Epydoc 2.1 on Sat Jan 14 01:42:37 2006</td>\r
+    <td align="right" class="footer">\r
+      <a href="http://epydoc.sourceforge.net">http://epydoc.sf.net</a>\r
+    </td>\r
+  </tr>\r
+</table>\r
+</body>\r
+</html>\r
diff --git a/psycopg2/doc/async.txt b/psycopg2/doc/async.txt
new file mode 100644 (file)
index 0000000..518d5fe
--- /dev/null
@@ -0,0 +1,67 @@
+psycopg asynchronous API
+************************
+
+** Important: async quaeries are not enabled for 2.0 **
+
+Program code can initiate an asynchronous query by passing an 'async=1' flag
+to the .execute() method. A very simple example, from the connection to the
+query:
+
+    conn = psycopg.connect(database='test')
+    curs = conn.cursor()
+    curs.execute("SEECT * from test WHERE fielda > %s", (1971,), async=1)
+    
+From then on any query on other cursors derived from the same connection is
+doomed to fail (and raise an exception) until the original cursor (the one
+executing the query) complete the asynchronous operation. This can happen in
+a number of different ways:
+
+    1) one of the .fetchXXX() methods is called, effectively blocking untill
+       data has been sent from the backend to the client, terminating the
+       query.
+       
+    2) .cancel() is called. This method tries to abort the current query and
+       will block until the query is aborted or fully executed. The return
+       value is True if the query was successfully aborted or False if it
+       was executed. Query result are discarded in both cases.
+       
+    3) .execute() is called again on the same cursor (.execute() on a
+       different cursor will simply raise an exception.) This waits for the
+       complete execution of the current query, discard any data and execute
+       the new one.
+
+Note that calling .execute() two times in a row will not abort the former
+query and will temporarily go to synchronous mode until the first of the two
+queries is executed.
+
+Cursors now have some extra methods that make them usefull during
+asynchronous queries:
+
+    .fileno()
+      Returns the file descriptor associated with the current connection and
+      make possible to use a cursor in a context where a file object would be
+      expected (like in a select() call.)
+
+    .isbusy()
+      Returns True if the backend is still processing the query or false if
+      data is ready to be fetched (by one of the .fetchXXX() methods.)
+      
+A code snippet that shows how to use the cursor object in a select() call:
+
+    import psycopg
+    import select
+        
+    conn = psycopg.connect(database='test')
+    curs = conn.cursor()
+    curs.execute("SEECT * from test WHERE fielda > %s", (1971,), async=1)
+
+    # wait for input with a maximum timeout of 5 seconds
+    query_ended = False
+    while not query_ended:
+        rread, rwrite, rspec = select([cursor, another_file], [], [], 5)
+       if not cursor.isbusy():
+          query_ended = True
+       # manage input from other sources like other_file, etc.
+    print "Query Results:"
+    for row in cursor:
+        print row
diff --git a/psycopg2/doc/extensions.html b/psycopg2/doc/extensions.html
new file mode 100644 (file)
index 0000000..cb71200
--- /dev/null
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.3.9: http://docutils.sourceforge.net/" />
+<title>psycopg 2 extensions to the DBAPI 2.0</title>
+<link rel="stylesheet" href="default.css" type="text/css" />
+</head>
+<body>
+<div class="document" id="psycopg-2-extensions-to-the-dbapi-2-0">
+<h1 class="title">psycopg 2 extensions to the DBAPI 2.0</h1>
+<p>This document is a short summary of the extensions built in psycopg 2.0.x over
+the standard <a class="reference" href="http://www.python.org/peps/pep-0249.html">Python Database API Specification 2.0</a>, usually called simply
+DBAPI-2.0 or even PEP-249.  Before reading on this document please make sure
+you already know how to program in Python using a DBAPI-2.0 compliant driver:
+basic concepts like opening a connection, executing queries and commiting or
+rolling back a transaction will not be explained but just used.</p>
+<p>Many objects and extension functions are defined in the <a class="reference" href="api/public/psycopg2.extensions-module.html"><tt class="docutils literal"><span class="pre">psycopg2.extensions</span></tt></a>
+module.</p>
+<div class="section" id="connection-and-cursor-factories">
+<h1><a name="connection-and-cursor-factories">Connection and cursor factories</a></h1>
+<p>psycopg 2 exposes two new-style classes that can be sub-classed and expanded to
+adapt them to the needs of the programmer: <a class="reference" href="api/private/psycopg2._psycopg.cursor-class.html"><tt class="docutils literal"><span class="pre">cursor</span></tt></a> and <a class="reference" href="api/private/psycopg2._psycopg.connection-class.html"><tt class="docutils literal"><span class="pre">connection</span></tt></a>.  The
+<a class="reference" href="api/private/psycopg2._psycopg.connection-class.html"><tt class="docutils literal"><span class="pre">connection</span></tt></a> class is usually sub-classed only to provide a . <a class="reference" href="api/private/psycopg2._psycopg.cursor-class.html"><tt class="docutils literal"><span class="pre">cursor</span></tt></a> is much
+more interesting, because it is the class where query building, execution and
+result type-casting into Python variables happens.</p>
+<div class="section" id="row-factories">
+<h2><a name="row-factories">Row factories</a></h2>
+</div>
+<div class="section" id="tzinfo-factories">
+<h2><a name="tzinfo-factories">tzinfo factories</a></h2>
+</div>
+</div>
+<div class="section" id="setting-transaction-isolation-levels">
+<h1><a name="setting-transaction-isolation-levels">Setting transaction isolation levels</a></h1>
+<p>psycopg2 connection objects hold informations about the PostgreSQL <a class="reference" href="http://www.postgresql.org/docs/8.1/static/transaction-iso.html">transaction
+isolation level</a>.  The current transaction level can be read from the
+<a class="reference" href="api/private/psycopg2._psycopg.connection-class.html#isolation_level"><tt class="docutils literal"><span class="pre">.isolation_level</span></tt></a> attribute.  The default isolation level is <tt class="docutils literal"><span class="pre">READ</span>
+<span class="pre">COMMITTED</span></tt>.  A different isolation level con be set through the
+<a class="reference" href="api/private/psycopg2._psycopg.connection-class.html#set_isolation_level"><tt class="docutils literal"><span class="pre">.set_isolation_level()</span></tt></a> method.  The level can be set to one of the following
+constants, defined in <a class="reference" href="api/public/psycopg2.extensions-module.html"><tt class="docutils literal"><span class="pre">psycopg2.extensions</span></tt></a>:</p>
+<dl class="docutils">
+<dt><a class="reference" href="api/public/psycopg2.extensions-module.html#ISOLATION_LEVEL_AUTOCOMMIT"><tt class="docutils literal"><span class="pre">ISOLATION_LEVEL_AUTOCOMMIT</span></tt></a></dt>
+<dd>No transaction is started when command are issued and no
+<a class="reference" href="api/private/psycopg2._psycopg.connection-class.html#commit"><tt class="docutils literal"><span class="pre">.commit()</span></tt></a>/<a class="reference" href="api/private/psycopg2._psycopg.connection-class.html#rollback"><tt class="docutils literal"><span class="pre">.rollback()</span></tt></a> is required.  Some PostgreSQL command such as
+<tt class="docutils literal"><span class="pre">CREATE</span> <span class="pre">DATABASE</span></tt> can't run into a transaction: to run such command use
+<a class="reference" href="api/private/psycopg2._psycopg.connection-class.html#set_isolation_level"><tt class="docutils literal"><span class="pre">.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)</span></tt></a>.</dd>
+<dt><a href="#id2" name="id3"><span class="problematic" id="id3">`ISOLATION_LEVEL_READ_COMMITTED`</span></a></dt>
+<dd><div class="first system-message" id="id2">
+<p class="system-message-title">System Message: <a name="id2">ERROR/3</a> (<tt class="docutils">../doc/extensions.rst</tt>, line 54); <em><a href="#id3">backlink</a></em></p>
+Can't find 'ISOLATION_LEVEL_READ_COMMITTED' in any provided module.</div>
+<p class="last">This is the default value.  A new transaction is started at the first
+<a class="reference" href="api/private/psycopg2._psycopg.cursor-class.html#execute"><tt class="docutils literal"><span class="pre">.execute()</span></tt></a> command on a cursor and at each new <a class="reference" href="api/private/psycopg2._psycopg.cursor-class.html#execute"><tt class="docutils literal"><span class="pre">.execute()</span></tt></a> after a
+<a class="reference" href="api/private/psycopg2._psycopg.connection-class.html#commit"><tt class="docutils literal"><span class="pre">.commit()</span></tt></a> or a <a class="reference" href="api/private/psycopg2._psycopg.connection-class.html#rollback"><tt class="docutils literal"><span class="pre">.rollback()</span></tt></a>.  The transaction runs in the PostgreSQL
+<tt class="docutils literal"><span class="pre">READ</span> <span class="pre">COMMITTED</span></tt> isolation level.</p>
+</dd>
+<dt><a class="reference" href="api/public/psycopg2.extensions-module.html#ISOLATION_LEVEL_SERIALIZABLE"><tt class="docutils literal"><span class="pre">ISOLATION_LEVEL_SERIALIZABLE</span></tt></a></dt>
+<dd>Transactions are run at a <tt class="docutils literal"><span class="pre">SERIALIZABLE</span></tt> isolation level.</dd>
+</dl>
+</div>
+<div class="section" id="adaptation-of-python-values-to-sql-types">
+<h1><a name="adaptation-of-python-values-to-sql-types">Adaptation of Python values to SQL types</a></h1>
+<p>psycopg2 casts Python variables to SQL literals by type.  Standard Python types
+are already adapted to the proper SQL literal.</p>
+<p>Example: the Python function:</p>
+<pre class="literal-block">
+curs.execute(&quot;&quot;&quot;INSERT INTO atable (anint, adate, astring)
+                 VALUES (%s, %s, %s)&quot;&quot;&quot;,
+             (10, datetime.date(2005, 11, 18), &quot;O'Reilly&quot;))
+</pre>
+<p>is converted into the SQL command:</p>
+<pre class="literal-block">
+INSERT INTO atable (anint, adate, astring)
+ VALUES (10, '2005-11-18', 'O''Reilly');
+</pre>
+<p>Named arguments are supported too with <tt class="docutils literal"><span class="pre">%(name)s</span></tt> placeholders. Notice that:</p>
+<blockquote>
+<ul class="simple">
+<li>The Python string operator <tt class="docutils literal"><span class="pre">%</span></tt> is not used: the <a class="reference" href="api/private/psycopg2._psycopg.cursor-class.html#execute"><tt class="docutils literal"><span class="pre">.execute()</span></tt></a> function
+accepts the values tuple or dictionary as second parameter.</li>
+<li>The variables placeholder must always be a <tt class="docutils literal"><span class="pre">%s</span></tt>, even if a different
+placeholder (such as a <tt class="docutils literal"><span class="pre">%d</span></tt> for an integer) may look more appropriate.</li>
+<li>For positional variables binding, the second argument must always be a
+tuple, even if it contains a single variable.</li>
+<li>Only variable values should be bound via this method: it shouldn't be used
+to set table or field names. For these elements, ordinary string formatting
+should be used before running <a class="reference" href="api/private/psycopg2._psycopg.cursor-class.html#execute"><tt class="docutils literal"><span class="pre">.execute()</span></tt></a>.</li>
+</ul>
+</blockquote>
+<div class="section" id="adapting-new-types">
+<h2><a name="adapting-new-types">Adapting new types</a></h2>
+<p>Any Python class or type can be adapted to an SQL string.  Adaptation mechanism
+is similar to the Object Adaptation proposed in the <a class="reference" href="http://www.python.org/peps/pep-0246.html">PEP-246</a> and is exposed
+by the <a class="reference" href="api/private/psycopg2._psycopg-module.html#adapt"><tt class="docutils literal"><span class="pre">adapt()</span></tt></a> function.</p>
+<p>psycopg2 <a class="reference" href="api/private/psycopg2._psycopg.cursor-class.html#execute"><tt class="docutils literal"><span class="pre">.execute()</span></tt></a> method adapts its <tt class="docutils literal"><span class="pre">vars</span></tt> arguments to the <a class="reference" href="api/private/psycopg2._psycopg.ISQLQuote-class.html"><tt class="docutils literal"><span class="pre">ISQLQuote</span></tt></a>
+protocol.  Objects that conform to this protocol expose a <tt class="docutils literal"><span class="pre">getquoted()</span></tt> method
+returning the SQL representation of the object as a string.</p>
+<p>The easiest way to adapt an object to an SQL string is to register an adapter
+function via the <a class="reference" href="api/public/psycopg2.extensions-module.html#register_adapter"><tt class="docutils literal"><span class="pre">register_adapter()</span></tt></a> function.  The adapter function must take
+the value to be adapted as argument and return a conform object.  A convenient
+object is the <a class="reference" href="api/private/psycopg2._psycopg-module.html#AsIs"><tt class="docutils literal"><span class="pre">AsIs</span></tt></a> wrapper, whose <tt class="docutils literal"><span class="pre">getquoted()</span></tt> result is simply the
+<tt class="docutils literal"><span class="pre">str()</span></tt>ingification of the wrapped object.</p>
+<p>Example: mapping of a <tt class="docutils literal"><span class="pre">Point</span></tt> class into the <tt class="docutils literal"><span class="pre">point</span></tt> PostgreSQL geometric
+type:</p>
+<pre class="literal-block">
+from psycopg2.extensions import adapt, register_adapter, AsIs
+
+class Point(object):
+    def __init__(self, x=0.0, y=0.0):
+        self.x = x
+        self.y = y
+
+def adapt_point(point):
+    return AsIs(&quot;'(%s,%s)'&quot; % (adapt(point.x), adapt(point.y)))
+    
+register_adapter(Point, adapt_point)
+
+curs.execute(&quot;INSERT INTO atable (apoint) VALUES (%s)&quot;, 
+             (Point(1.23, 4.56),))
+</pre>
+<p>The above function call results in the SQL command:</p>
+<pre class="literal-block">
+INSERT INTO atable (apoint) VALUES ((1.23, 4.56));
+</pre>
+</div>
+</div>
+<div class="section" id="type-casting-of-sql-types-into-python-values">
+<h1><a name="type-casting-of-sql-types-into-python-values">Type casting of SQL types into Python values</a></h1>
+<p>PostgreSQL objects read from the database can be adapted to Python objects
+through an user-defined adapting function.  An adapter function takes two
+argments: the object string representation as returned by PostgreSQL and the
+cursor currently being read, and should return a new Python object.  For
+example, the following function parses a PostgreSQL <tt class="docutils literal"><span class="pre">point</span></tt> into the
+previously defined <tt class="docutils literal"><span class="pre">Point</span></tt> class:</p>
+<pre class="literal-block">
+def cast_point(value, curs):
+    if value is not None:
+            # Convert from (f1, f2) syntax using a regular expression.
+        m = re.match(&quot;\((.*),(.*)\)&quot;, value) 
+        if m:
+            return Point(float(m.group(1)), float(m.group(2)))
+</pre>
+<p>To create a mapping from the PostgreSQL type (either standard or user-defined),
+its <tt class="docutils literal"><span class="pre">oid</span></tt> must be known. It can be retrieved either by the second column of
+the cursor description:</p>
+<pre class="literal-block">
+curs.execute(&quot;SELECT NULL::point&quot;)
+point_oid = curs.description[0][1]   # usually returns 600
+</pre>
+<p>or by querying the system catalogs for the type name and namespace (the
+namespace for system objects is <tt class="docutils literal"><span class="pre">pg_catalog</span></tt>):</p>
+<pre class="literal-block">
+curs.execute(&quot;&quot;&quot;
+    SELECT pg_type.oid
+      FROM pg_type JOIN pg_namespace
+             ON typnamespace = pg_namespace.oid
+     WHERE typname = %(typename)s
+       AND nspname = %(namespace)s&quot;&quot;&quot;,
+            {'typename': 'point', 'namespace': 'pg_catalog'})
+    
+point_oid = curs.fetchone()[0]
+</pre>
+<p>After you know the object <tt class="docutils literal"><span class="pre">oid</span></tt>, you must can and register the new type:</p>
+<pre class="literal-block">
+POINT = psycopg2.extensions.new_type((point_oid,), &quot;POINT&quot;, cast_point)
+psycopg2.extensions.register_type(POINT)
+</pre>
+<p>The <a class="reference" href="api/private/psycopg2._psycopg-module.html#new_type"><tt class="docutils literal"><span class="pre">new_type()</span></tt></a> function binds the object oids (more than one can be
+specified) to the adapter function.  <a class="reference" href="api/private/psycopg2._psycopg-module.html#register_type"><tt class="docutils literal"><span class="pre">register_type()</span></tt></a> completes the spell.
+Conversion is automatically performed when a column whose type is a registered
+<tt class="docutils literal"><span class="pre">oid</span></tt> is read:</p>
+<pre class="literal-block">
+curs.execute(&quot;SELECT '(10.2,20.3)'::point&quot;)
+point = curs.fetchone()[0]
+print type(point), point.x, point.y
+# Prints: &quot;&lt;class '__main__.Point'&gt; 10.2 20.3&quot;
+</pre>
+</div>
+<div class="section" id="working-with-times-and-dates">
+<h1><a name="working-with-times-and-dates">Working with times and dates</a></h1>
+</div>
+<div class="section" id="receiving-notifys">
+<h1><a name="receiving-notifys">Receiving NOTIFYs</a></h1>
+</div>
+<div class="section" id="using-copy-to-and-copy-from">
+<h1><a name="using-copy-to-and-copy-from">Using COPY TO and COPY FROM</a></h1>
+<p>psycopg2 <a class="reference" href="api/private/psycopg2._psycopg.cursor-class.html"><tt class="docutils literal"><span class="pre">cursor</span></tt></a> object provides an interface to the efficient <a class="reference" href="http://www.postgresql.org/docs/8.1/static/sql-copy.html">PostgreSQL
+COPY command</a> to move data from files to tables and back.</p>
+<p>The <a class="reference" href="api/private/psycopg2._psycopg.cursor-class.html#copy_to"><tt class="docutils literal"><span class="pre">.copy_to(file,</span> <span class="pre">table)</span></tt></a> method writes the content of the table
+named <tt class="docutils literal"><span class="pre">table</span></tt> <em>to</em> the file-like object <tt class="docutils literal"><span class="pre">file</span></tt>. <tt class="docutils literal"><span class="pre">file</span></tt> must have a
+<tt class="docutils literal"><span class="pre">write()</span></tt> method.</p>
+<p>The <a class="reference" href="api/private/psycopg2._psycopg.cursor-class.html#copy_from"><tt class="docutils literal"><span class="pre">.copy_from(file,</span> <span class="pre">table)</span></tt></a> reads data <em>from</em> the file-like object
+<tt class="docutils literal"><span class="pre">file</span></tt> appending them to the table named <tt class="docutils literal"><span class="pre">table</span></tt>. <tt class="docutils literal"><span class="pre">file</span></tt> must have both
+<tt class="docutils literal"><span class="pre">read()</span></tt> and <tt class="docutils literal"><span class="pre">readline()</span></tt> method.</p>
+<p>Both methods accept two optional arguments: <tt class="docutils literal"><span class="pre">sep</span></tt> (defaulting to a tab) is
+the columns separator and <tt class="docutils literal"><span class="pre">null</span></tt> (defaulting to <tt class="docutils literal"><span class="pre">\N</span></tt>) represents <tt class="docutils literal"><span class="pre">NULL</span></tt>
+values in the file.</p>
+</div>
+<div class="section" id="postgresql-status-message-and-executed-query">
+<h1><a name="postgresql-status-message-and-executed-query">PostgreSQL status message and executed query</a></h1>
+<p><a class="reference" href="api/private/psycopg2._psycopg.cursor-class.html"><tt class="docutils literal"><span class="pre">cursor</span></tt></a> objects have two special fields related to the last executed query:</p>
+<blockquote>
+<ul class="simple">
+<li><a class="reference" href="api/private/psycopg2._psycopg.cursor-class.html#query"><tt class="docutils literal"><span class="pre">.query</span></tt></a> is the textual representation (str or unicode, depending on what
+was passed to <a class="reference" href="api/private/psycopg2._psycopg.cursor-class.html#execute"><tt class="docutils literal"><span class="pre">.execute()</span></tt></a> as first argument) of the query <em>after</em> argument
+binding and mogrification has been applied. To put it another way, <a class="reference" href="api/private/psycopg2._psycopg.cursor-class.html#query"><tt class="docutils literal"><span class="pre">.query</span></tt></a>
+is the <em>exact</em> query that was sent to the PostgreSQL backend.</li>
+<li><a class="reference" href="api/private/psycopg2._psycopg.cursor-class.html#statusmessage"><tt class="docutils literal"><span class="pre">.statusmessage</span></tt></a> is the status message that the backend sent upon query
+execution. It usually contains the basic type of the query (SELECT,
+INSERT, UPDATE, ...) and some additional information like the number of
+rows updated and so on. Refer to the PostgreSQL manual for more
+information.</li>
+</ul>
+</blockquote>
+</div>
+</div>
+</body>
+</html>
diff --git a/psycopg2/doc/extensions.rst b/psycopg2/doc/extensions.rst
new file mode 100644 (file)
index 0000000..3bdc680
--- /dev/null
@@ -0,0 +1,260 @@
+=======================================
+ psycopg 2 extensions to the DBAPI 2.0
+=======================================
+
+This document is a short summary of the extensions built in psycopg 2.0.x over
+the standard `Python Database API Specification 2.0`__, usually called simply
+DBAPI-2.0 or even PEP-249.  Before reading on this document please make sure
+you already know how to program in Python using a DBAPI-2.0 compliant driver:
+basic concepts like opening a connection, executing queries and commiting or
+rolling back a transaction will not be explained but just used.
+
+.. __: http://www.python.org/peps/pep-0249.html
+
+Many objects and extension functions are defined in the `psycopg2.extensions`
+module.
+
+
+Connection and cursor factories
+===============================
+
+psycopg 2 exposes two new-style classes that can be sub-classed and expanded to
+adapt them to the needs of the programmer: `cursor` and `connection`.  The
+`connection` class is usually sub-classed only to provide an easy way to create
+customized cursors but other uses are possible. `cursor` is much more
+interesting, because it is the class where query building, execution and result
+type-casting into Python variables happens.
+
+An example of cursor subclass performing logging is::
+
+    import psycopg2
+    import psycopg2.extensions
+    import logging
+
+    class LoggingCursor(psycopg2.extensions.cursor):
+        def execute(self, sql, args=None):
+            logger = logging.getLogger('sql_debug')
+            logger.info(self.mogrify(sql, args))
+
+            try:
+                psycopg2.extensions.cursor.execute(self, sql, args)
+            except Exception, exc:
+                logger.error("%s: %s" % (exc.__class__.__name__, exc))
+                raise
+
+    conn = psycopg2.connect(DSN)
+    curs = conn.cursor(cursor_factory=LoggingCursor)
+    curs.execute("INSERT INTO mytable VALUES (%s, %s, %s);",
+                 (10, 20, 30))
+
+
+Row factories
+-------------
+
+tzinfo factories
+----------------
+
+
+Setting transaction isolation levels
+====================================
+
+psycopg2 connection objects hold informations about the PostgreSQL `transaction
+isolation level`_.  The current transaction level can be read from the
+`.isolation_level` attribute.  The default isolation level is ``READ
+COMMITTED``.  A different isolation level con be set through the
+`.set_isolation_level()` method.  The level can be set to one of the following
+constants, defined in `psycopg2.extensions`:
+
+`ISOLATION_LEVEL_AUTOCOMMIT`
+    No transaction is started when command are issued and no
+    `.commit()`/`.rollback()` is required.  Some PostgreSQL command such as
+    ``CREATE DATABASE`` can't run into a transaction: to run such command use
+    `.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)`.
+    
+`ISOLATION_LEVEL_READ_COMMITTED`
+    This is the default value.  A new transaction is started at the first
+    `.execute()` command on a cursor and at each new `.execute()` after a
+    `.commit()` or a `.rollback()`.  The transaction runs in the PostgreSQL
+    ``READ COMMITTED`` isolation level.
+    
+`ISOLATION_LEVEL_SERIALIZABLE`
+    Transactions are run at a ``SERIALIZABLE`` isolation level.
+
+
+.. _transaction isolation level: 
+   http://www.postgresql.org/docs/8.1/static/transaction-iso.html
+
+
+Adaptation of Python values to SQL types
+========================================
+
+psycopg2 casts Python variables to SQL literals by type.  Standard Python types
+are already adapted to the proper SQL literal.
+
+Example: the Python function::
+
+    curs.execute("""INSERT INTO atable (anint, adate, astring)
+                     VALUES (%s, %s, %s)""",
+                 (10, datetime.date(2005, 11, 18), "O'Reilly"))
+
+is converted into the SQL command::
+
+    INSERT INTO atable (anint, adate, astring)
+     VALUES (10, '2005-11-18', 'O''Reilly');
+
+Named arguments are supported too with ``%(name)s`` placeholders. Notice that:
+
+  - The Python string operator ``%`` is not used: the `.execute()` function
+    accepts the values tuple or dictionary as second parameter.
+
+  - The variables placeholder must always be a ``%s``, even if a different
+    placeholder (such as a ``%d`` for an integer) may look more appropriate.
+
+  - For positional variables binding, the second argument must always be a
+    tuple, even if it contains a single variable.
+
+  - Only variable values should be bound via this method: it shouldn't be used
+    to set table or field names. For these elements, ordinary string formatting
+    should be used before running `.execute()`.
+
+
+Adapting new types
+------------------
+
+Any Python class or type can be adapted to an SQL string.  Adaptation mechanism
+is similar to the Object Adaptation proposed in the `PEP-246`_ and is exposed
+by the `adapt()` function.
+
+psycopg2 `.execute()` method adapts its ``vars`` arguments to the `ISQLQuote`
+protocol.  Objects that conform to this protocol expose a ``getquoted()`` method
+returning the SQL representation of the object as a string.
+
+The easiest way to adapt an object to an SQL string is to register an adapter
+function via the `register_adapter()` function.  The adapter function must take
+the value to be adapted as argument and return a conform object.  A convenient
+object is the `AsIs` wrapper, whose ``getquoted()`` result is simply the
+``str()``\ ingification of the wrapped object.
+
+Example: mapping of a ``Point`` class into the ``point`` PostgreSQL geometric
+type::
+
+    from psycopg2.extensions import adapt, register_adapter, AsIs
+    
+    class Point(object):
+        def __init__(self, x=0.0, y=0.0):
+            self.x = x
+            self.y = y
+    
+    def adapt_point(point):
+        return AsIs("'(%s,%s)'" % (adapt(point.x), adapt(point.y)))
+        
+    register_adapter(Point, adapt_point)
+    
+    curs.execute("INSERT INTO atable (apoint) VALUES (%s)", 
+                 (Point(1.23, 4.56),))
+
+The above function call results in the SQL command::
+
+    INSERT INTO atable (apoint) VALUES ((1.23, 4.56));
+
+
+.. _PEP-246: http://www.python.org/peps/pep-0246.html
+
+
+Type casting of SQL types into Python values
+============================================
+
+PostgreSQL objects read from the database can be adapted to Python objects
+through an user-defined adapting function.  An adapter function takes two
+argments: the object string representation as returned by PostgreSQL and the
+cursor currently being read, and should return a new Python object.  For
+example, the following function parses a PostgreSQL ``point`` into the
+previously defined ``Point`` class::
+
+    def cast_point(value, curs):
+        if value is not None:
+               # Convert from (f1, f2) syntax using a regular expression.
+            m = re.match("\((.*),(.*)\)", value) 
+            if m:
+                return Point(float(m.group(1)), float(m.group(2)))
+                
+To create a mapping from the PostgreSQL type (either standard or user-defined),
+its ``oid`` must be known. It can be retrieved either by the second column of
+the cursor description::
+
+    curs.execute("SELECT NULL::point")
+    point_oid = curs.description[0][1]   # usually returns 600
+
+or by querying the system catalogs for the type name and namespace (the
+namespace for system objects is ``pg_catalog``)::
+
+    curs.execute("""
+        SELECT pg_type.oid
+          FROM pg_type JOIN pg_namespace
+                 ON typnamespace = pg_namespace.oid
+         WHERE typname = %(typename)s
+           AND nspname = %(namespace)s""",
+                {'typename': 'point', 'namespace': 'pg_catalog'})
+        
+    point_oid = curs.fetchone()[0]
+
+After you know the object ``oid``, you must can and register the new type::
+
+    POINT = psycopg2.extensions.new_type((point_oid,), "POINT", cast_point)
+    psycopg2.extensions.register_type(POINT)
+
+The `new_type()` function binds the object oids (more than one can be
+specified) to the adapter function.  `register_type()` completes the spell.
+Conversion is automatically performed when a column whose type is a registered
+``oid`` is read::
+
+    curs.execute("SELECT '(10.2,20.3)'::point")
+    point = curs.fetchone()[0]
+    print type(point), point.x, point.y
+    # Prints: "<class '__main__.Point'> 10.2 20.3"
+
+
+Working with times and dates
+============================
+
+
+Receiving NOTIFYs
+=================
+
+
+Using COPY TO and COPY FROM
+===========================
+
+psycopg2 `cursor` object provides an interface to the efficient `PostgreSQL
+COPY command`__ to move data from files to tables and back.
+
+The `.copy_to(file, table)` method writes the content of the table
+named ``table`` *to* the file-like object ``file``. ``file`` must have a
+``write()`` method.
+
+The `.copy_from(file, table)` reads data *from* the file-like object
+``file`` appending them to the table named ``table``. ``file`` must have both
+``read()`` and ``readline()`` method.
+
+Both methods accept two optional arguments: ``sep`` (defaulting to a tab) is
+the columns separator and ``null`` (defaulting to ``\N``) represents ``NULL``
+values in the file.
+
+.. __: http://www.postgresql.org/docs/8.1/static/sql-copy.html
+
+
+PostgreSQL status message and executed query
+============================================
+
+`cursor` objects have two special fields related to the last executed query:
+
+  - `.query` is the textual representation (str or unicode, depending on what
+    was passed to `.execute()` as first argument) of the query *after* argument
+    binding and mogrification has been applied. To put it another way, `.query`
+    is the *exact* query that was sent to the PostgreSQL backend.
+    
+  - `.statusmessage` is the status message that the backend sent upon query
+    execution. It usually contains the basic type of the query (SELECT,
+    INSERT, UPDATE, ...) and some additional information like the number of
+    rows updated and so on. Refer to the PostgreSQL manual for more
+    information.
diff --git a/psycopg2/examples/binary.py b/psycopg2/examples/binary.py
new file mode 100644 (file)
index 0000000..eaa8f1e
--- /dev/null
@@ -0,0 +1,89 @@
+# binary.py - working with binary data
+#
+# Copyright (C) 2001-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.
+
+## put in DSN your DSN string
+
+DSN = 'dbname=test'
+
+## don't modify anything below tis line (except for experimenting)
+
+import sys
+import psycopg2
+
+if len(sys.argv) > 1:
+    DSN = sys.argv[1]
+
+print "Opening connection using dns:", DSN
+conn = psycopg2.connect(DSN)
+print "Encoding for this connection is", conn.encoding
+
+curs = conn.cursor()
+try:
+    curs.execute("CREATE TABLE test_binary (id int4, name text, img bytea)")
+except:
+    conn.rollback()
+    curs.execute("DROP TABLE test_binary")
+    curs.execute("CREATE TABLE test_binary (id int4, name text, img bytea)")
+conn.commit()
+
+# first we try two inserts, one with an explicit Binary call and the other
+# using a buffer on a file object.
+
+data1 = {'id':1, 'name':'somehackers.jpg',
+         'img':psycopg2.Binary(open('somehackers.jpg').read())}
+data2 = {'id':2, 'name':'whereareyou.jpg',
+         'img':buffer(open('whereareyou.jpg').read())}
+
+curs.execute("""INSERT INTO test_binary
+                  VALUES (%(id)s, %(name)s, %(img)s)""", data1)
+curs.execute("""INSERT INTO test_binary
+                  VALUES (%(id)s, %(name)s, %(img)s)""", data2)
+
+# now we try to extract the images as simple text strings
+
+print "Extracting the images as strings..."
+curs.execute("SELECT * FROM test_binary")
+
+for row in curs.fetchall():
+    name, ext = row[1].split('.')
+    new_name = name + '_S.' + ext
+    print "  writing %s to %s ..." % (name+'.'+ext, new_name),
+    open(new_name, 'wb').write(row[2])
+    print "done"
+    print "  python type of image data is", type(row[2])
+    
+# extract exactly the same data but using a binary cursor
+
+print "Extracting the images using a binary cursor:"
+
+curs.execute("""DECLARE zot CURSOR FOR
+                  SELECT img, name FROM test_binary FOR READ ONLY""")
+curs.execute("""FETCH ALL FROM zot""")
+
+for row in curs.fetchall():
+    name, ext = row[1].split('.')
+    new_name = name + '_B.' + ext
+    print "  writing %s to %s ..." % (name+'.'+ext, new_name),
+    open(new_name, 'wb').write(row[0])
+    print "done"
+    print "  python type of image data is", type(row[0])
+    
+# this rollback is requires because we can't drop a table with a binary cusor
+# declared and still open
+conn.rollback()
+
+curs.execute("DROP TABLE test_binary")
+conn.commit()
+
+print "\nNow try to load the new images, to check it worked!"
diff --git a/psycopg2/examples/copy_from.py b/psycopg2/examples/copy_from.py
new file mode 100644 (file)
index 0000000..edd3294
--- /dev/null
@@ -0,0 +1,178 @@
+# copy_from.py -- example about copy_from 
+#
+# Copyright (C) 2002 Tom Jenkins <tjenkins@devis.com>
+# Copyright (C) 2005 Federico Di Gregorio <fog@initd.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.
+#
+
+## put in DSN your DSN string
+
+DSN = 'dbname=test'
+
+## don't modify anything below tis line (except for experimenting)
+
+import sys
+import os
+import StringIO
+import psycopg2
+
+if len(sys.argv) > 1:
+    DSN = sys.argv[1]
+
+print "Opening connection using dns:", DSN
+conn = psycopg2.connect(DSN)
+print "Encoding for this connection is", conn.encoding
+
+curs = conn.cursor()
+try:
+    curs.execute("CREATE TABLE test_copy (fld1 text, fld2 text, fld3 int4)")
+except:
+    conn.rollback()
+    curs.execute("DROP TABLE test_copy")
+    curs.execute("CREATE TABLE test_copy (fld1 text, fld2 text, fld3 int4)")
+conn.commit()
+
+# copy_from with default arguments, from open file
+
+io = open('copy_from.txt', 'wr')
+data = ['Tom\tJenkins\t37\n',
+        'Madonna\t\N\t45\n',
+        'Federico\tDi Gregorio\t\N\n']
+io.writelines(data)
+io.close()
+
+io = open('copy_from.txt', 'r')
+curs.copy_from(io, 'test_copy')
+print "1) Copy %d records from file object " % len(data) + \
+      "using defaults (sep: \\t and null = \\N)"
+io.close()
+
+curs.execute("SELECT * FROM test_copy")
+rows = curs.fetchall()
+print "   Select returned %d rows" % len(rows)
+
+for r in rows:
+    print "    %s %s\t%s" % (r[0], r[1], r[2])
+curs.execute("delete from test_copy")
+conn.commit()
+
+# copy_from using custom separator, from open file
+
+io = open('copy_from.txt', 'wr')
+data = ['Tom:Jenkins:37\n',
+        'Madonna:\N:45\n',
+        'Federico:Di Gregorio:\N\n']
+io.writelines(data)
+io.close()
+
+io = open('copy_from.txt', 'r')
+curs.copy_from(io, 'test_copy', ':')
+print "2) Copy %d records from file object using sep = :" % len(data)
+io.close()
+
+curs.execute("SELECT * FROM test_copy")
+rows = curs.fetchall()
+print "   Select returned %d rows" % len(rows)
+
+for r in rows:
+    print "    %s %s\t%s" % (r[0], r[1], r[2])
+curs.execute("delete from test_copy")
+conn.commit()
+
+# copy_from using custom null identifier, from open file
+
+io = open('copy_from.txt', 'wr')
+data = ['Tom\tJenkins\t37\n',
+        'Madonna\tNULL\t45\n',
+        'Federico\tDi Gregorio\tNULL\n']
+io.writelines(data)
+io.close()
+
+io = open('copy_from.txt', 'r')
+curs.copy_from(io, 'test_copy', null='NULL')
+print "3) Copy %d records from file object using null = NULL" % len(data)
+io.close()
+
+curs.execute("SELECT * FROM test_copy")
+rows = curs.fetchall()
+print "   Select using cursor returned %d rows" % len(rows)
+
+for r in rows:
+    print "    %s %s\t%s" % (r[0], r[1], r[2])
+curs.execute("delete from test_copy")
+conn.commit()
+
+# copy_from using custom separator and null identifier
+
+io = open('copy_from.txt', 'wr')
+data = ['Tom:Jenkins:37\n', 'Madonna:NULL:45\n', 'Federico:Di Gregorio:NULL\n']
+io.writelines(data)
+io.close()
+
+io = open('copy_from.txt', 'r')
+curs.copy_from(io, 'test_copy', ':', 'NULL')
+print "4) Copy %d records from file object " % len(data) + \
+      "using sep = : and null = NULL"
+io.close()
+
+curs.execute("SELECT * FROM test_copy")
+rows = curs.fetchall()
+print "   Select using cursor returned %d rows" % len(rows)
+
+for r in rows:
+    print "    %s %s\t%s" % (r[0], r[1], r[2])
+curs.execute("delete from test_copy")
+conn.commit()
+
+# anything can be used as a file if it has .read() and .readline() methods
+
+data = StringIO.StringIO()
+data.write('\n'.join(['Tom\tJenkins\t37',
+                      'Madonna\t\N\t45',
+                      'Federico\tDi Gregorio\t\N']))
+data.seek(0)
+
+curs.copy_from(data, 'test_copy')
+print "5) Copy 3 records from StringIO object using defaults"
+
+curs.execute("SELECT * FROM test_copy")
+rows = curs.fetchall()
+print "   Select using cursor returned %d rows" % len(rows)
+
+for r in rows:
+    print "    %s %s\t%s" % (r[0], r[1], r[2])
+curs.execute("delete from test_copy")
+conn.commit()
+
+# simple error test
+
+print "6) About to raise an error"
+data = StringIO.StringIO()
+data.write('\n'.join(['Tom\tJenkins\t37',
+                      'Madonna\t\N\t45',
+                      'Federico\tDi Gregorio\taaa']))
+data.seek(0)
+
+try:
+    curs.copy_from(data, 'test_copy')
+except StandardError, err:
+    conn.rollback()
+    print "   Catched error (as expected):\n", err
+
+conn.rollback()
+
+curs.execute("DROP TABLE test_copy")
+os.unlink('copy_from.txt')
+conn.commit()
+
+
+
diff --git a/psycopg2/examples/copy_to.py b/psycopg2/examples/copy_to.py
new file mode 100644 (file)
index 0000000..5570fbc
--- /dev/null
@@ -0,0 +1,104 @@
+# copy_to.py -- example about copy_to 
+#
+# Copyright (C) 2002 Tom Jenkins <tjenkins@devis.com>
+# Copyright (C) 2005 Federico Di Gregorio <fog@initd.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.
+#
+
+## put in DSN your DSN string
+
+DSN = 'dbname=test'
+
+## don't modify anything below tis line (except for experimenting)
+
+import sys
+import os
+import StringIO
+import psycopg2
+
+if len(sys.argv) > 1:
+    DSN = sys.argv[1]
+
+print "Opening connection using dns:", DSN
+conn = psycopg2.connect(DSN)
+print "Encoding for this connection is", conn.encoding
+
+curs = conn.cursor()
+try:
+    curs.execute("CREATE TABLE test_copy (fld1 text, fld2 text, fld3 int4)")
+except:
+    conn.rollback()
+    curs.execute("DROP TABLE test_copy")
+    curs.execute("CREATE TABLE test_copy (fld1 text, fld2 text, fld3 int4)")
+conn.commit()
+
+# demostrate copy_to functionality
+data = [('Tom', 'Jenkins', '37'),
+        ('Madonna', None, '45'),
+        ('Federico', 'Di Gregorio', None)]
+query = "INSERT INTO test_copy VALUES (%s, %s, %s)"
+curs.executemany(query, data)
+conn.commit()
+
+# copy_to using defaults
+io = open('copy_to.txt', 'w')
+curs.copy_to(io, 'test_copy')
+print "1) Copy %d records into file object using defaults: " % len (data) + \
+      "sep = \\t and null = \\N"
+io.close()
+
+rows = open('copy_to.txt', 'r').readlines()
+print "   File has %d rows:" % len(rows)
+
+for r in rows:
+    print "   ", r,
+
+# copy_to using custom separator
+io = open('copy_to.txt', 'w')
+curs.copy_to(io, 'test_copy', ':')
+print "2) Copy %d records into file object using sep = :" % len(data)
+io.close()
+
+rows = open('copy_to.txt', 'r').readlines()
+print "   File has %d rows:" % len(rows)
+
+for r in rows:
+    print "   ", r,
+
+# copy_to using custom null identifier
+io = open('copy_to.txt', 'w')
+curs.copy_to(io, 'test_copy', null='NULL')
+print "3) Copy %d records into file object using null = NULL" % len(data)
+io.close()
+
+rows = open('copy_to.txt', 'r').readlines()
+print "   File has %d rows:" % len(rows)
+
+for r in rows:
+    print "   ", r,
+
+# copy_to using custom separator and null identifier
+io = open('copy_to.txt', 'w')
+curs.copy_to(io, 'test_copy', ':', 'NULL')
+print "4) Copy %d records into file object using sep = : and null ) NULL" % \
+      len(data)
+io.close()
+
+rows = open('copy_to.txt', 'r').readlines()
+print "   File has %d rows:" % len(rows)
+
+for r in rows:
+    print "   ", r,
+
+curs.execute("DROP TABLE test_copy")
+os.unlink('copy_to.txt')
+conn.commit()
diff --git a/psycopg2/examples/cursor.py b/psycopg2/examples/cursor.py
new file mode 100644 (file)
index 0000000..54cb5e7
--- /dev/null
@@ -0,0 +1,63 @@
+# cursor.py - how to subclass the cursor type
+#
+# Copyright (C) 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.
+
+## put in DSN your DSN string
+
+DSN = 'dbname=test'
+
+## don't modify anything below this line (except for experimenting)
+
+import sys
+import psycopg2
+import psycopg2.extensions
+
+if len(sys.argv) > 1:
+    DSN = sys.argv[1]
+
+print "Opening connection using dsn:", DSN
+conn = psycopg2.connect(DSN)
+print "Encoding for this connection is", conn.encoding
+
+
+class NoDataError(psycopg2.ProgrammingError):
+    """Exception that will be raised by our cursor."""
+    pass
+
+class Cursor(psycopg2.extensions.cursor):
+    """A custom cursor."""
+
+    def fetchone(self):
+        """Like fetchone but raise an exception if no data is available.
+
+        Note that to have .fetchmany() and .fetchall() to raise the same
+        exception we'll have to override them too; even if internally psycopg
+        uses the same function to fetch rows, the code path from Python is
+        different.
+        """
+        d = psycopg2.extensions.cursor.fetchone(self)
+        if d is None:
+           raise NoDataError("no more data")
+        return d
+    
+curs = conn.cursor(cursor_factory=Cursor)
+curs.execute("SELECT 1 AS foo")
+print "Result of fetchone():", curs.fetchone()
+
+# now let's raise the exception
+try:
+    curs.fetchone()
+except NoDataError, err:
+    print "Exception caugth:", err  
+
+conn.rollback()
diff --git a/psycopg2/examples/dialtone.py b/psycopg2/examples/dialtone.py
new file mode 100644 (file)
index 0000000..3a55686
--- /dev/null
@@ -0,0 +1,144 @@
+"""
+This example/recipe has been contributed by Valentino Volonghi (dialtone)
+
+Mapping arbitrary objects to a PostgreSQL database with psycopg2
+
+- Problem
+
+You need to store arbitrary objects in a PostgreSQL database without being
+intrusive for your classes (don't want inheritance from an 'Item' or 
+'Persistent' object).
+
+- Solution
+"""
+
+from datetime import datetime
+import psycopg2
+from psycopg2.extensions import adapt, register_adapter
+
+try:
+    sorted()
+except:
+    def sorted(seq):
+        seq.sort()
+        return seq
+
+# Here is the adapter for every object that we may ever need to 
+# insert in the database. It receives the original object and does
+# its job on that instance
+
+class ObjectMapper(object):
+    def __init__(self, orig, curs=None):
+        self.orig = orig
+        self.tmp = {}
+        self.items, self.fields = self._gatherState()
+    def _gatherState(self):
+        adaptee_name = self.orig.__class__.__name__
+        fields = sorted([(field, getattr(self.orig, field))
+                        for field in persistent_fields[adaptee_name]])
+        items = []
+        for item, value in fields:
+            items.append(item)
+        return items, fields
+    def getTableName(self):
+        return self.orig.__class__.__name__
+    def getMappedValues(self):
+        tmp = []
+        for i in self.items:
+            tmp.append("%%(%s)s"%i)
+        return ", ".join(tmp)
+    def getValuesDict(self):
+        return dict(self.fields)
+    def getFields(self):
+        return self.items
+
+    def generateInsert(self):
+        qry = "INSERT INTO"
+        qry += " " + self.getTableName() + " ("
+        qry += ", ".join(self.getFields()) + ") VALUES ("
+        qry += self.getMappedValues() + ")"
+        return qry, self.getValuesDict()
+
+# Here are the objects
+class Album(object):    
+    id = 0 
+    def __init__(self):
+        self.creation_time = datetime.now()
+        self.album_id = self.id
+        Album.id = Album.id + 1
+        self.binary_data = buffer('12312312312121')
+class Order(object):
+     id = 0
+     def __init__(self):
+        self.items = ['rice','chocolate']
+        self.price = 34
+        self.order_id = self.id
+        Order.id = Order.id + 1
+
+register_adapter(Album, ObjectMapper)
+register_adapter(Order, ObjectMapper)
+    
+# Describe what is needed to save on each object
+# This is actually just configuration, you can use xml with a parser if you
+# like to have plenty of wasted CPU cycles ;P.
+
+persistent_fields = {'Album': ['album_id', 'creation_time', 'binary_data'],
+                              'Order':  ['order_id', 'items', 'price']
+                            }
+print adapt(Album()).generateInsert()
+print adapt(Album()).generateInsert()
+print adapt(Album()).generateInsert()
+print adapt(Order()).generateInsert()
+print adapt(Order()).generateInsert()
+print adapt(Order()).generateInsert()
+
+"""
+- Discussion
+
+Psycopg 2 has a great new feature: adaptation. The big thing about 
+adaptation is that it enable the programmer to glue most of the 
+code out there without many difficulties.
+
+This recipe tries to focus the attention on a way to generate SQL queries to 
+insert  completely new objects inside a database. As you can see objects do 
+not know anything about the code that is handling them. We specify all the 
+fields that we need for each object through the persistent_fields dict.
+
+The most important lines of this recipe are:
+    register_adapter(Album, ObjectMapper)
+    register_adapter(Order, ObjectMapper)
+
+In these line we notify the system that when we call adapt with an Album instance 
+as an argument we want it to istantiate ObjectMapper passing the Album instance  
+as argument (self.orig in the ObjectMapper class).
+
+The output is something like this (for each call to generateInsert):
+    
+('INSERT INTO Album (album_id, binary_data, creation_time) VALUES 
+   (%(album_id)s, %(binary_data)s, %(creation_time)s)', 
+      
+  {'binary_data': <read-only buffer for 0x402de070, ...>, 
+    'creation_time':   datetime.datetime(2004, 9, 10, 20, 48, 29, 633728), 
+    'album_id': 1}
+)
+
+This is a tuple of {SQL_QUERY, FILLING_DICT}, and all the quoting/converting 
+stuff (from python's datetime to postgres s and from python's buffer to 
+postgres' blob) is handled with the same adaptation process hunder the hood 
+by psycopg2.
+
+At last, just notice that ObjectMapper is working for both Album and Order 
+instances without any glitches at all, and both classes could have easily been 
+coming from closed source libraries or C coded ones (which are not easily 
+modified), whereas a common pattern in todays ORMs or OODBs is to provide 
+a basic 'Persistent' object that already knows how to store itself in the 
+database.
+"""
diff --git a/psycopg2/examples/dict.py b/psycopg2/examples/dict.py
new file mode 100644 (file)
index 0000000..37dc74a
--- /dev/null
@@ -0,0 +1,45 @@
+# dict.py - using DictCUrsor/DictRow
+#
+# Copyright (C) 2005 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.
+
+## put in DSN your DSN string
+
+DSN = 'dbname=test'
+
+## don't modify anything below this line (except for experimenting)
+
+import sys
+import psycopg2
+import psycopg2.extras
+
+if len(sys.argv) > 1:
+    DSN = sys.argv[1]
+
+print "Opening connection using dsn:", DSN
+conn = psycopg2.connect(DSN)
+print "Encoding for this connection is", conn.encoding
+
+    
+curs = conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
+curs.execute("SELECT 1 AS foo, 'cip' AS bar, date(now()) as zot")
+
+data = curs.fetchone()
+print "Some data accessed both as tuple and dict:"
+print " ", data['foo'], data['bar'], data['zot']
+print " ", data[0], data[1], data[2]
+
+# execute another query and demostrate we can still access the row
+curs.execute("SELECT 2 AS foo")
+print "Some more data accessed both as tuple and dict:"
+print " ", data['foo'], data['bar'], data['zot']
+print " ", data[0], data[1], data[2]
diff --git a/psycopg2/examples/dt.py b/psycopg2/examples/dt.py
new file mode 100644 (file)
index 0000000..76f0c78
--- /dev/null
@@ -0,0 +1,99 @@
+# datetime.py -  example of using date and time types
+#
+# Copyright (C) 2001-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.
+
+## put in DSN your DSN string
+
+DSN = 'dbname=test'
+
+## don't modify anything below tis line (except for experimenting)
+
+import sys
+import psycopg2
+import mx.DateTime
+import datetime
+
+from psycopg2.extensions import adapt
+
+if len(sys.argv) > 1:
+    DSN = sys.argv[1]
+
+print "Opening connection using dns:", DSN
+conn = psycopg2.connect(DSN)
+curs = conn.cursor()
+
+try:
+    curs.execute("""CREATE TABLE test_dt (
+                     k int4, d date, t time, dt timestamp, z interval)""")
+except:
+    conn.rollback()
+    curs.execute("DROP TABLE test_dt")
+    curs.execute("""CREATE TABLE test_dt (
+                     k int4, d date, t time, dt timestamp, z interval)""")
+conn.commit()
+
+# build and insert some data using mx.DateTime
+mx1 = (
+    1,
+    mx.DateTime.Date(2004, 10, 19),
+    mx.DateTime.Time(0, 11, 17.015),
+    mx.DateTime.Timestamp(2004, 10, 19, 0, 11, 17.5),
+    mx.DateTime.DateTimeDelta(13, 15, 17, 59.9))
+
+from psycopg2.extensions import adapt
+import psycopg2.extras
+print adapt(mx1)
+
+print "Inserting mx.DateTime values..."
+curs.execute("INSERT INTO test_dt VALUES (%s, %s, %s, %s, %s)", mx1)
+
+# build and insert some values using the datetime adapters
+dt1 = (
+    2,
+    datetime.date(2004, 10, 19),
+    datetime.time(0, 11, 17, 15000),
+    datetime.datetime(2004, 10, 19, 0, 11, 17, 500000),
+    datetime.timedelta(13, 15*3600+17*60+59, 900000))
+
+print "Inserting Python datetime values..."
+curs.execute("INSERT INTO test_dt VALUES (%s, %s, %s, %s, %s)", dt1)
+
+# now extract the row from database and print them
+print "Extracting values inserted with mx.DateTime wrappers:"
+curs.execute("SELECT d, t, dt, z FROM test_dt WHERE k = 1")
+for n, x in zip(mx1[1:], curs.fetchone()):
+    try:
+        # this will work only is psycopg has been compiled with datetime
+        # as the default typecaster for date/time values
+        s = repr(n) + "\n -> " + str(adapt(n)) + \
+            "\n -> " + repr(x) + "\n -> " + x.isoformat()
+    except:
+        s = repr(n) + "\n -> " + str(adapt(n))  + \
+            "\n -> " + repr(x) + "\n -> " + str(x)
+    print s
+print
+
+print "Extracting values inserted with Python datetime wrappers:"
+curs.execute("SELECT d, t, dt, z FROM test_dt WHERE k = 2")
+for n, x in zip(dt1[1:], curs.fetchone()):
+    try:
+        # this will work only is psycopg has been compiled with datetime
+        # as the default typecaster for date/time values
+        s = repr(n) + "\n -> " +  repr(x) + "\n -> " + x.isoformat()
+    except:
+        s = repr(n) + "\n -> " +  repr(x) + "\n -> " + str(x)
+    print s
+print
+
+curs.execute("DROP TABLE test_dt")
+conn.commit()
diff --git a/psycopg2/examples/encoding.py b/psycopg2/examples/encoding.py
new file mode 100644 (file)
index 0000000..da57bcf
--- /dev/null
@@ -0,0 +1,105 @@
+# enkoding.py - show to change client enkoding (and test it works)
+# -*- encoding: utf8 -*-
+#
+# Copyright (C) 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.
+
+## put in DSN your DSN string
+
+DSN = 'dbname=test'
+
+## don't modify anything below this line (except for experimenting)
+
+import sys
+import psycopg2
+import psycopg2.extensions
+
+if len(sys.argv) > 1:
+    DSN = sys.argv[1]
+
+print "Opening connection using dns:", DSN
+conn = psycopg2.connect(DSN)
+print "Initial encoding for this connection is", conn.encoding
+
+print "\n** This example is supposed to be run in a UNICODE terminal! **\n"
+
+print "Available encodings:"
+encs = psycopg2.extensions.encodings.items()
+encs.sort()
+for a, b in encs:
+    print " ", a, "<->", b
+
+print "Using STRING typecaster"    
+print "Setting backend encoding to LATIN1 and executing queries:"
+conn.set_client_encoding('LATIN1')
+curs = conn.cursor()
+curs.execute("SELECT %s::TEXT AS foo", ('àèìòù',))
+x = curs.fetchone()[0]
+print "  ->", unicode(x, 'latin-1').encode('utf-8'), type(x)
+curs.execute("SELECT %s::TEXT AS foo", (u'àèìòù',))
+x = curs.fetchone()[0]
+print "  ->", unicode(x, 'latin-1').encode('utf-8'), type(x)
+
+print "Setting backend encoding to UTF8 and executing queries:"
+conn.set_client_encoding('UNICODE')
+curs = conn.cursor()
+curs.execute("SELECT %s::TEXT AS foo", (u'àèìòù'.encode('utf-8'),))
+x = curs.fetchone()[0]
+print "  ->", x, type(x)
+curs.execute("SELECT %s::TEXT AS foo", (u'àèìòù',))
+x = curs.fetchone()[0]
+print "  ->", x, type(x)
+
+print "Using UNICODE typecaster"
+psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
+
+print "Setting backend encoding to LATIN1 and executing queries:"
+conn.set_client_encoding('LATIN1')
+curs = conn.cursor()
+curs.execute("SELECT %s::TEXT AS foo", ('àèìòù',))
+x = curs.fetchone()[0]
+print "  ->", x.encode('utf-8'), ":", type(x)
+curs.execute("SELECT %s::TEXT AS foo", (u'àèìòù',))
+x = curs.fetchone()[0]
+print "  ->", x.encode('utf-8'), ":", type(x)
+
+print "Setting backend encoding to UTF8 and executing queries:"
+conn.set_client_encoding('UNICODE')
+curs = conn.cursor()
+curs.execute("SELECT %s::TEXT AS foo", (u'àèìòù'.encode('utf-8'),))
+x = curs.fetchone()[0]
+print "  ->", x.encode('utf-8'), ":", type(x)
+curs.execute("SELECT %s::TEXT AS foo", (u'àèìòù',))
+x = curs.fetchone()[0]
+print "  ->", x.encode('utf-8'), ":", type(x)
+
+print "Executing full UNICODE queries"
+
+print "Setting backend encoding to LATIN1 and executing queries:"
+conn.set_client_encoding('LATIN1')
+curs = conn.cursor()
+curs.execute(u"SELECT %s::TEXT AS foo", ('àèìòù',))
+x = curs.fetchone()[0]
+print "  ->", x.encode('utf-8'), ":", type(x)
+curs.execute(u"SELECT %s::TEXT AS foo", (u'àèìòù',))
+x = curs.fetchone()[0]
+print "  ->", x.encode('utf-8'), ":", type(x)
+
+print "Setting backend encoding to UTF8 and executing queries:"
+conn.set_client_encoding('UNICODE')
+curs = conn.cursor()
+curs.execute(u"SELECT %s::TEXT AS foo", (u'àèìòù'.encode('utf-8'),))
+x = curs.fetchone()[0]
+print "  ->", x.encode('utf-8'), ":", type(x)
+curs.execute(u"SELECT %s::TEXT AS foo", (u'àèìòù',))
+x = curs.fetchone()[0]
+print "  ->", x.encode('utf-8'), ":", type(x)
diff --git a/psycopg2/examples/fetch.py b/psycopg2/examples/fetch.py
new file mode 100644 (file)
index 0000000..dab0a41
--- /dev/null
@@ -0,0 +1,81 @@
+# fetch.py -- example about declaring cursors
+#
+# Copyright (C) 2001-2005 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.
+#
+
+## put in DSN your DSN string
+
+DSN = 'dbname=test'
+
+## don't modify anything below tis line (except for experimenting)
+
+import sys
+import psycopg2
+
+if len(sys.argv) > 1:
+    DSN = sys.argv[1]
+
+print "Opening connection using dns:", DSN
+conn = psycopg2.connect(DSN)
+print "Encoding for this connection is", conn.encoding
+
+curs = conn.cursor()
+try:
+    curs.execute("CREATE TABLE test_fetch (val int4)")
+except:
+    conn.rollback()
+    curs.execute("DROP TABLE test_fetch")
+    curs.execute("CREATE TABLE test_fetch (val int4)")
+conn.commit()
+
+# we use this function to format the output
+
+def flatten(l):
+    """Flattens list of tuples l."""
+    return map(lambda x: x[0], l)
+
+# insert 20 rows in the table
+
+for i in range(20):
+    curs.execute("INSERT INTO test_fetch VALUES(%s)", (i,))
+conn.commit()
+
+# does some nice tricks with the transaction and postgres cursors
+# (remember to always commit or rollback before a DECLARE)
+#
+# we don't need to DECLARE ourselves, psycopg now support named
+# cursors (but we leave the code here, comments, as an example of
+# what psycopg is doing under the hood)
+#
+#curs.execute("DECLARE crs CURSOR FOR SELECT * FROM test_fetch")
+#curs.execute("FETCH 10 FROM crs")
+#print "First 10 rows:", flatten(curs.fetchall())
+#curs.execute("MOVE -5 FROM crs")
+#print "Moved back cursor by 5 rows (to row 5.)"
+#curs.execute("FETCH 10 FROM crs")
+#print "Another 10 rows:", flatten(curs.fetchall())
+#curs.execute("FETCH 10 FROM crs")
+#print "The remaining rows:", flatten(curs.fetchall())
+
+ncurs = conn.cursor("crs")
+ncurs.execute("SELECT * FROM test_fetch")
+print "First 10 rows:", flatten(ncurs.fetchmany(10))
+ncurs.scroll(-5)
+print "Moved back cursor by 5 rows (to row 5.)"
+print "Another 10 rows:", flatten(ncurs.fetchmany(10))
+print "Another one:", list(ncurs.fetchone())
+print "The remaining rows:", flatten(ncurs.fetchall())
+conn.rollback()
+
+curs.execute("DROP TABLE test_fetch")
+conn.commit()
diff --git a/psycopg2/examples/lastrowid.py b/psycopg2/examples/lastrowid.py
new file mode 100644 (file)
index 0000000..205ef6c
--- /dev/null
@@ -0,0 +1,59 @@
+# lastrowid.py -  example of using .lastrowid attribute
+#
+# Copyright (C) 2001-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.
+
+## put in DSN your DSN string
+
+DSN = 'dbname=test'
+
+## don't modify anything below tis line (except for experimenting)
+
+import sys, psycopg2
+
+if len(sys.argv) > 1:
+    DSN = sys.argv[1]
+
+print "Opening connection using dns:", DSN
+conn = psycopg2.connect(DSN)
+curs = conn.cursor()
+
+try:
+    curs.execute("CREATE TABLE test_oid (name text, surname text)")
+except:
+    conn.rollback()
+    curs.execute("DROP TABLE test_oid")
+    curs.execute("CREATE TABLE test_oid (name text, surname text)")
+conn.commit()
+
+data = ({'name':'Federico', 'surname':'Di Gregorio'},
+        {'name':'Pierluigi', 'surname':'Di Nunzio'})
+
+curs.execute("""INSERT INTO test_oid
+                VALUES (%(name)s, %(surname)s)""", data[0])
+
+foid = curs.lastrowid
+print "Oid for %(name)s %(surname)s" % data[0], "is", foid
+
+curs.execute("""INSERT INTO test_oid
+                VALUES (%(name)s, %(surname)s)""", data[1])
+moid = curs.lastrowid
+print "Oid for %(name)s %(surname)s" % data[1], "is", moid
+
+curs.execute("SELECT * FROM test_oid WHERE oid = %s", (foid,))
+print "Oid", foid, "selected %s %s" % curs.fetchone()
+
+curs.execute("SELECT * FROM test_oid WHERE oid = %s", (moid,))
+print "Oid", moid, "selected %s %s" % curs.fetchone()
+
+curs.execute("DROP TABLE test_oid")
+conn.commit()
diff --git a/psycopg2/examples/mogrify.py b/psycopg2/examples/mogrify.py
new file mode 100644 (file)
index 0000000..480c491
--- /dev/null
@@ -0,0 +1,47 @@
+# mogrify.py - test all possible simple type mogrifications
+# -*- encoding: latin1 -*-
+#
+# Copyright (C) 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.
+
+## put in DSN your DSN string
+
+DSN = 'dbname=test'
+
+## don't modify anything below this line (except for experimenting)
+
+import sys, psycopg2
+
+if len(sys.argv) > 1:
+    DSN = sys.argv[1]
+
+print "Opening connection using dns:", DSN
+
+conn = psycopg2.connect(DSN)
+print "Encoding for this connection is", conn.encoding
+
+curs = conn.cursor()
+curs.execute("SELECT %(foo)s AS foo", {'foo':'bar'})
+curs.execute("SELECT %(foo)s AS foo", {'foo':None})
+curs.execute("SELECT %(foo)s AS foo", {'foo':True})
+curs.execute("SELECT %(foo)s AS foo", {'foo':42})
+curs.execute("SELECT %(foo)s AS foo", {'foo':u'yatt�!'})
+curs.execute("SELECT %(foo)s AS foo", {'foo':u'bar'})
+
+print curs.mogrify("SELECT %(foo)s AS foo", {'foo':'bar'})
+print curs.mogrify("SELECT %(foo)s AS foo", {'foo':None})
+print curs.mogrify("SELECT %(foo)s AS foo", {'foo':True})
+print curs.mogrify("SELECT %(foo)s AS foo", {'foo':42})
+print curs.mogrify("SELECT %(foo)s AS foo", {'foo':u'yatt�!'})
+print curs.mogrify("SELECT %(foo)s AS foo", {'foo':u'bar'})
+
+conn.rollback()
diff --git a/psycopg2/examples/myfirstrecipe.py b/psycopg2/examples/myfirstrecipe.py
new file mode 100644 (file)
index 0000000..4ddc65e
--- /dev/null
@@ -0,0 +1,122 @@
+"""
+Using a tuple as a bound variable in "SELECT ... IN (...)" clauses
+in PostgreSQL using psycopg 2
+
+Some time ago someone asked on the psycopg mailing list how to have a
+bound variable expand to the right SQL for an SELECT IN clause:
+
+    SELECT * FROM atable WHERE afield IN (value1, value2, value3)
+
+with the values to be used in the IN clause to be passed to the cursor
+.execute() method in a tuple as a bound variable, i.e.:
+
+    in_values = ("value1", "value2", "value3")
+    curs.execute("SELECT ... IN %s", (in_values,))
+
+psycopg 1 does support typecasting from Python to PostgreSQL (and back)
+only for simple types and this problem has no elegant solution (short or
+writing a wrapper class returning the pre-quoted text in an __str__
+method.
+
+But psycopg 2 offers a simple and elegant solution by partially
+implementing the Object Adaptation from PEP 246. psycopg 2 (still in
+beta and currently labeled as 1.99.9) moves the type-casting logic into
+external adapters and a somehow broken adapt() function.
+
+While the original adapt() takes 3 arguments, psycopg's one only takes
+1: the bound variable to be adapted. The result is an object supporting
+a not-yet well defined protocol that we can call IPsycopgSQLQuote:
+
+    class IPsycopgSQLQuote:
+
+        def getquoted(self):
+            "Returns a quoted string representing the bound variable."
+
+       def getbinary(self):
+           "Returns a binary quoted string representing the bound variable."
+           
+       def getbuffer(self):
+            "Returns the wrapped object itself."
+
+        __str__ = getquoted
+
+Then one of the functions (usually .getquoted()) is called by psycopg at
+the right time to obtain the right, sql-quoted representation for the
+corresponding bound variable.
+
+The nice part is that the default, built-in adapters, derived from
+psycopg 1 tyecasting code can be overridden by the programmer, simply
+replacing them in the psycopg.extensions.adapters dictionary.
+
+Then the solution to the original problem is now obvious: write an
+adapter that adapts tuple objects into the right SQL string, by calling
+recursively adapt() on each element.
+
+Note: psycopg 2 adapter code is still very young and will probably move
+to a more 'standard' (3 arguments) implementation for the adapt()
+function; as long as that does not slow down too much query execution.
+
+Psycopg 2 development can be tracked on the psycopg mailing list:
+
+   http://lists.initd.org/mailman/listinfo/psycopg
+
+and on the psycopg 2 wiki:
+
+   http://wiki.initd.org/Projects/Psycopg2
+
+"""
+
+import psycopg2
+import psycopg2.extensions
+from psycopg2.extensions import adapt as psycoadapt
+from psycopg2.extensions import register_adapter
+
+class AsIs(object):
+    """An adapter that just return the object 'as is'.
+
+    psycopg 1.99.9 has some optimizations that make impossible to call
+    adapt() without adding some basic adapters externally. This limitation
+    will be lifted in a future release.
+    """
+    def __init__(self, obj):
+        self.__obj = obj
+    def getquoted(self):
+        return self.__obj
+    
+class SQL_IN(object):
+    """Adapt a tuple to an SQL quotable object."""
+    
+    def __init__(self, seq):
+       self._seq = seq
+
+    def prepare(self, conn):
+        pass
+
+    def getquoted(self):
+        # this is the important line: note how every object in the
+        # list is adapted and then how getquoted() is called on it
+
+       qobjs = [str(psycoadapt(o).getquoted()) for o in self._seq]
+
+       return '(' + ', '.join(qobjs) + ')'
+       
+    __str__ = getquoted
+
+    
+# add our new adapter class to psycopg list of adapters
+register_adapter(tuple, SQL_IN)
+register_adapter(float, AsIs)
+register_adapter(int, AsIs)
+
+# usually we would call:
+#
+#     conn = psycopg.connect("...")
+#     curs = conn.cursor()
+#     curs.execute("SELECT ...", (("this", "is", "the", "tuple"),))
+#     
+# but we have no connection to a database right now, so we just check
+# the SQL_IN class by calling psycopg's adapt() directly:
+
+if __name__ == '__main__':
+    print "Note how the string will be SQL-quoted, but the number will not:"
+    print psycoadapt(("this is an 'sql quoted' str\\ing", 1, 2.0))
diff --git a/psycopg2/examples/notify.py b/psycopg2/examples/notify.py
new file mode 100644 (file)
index 0000000..83761b9
--- /dev/null
@@ -0,0 +1,43 @@
+# notify.py - example of getting notifies
+#
+# Copyright (C) 2001-2005 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.
+
+## put in DSN your DSN string
+
+DSN = 'dbname=test'
+
+## don't modify anything below tis line (except for experimenting)
+
+import sys
+import psycopg2
+import select
+
+if len(sys.argv) > 1:
+    DSN = sys.argv[1]
+
+print "Opening connection using dns:", DSN
+conn = psycopg2.connect(DSN)
+print "Encoding for this connection is", conn.encoding
+
+conn.set_isolation_level(0)
+curs = conn.cursor()
+
+curs.execute("listen test")
+
+print "Waiting for 'NOTIFY test'"
+while 1:
+    if select.select([curs],[],[],5)==([],[],[]):
+        print "Timeout"
+    else:
+        if curs.isready():
+            print "Got NOTIFY: %s" % str(curs.connection.notifies.pop()) 
diff --git a/psycopg2/examples/simple.py b/psycopg2/examples/simple.py
new file mode 100644 (file)
index 0000000..2306be1
--- /dev/null
@@ -0,0 +1,53 @@
+# simple.py - very simple example of plain DBAPI-2.0 usage
+# currently used as test-me-stress-me script for psycopg 2.0
+#
+# Copyright (C) 2001-2003 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.
+
+## put in DSN your DSN string
+
+DSN = 'dbname=test'
+
+## don't modify anything below this line (except for experimenting)
+
+class SimpleQuoter(object):
+    def sqlquote(x=None):
+        return "'bar'"
+
+import sys
+import psycopg2
+
+if len(sys.argv) > 1:
+    DSN = sys.argv[1]
+
+print "Opening connection using dns:", DSN
+conn = psycopg2.connect(DSN)
+print "Encoding for this connection is", conn.encoding
+
+curs = conn.cursor()
+curs.execute("SELECT 1 AS foo")
+print curs.fetchone()
+curs.execute("SELECT 1 AS foo")
+print curs.fetchmany()
+curs.execute("SELECT 1 AS foo")
+print curs.fetchall()
+
+conn.rollback()
+
+sys.exit(0)
+
+curs.execute("SELECT 1 AS foo", async=1)
+
+curs.execute("SELECT %(foo)s AS foo", {'foo':'bar'})
+curs.execute("SELECT %(foo)s AS foo", {'foo':None})
+curs.execute("SELECT %(foo)f AS foo", {'foo':42})
+curs.execute("SELECT %(foo)s AS foo", {'foo':SimpleQuoter()})
diff --git a/psycopg2/examples/somehackers.jpg b/psycopg2/examples/somehackers.jpg
new file mode 100644 (file)
index 0000000..8bb6e01
Binary files /dev/null and b/psycopg2/examples/somehackers.jpg differ
diff --git a/psycopg2/examples/threads.py b/psycopg2/examples/threads.py
new file mode 100644 (file)
index 0000000..5477aa8
--- /dev/null
@@ -0,0 +1,160 @@
+# threads.py -- example of multiple threads using psycopg
+# -*- encoding: latin1 -*-
+#
+# Copyright (C) 2001-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.
+
+## put in DSN your DSN string
+
+DSN = 'dbname=test'
+
+## some others parameters
+INSERT_THREADS = ('A', 'B', 'C')
+SELECT_THREADS = ('1', '2')
+
+ROWS = 1000
+
+COMMIT_STEP = 20
+SELECT_SIZE = 10000
+SELECT_STEP = 500
+SELECT_DIV  = 250
+
+# the available modes are:
+# 0 - one connection for all insert and one for all select threads
+# 1 - connections generated using the connection pool
+
+MODE = 1
+
+## don't modify anything below tis line (except for experimenting)
+
+import sys, psycopg2, threading
+from psycopg2.pool import ThreadedConnectionPool
+
+if len(sys.argv) > 1:
+    DSN = sys.argv[1]
+if len(sys.argv) > 2:
+    MODE = int(sys.argv[2])
+    
+print "Opening connection using dns:", DSN
+conn = psycopg2.connect(DSN)
+curs = conn.cursor()
+
+try:
+    curs.execute("""CREATE TABLE test_threads (
+                        name text, value1 int4, value2 float)""")
+except:
+    conn.rollback()
+    curs.execute("DROP TABLE test_threads")
+    curs.execute("""CREATE TABLE test_threads (
+                        name text, value1 int4, value2 float)""")
+conn.commit()
+
+
+## this function inserts a big number of rows and creates and destroys
+## a large number of cursors
+
+def insert_func(conn_or_pool, rows):
+    name = threading.currentThread().getName()
+
+    if MODE == 0:
+        conn = conn_or_pool
+    else:
+        conn = conn_or_pool.getconn()
+        
+    for i in range(rows):
+        if divmod(i, COMMIT_STEP)[1] == 0:
+            conn.commit()
+            if MODE == 1:
+                conn_or_pool.putconn(conn)
+            s = name + ": COMMIT STEP " + str(i)
+            print s
+            if MODE == 1:
+                conn = conn_or_pool.getconn()
+        c = conn.cursor()
+        try:
+            c.execute("INSERT INTO test_threads VALUES (%s, %s, %s)",
+                      (str(i), i, float(i)))
+        except psycopg2.ProgrammingError, err:
+            print name, ": an error occurred; skipping this insert"
+            print err
+    conn.commit()
+
+## a nice select function that prints the current number of rows in the
+## database (and transefer them, putting some pressure on the network)
+    
+def select_func(conn_or_pool, z):
+    name = threading.currentThread().getName()
+
+    if MODE == 0:
+        conn = conn_or_pool
+        conn.set_isolation_level(0)
+    
+    for i in range(SELECT_SIZE):
+        if divmod(i, SELECT_STEP)[1] == 0:
+            try:
+                if MODE == 1:
+                    conn = conn_or_pool.getconn()
+                    conn.set_isolation_level(0)
+                c = conn.cursor()
+                c.execute("SELECT * FROM test_threads WHERE value2 < %s",
+                          (int(i/z),))
+                l = c.fetchall()
+                if MODE == 1:
+                    conn_or_pool.putconn(conn)
+                s = name + ": number of rows fetched: " + str(len(l))
+                print s
+            except psycopg2.ProgrammingError, err:
+                print name, ": an error occurred; skipping this select"
+                print err
+
+## create the connection pool or the connections
+if MODE == 0:
+    conn_insert = psycopg2.connect(DSN)
+    conn_select = psycopg2.connect(DSN)
+else:
+    m = len(INSERT_THREADS) + len(SELECT_THREADS)
+    n = m/2
+    conn_insert = conn_select = ThreadedConnectionPool(n, m, DSN)
+    
+## create the threads
+threads = []
+
+print "Creating INSERT threads:"
+for name in INSERT_THREADS:
+    t = threading.Thread(None, insert_func, 'Thread-'+name,
+                         (conn_insert, ROWS))
+    t.setDaemon(0)
+    threads.append(t)
+
+print "Creating SELECT threads:"
+for name in SELECT_THREADS:
+    t = threading.Thread(None, select_func, 'Thread-'+name,
+                         (conn_select, SELECT_DIV))
+    t.setDaemon(0)
+    threads.append(t)
+
+## really start the threads now
+for t in threads:
+    t.start()
+
+# and wait for them to finish
+for t in threads:
+    t.join()
+    print t.getName(), "exited OK"
+
+
+conn.commit()
+curs.execute("SELECT count(name) FROM test_threads")
+print "Inserted", curs.fetchone()[0], "rows."
+
+curs.execute("DROP TABLE test_threads")
+conn.commit()
diff --git a/psycopg2/examples/tz.py b/psycopg2/examples/tz.py
new file mode 100644 (file)
index 0000000..c27bf30
--- /dev/null
@@ -0,0 +1,69 @@
+# tz.py - example of datetime objects with time zones
+# -*- encoding: utf8 -*-
+#
+# Copyright (C) 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.
+
+## put in DSN your DSN string
+
+DSN = 'dbname=test'
+
+## don't modify anything below this line (except for experimenting)
+
+import sys
+import psycopg2
+import datetime
+
+from psycopg2.tz import ZERO, LOCAL, FixedOffsetTimezone
+
+if len(sys.argv) > 1:
+    DSN = sys.argv[1]
+
+print "Opening connection using dns:", DSN
+conn = psycopg2.connect(DSN)
+curs = conn.cursor()
+
+try:
+    curs.execute("CREATE TABLE test_tz (t timestamp with time zone)")
+except:
+    conn.rollback()
+    curs.execute("DROP TABLE test_tz")
+    curs.execute("CREATE TABLE test_tz (t timestamp with time zone)")
+conn.commit()
+
+d = datetime.datetime(1971, 10, 19, 22, 30, 0, tzinfo=LOCAL)
+curs.execute("INSERT INTO test_tz VALUES (%s)", (d,))
+print "Inserted timestamp with timezone:", d
+print "Time zone:", d.tzinfo.tzname(d), "offset:", d.tzinfo.utcoffset(d)
+
+tz = FixedOffsetTimezone(-5*60, "EST")
+d = datetime.datetime(1971, 10, 19, 22, 30, 0, tzinfo=tz)
+curs.execute("INSERT INTO test_tz VALUES (%s)", (d,))
+print "Inserted timestamp with timezone:", d
+print "Time zone:", d.tzinfo.tzname(d), "offset:", d.tzinfo.utcoffset(d)
+
+curs.execute("SELECT * FROM test_tz")
+d = curs.fetchone()[0]
+curs.execute("INSERT INTO test_tz VALUES (%s)", (d,))
+print "Inserted SELECTed timestamp:", d
+print "Time zone:", d.tzinfo.tzname(d), "offset:", d.tzinfo.utcoffset(d)
+
+curs.execute("SELECT * FROM test_tz")
+for d in curs:
+    u = d[0].utcoffset() or ZERO
+    print "UTC time:  ", d[0] - u 
+    print "Local time:", d[0]
+    print "Time zone:", d[0].tzinfo.tzname(d[0]), d[0].tzinfo.utcoffset(d[0])
+    
+
+curs.execute("DROP TABLE test_tz")
+conn.commit()
diff --git a/psycopg2/examples/usercast.py b/psycopg2/examples/usercast.py
new file mode 100644 (file)
index 0000000..5c8031f
--- /dev/null
@@ -0,0 +1,126 @@
+# usercast.py -- example of user defined typecasters
+# -*- encoding: latin-1 -*-
+#
+# Copyright (C) 2001-2005 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.
+
+## put in DSN your DSN string
+
+DSN = 'dbname=test'
+
+## don't modify anything below tis line (except for experimenting)
+
+import sys
+import psycopg2
+import psycopg2.extensions
+import whrandom
+
+# importing psycopg.extras will give us a nice tuple adapter: this is wrong
+# because the adapter is meant to be used in SQL IN clauses while we use
+# tuples to represent points but it works and the example is about Rect, not
+# "Point"
+import psycopg2.extras
+
+if len(sys.argv) > 1:
+    DSN = sys.argv[1]
+
+print "Opening connection using dns:", DSN
+conn = psycopg2.connect(DSN)
+print "Initial encoding for this connection is", conn.encoding
+
+curs = conn.cursor()
+try:
+    curs.execute("CREATE TABLE test_cast (p1 point, p2 point, b box)")
+except:
+    conn.rollback()
+    curs.execute("DROP TABLE test_cast")
+    curs.execute("CREATE TABLE test_cast (p1 point, p2 point, b box)")
+conn.commit()
+
+# this is the callable object we use as a typecast (the typecast is
+# usually a function, but we use a class, just to demonstrate the
+# flexibility of the psycopg casting system
+
+class Rect(object):
+    """Very simple rectangle.
+
+    Note that we use this type as a data holder, as an adapter of itself for
+    the ISQLQuote protocol used by psycopg's adapt() (see __confrom__ below)
+    and eventually as a type-caster for the data extracted from the database
+    (that's why __init__ takes the curs argument.)
+    """
+    
+    def __init__(self, s=None, curs=None):
+        """Init the rectangle from the optional string s."""
+        self.x = self.y = self.width = self.height = 0.0
+        if s: self.from_string(s)
+
+    def __conform__(self, proto):
+        """This is a terrible hack, just ignore proto and return self."""
+        if proto == psycopg2.extensions.ISQLQuote:
+            return self
+    
+    def from_points(self, x0, y0, x1, y1):
+        """Init the rectangle from points."""
+        if x0 > x1: (x0, x1) = (x1, x0)
+        if y0 > y1: (y0, y1) = (y1, y0)
+        self.x = x0
+        self.y = y0
+        self.width = x1 - x0
+        self.height = y1 - y0
+
+    def from_string(self, s):
+        """Init the rectangle from a string."""
+        seq = eval(s)
+        self.from_points(seq[0][0], seq[0][1], seq[1][0], seq[1][1])
+
+    def getquoted(self):
+        """Format self as a string usable by the db to represent a box."""
+        s = "'((%d,%d),(%d,%d))'" % (
+            self.x, self.y, self.x + self.width, self.y + self.height)
+        return s
+
+    def show(self):
+        """Format a description of the box."""
+        s = "X: %d\tY: %d\tWidth: %d\tHeight: %d" % (
+            self.x, self.y, self.width, self.height)
+        return s
+    
+# here we select from the empty table, just to grab the description
+curs.execute("SELECT b FROM test_cast WHERE 0=1")
+boxoid = curs.description[0][1]
+print "Oid for the box datatype is", boxoid
+
+# and build the user cast object
+BOX = psycopg2.extensions.new_type((boxoid,), "BOX", Rect)
+psycopg2.extensions.register_type(BOX)
+
+# now insert 100 random data (2 points and a box in each row)
+for i in range(100):
+    p1 = (whrandom.randint(0,100), whrandom.randint(0,100))
+    p2 = (whrandom.randint(0,100), whrandom.randint(0,100))
+    b = Rect()
+    b.from_points(whrandom.randint(0,100), whrandom.randint(0,100),
+                  whrandom.randint(0,100), whrandom.randint(0,100))
+    curs.execute("INSERT INTO test_cast VALUES ('%(p1)s', '%(p2)s', %(box)s)",
+                 {'box':b, 'p1':p1, 'p2':p2})
+print "Added 100 boxed to the database"
+
+# select and print all boxes with at least one point inside
+curs.execute("SELECT b FROM test_cast WHERE p1 @ b OR p2 @ b")
+boxes = curs.fetchall()
+print "Found %d boxes with at least a point inside:" % len(boxes)
+for box in boxes:
+    print " ", box[0].show()
+
+curs.execute("DROP TABLE test_cast")
+conn.commit()
diff --git a/psycopg2/examples/whereareyou.jpg b/psycopg2/examples/whereareyou.jpg
new file mode 100644 (file)
index 0000000..f508c0b
Binary files /dev/null and b/psycopg2/examples/whereareyou.jpg differ
diff --git a/psycopg2/lib/__init__.py b/psycopg2/lib/__init__.py
new file mode 100644 (file)
index 0000000..e40caa3
--- /dev/null
@@ -0,0 +1,72 @@
+"""A Python driver for PostgreSQL
+
+psycopg is a PostgreSQL_ database adapter for the Python_ programming
+language. This is version 2, a complete rewrite of the original code to
+provide new-style classes for connection and cursor objects and other sweet
+candies. Like the original, psycopg 2 was written with the aim of being very
+small and fast, and stable as a rock.
+
+Homepage: http://initd.org/projects/psycopg2
+
+.. _PostgreSQL: http://www.postgresql.org/
+.. _Python: http://www.python.org/
+
+:Groups:
+  * `Connections creation`: connect
+  * `Value objects constructors`: Binary, Date, DateFromTicks, Time,
+    TimeFromTicks, Timestamp, TimestampFromTicks
+"""
+# psycopg/__init__.py - initialization of the psycopg 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 modules needed by _psycopg to allow tools like py2exe to do
+# their work without bothering about the module dependencies.
+# 
+# TODO: we should probably use the Warnings framework to signal a missing
+# module instead of raising an exception (in case we're running a thin
+# embedded Python or something even more devious.)
+
+import sys, warnings
+if sys.version_info[0] >= 2 and sys.version_info[1] >= 3:
+    try:
+        import datetime as _psycopg_needs_datetime
+    except:
+        warnings.warn(
+            "can't import datetime module probably needed by _psycopg",
+            RuntimeWarning)
+if sys.version_info[0] >= 2 and sys.version_info[1] >= 4:
+    try:
+        import decimal as _psycopg_needs_decimal
+    except:
+        warnings.warn(
+            "can't import decimal module probably needed by _psycopg",
+            RuntimeWarning)
+from psycopg2 import tz
+del sys, warnings
+
+# Import the DBAPI-2.0 stuff into top-level module.
+
+from _psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
+
+from _psycopg import Binary, Date, Time, Timestamp
+from _psycopg import DateFromTicks, TimeFromTicks, TimestampFromTicks
+
+from _psycopg import Error, Warning, DataError, DatabaseError, ProgrammingError
+from _psycopg import IntegrityError, InterfaceError, InternalError
+from _psycopg import NotSupportedError, OperationalError
+
+from _psycopg import connect, apilevel, threadsafety, paramstyle
+from _psycopg import __version__
+
+__all__ = [ k for k in locals().keys() if not k.startswith('_') ]
diff --git a/psycopg2/lib/extensions.py b/psycopg2/lib/extensions.py
new file mode 100644 (file)
index 0000000..9233d1d
--- /dev/null
@@ -0,0 +1,69 @@
+"""psycopg extensions to the DBAPI-2.0
+
+This module holds all the extensions to the DBAPI-2.0 provided by psycopg.
+
+- `connection` -- the new-type inheritable connection class
+- `cursor` -- the new-type inheritable cursor class
+- `adapt()` -- exposes the PEP-246_ compatible adapting mechanism used
+  by psycopg to adapt Python types to PostgreSQL ones
+  
+.. _PEP-246: http://www.python.org/peps/pep-0246.html
+"""
+# psycopg/extensions.py - DBAPI-2.0 extensions specific to psycopg
+#
+# 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.
+
+from _psycopg import UNICODE, INTEGER, LONGINTEGER, BOOLEAN, FLOAT
+from _psycopg import TIME, DATE, INTERVAL
+
+from _psycopg import Boolean, QuotedString, AsIs
+try:
+    from _psycopg import DateFromMx, TimeFromMx, TimestampFromMx
+    from _psycopg import IntervalFromMx
+except:
+    pass
+try:
+    from _psycopg import DateFromPy, TimeFromPy, TimestampFromPy
+    from _psycopg import IntervalFromPy
+except:
+    pass
+
+from _psycopg import adapt, adapters, encodings, connection, cursor
+from _psycopg import string_types, binary_types, new_type, register_type
+from _psycopg import ISQLQuote
+
+"""Isolation level values."""
+ISOLATION_LEVEL_AUTOCOMMIT     = 0
+ISOLATION_LEVEL_READ_COMMITTED = 1 
+ISOLATION_LEVEL_SERIALIZABLE   = 2
+
+# PostgreSQL maps the the other standard values to already defined levels
+ISOLATION_LEVEL_REPEATABLE_READ  = ISOLATION_LEVEL_SERIALIZABLE
+ISOLATION_LEVEL_READ_UNCOMMITTED = ISOLATION_LEVEL_READ_COMMITTED
+
+"""Transaction status values."""
+STATUS_SETUP = 0
+STATUS_READY    = 1
+STATUS_BEGIN    = 2
+STATUS_SYNC     = 3
+STATUS_ASYNC    = 4
+
+# This is a usefull mnemonic to check if the connection is in a transaction
+STATUS_IN_TRANSACTION = STATUS_BEGIN
+
+
+def register_adapter(typ, callable):
+    """Register 'callable' as an ISQLQuote adapter for type 'typ'."""
+    adapters[(typ, ISQLQuote)] = callable
+
+__all__ = [ k for k in locals().keys() if not k.startswith('_') ]
diff --git a/psycopg2/lib/extras.py b/psycopg2/lib/extras.py
new file mode 100644 (file)
index 0000000..847bdb7
--- /dev/null
@@ -0,0 +1,235 @@
+"""Miscellaneous goodies for psycopg2
+
+This module is a generic place used to hold little helper functions
+and classes untill a better place in the distribution is found.
+"""
+# psycopg/extras.py - miscellaneous extra goodies for psycopg
+#
+# 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 os
+import time
+
+try:
+    import logging
+except:
+    logging = None
+    
+from psycopg2.extensions import cursor as _cursor
+from psycopg2.extensions import connection as _connection
+from psycopg2.extensions import register_adapter as _RA
+from psycopg2.extensions import adapt as _A
+
+
+class DictConnection(_connection):
+    """A connection that uses DictCursor automatically."""
+    def cursor(self):
+        return _connection.cursor(self, cursor_factory=DictCursor)
+
+class DictCursor(_cursor):
+    """A cursor that keeps a list of column name -> index mappings."""
+
+    __query_executed = 0
+    
+    def execute(self, query, vars=None, async=0):
+        self.row_factory = DictRow
+        self.index = {}
+        self.__query_executed = 1
+        return _cursor.execute(self, query, vars, async)
+    
+    def callproc(self, procname, vars=None):
+        self.row_factory = DictRow
+        self.index = {}
+        self.__query_executed = 1
+        return _cursor.callproc(self, procname, vars)   
+
+    def _build_index(self):
+        if self.__query_executed == 1 and self.description:
+            for i in range(len(self.description)):
+                self.index[self.description[i][0]] = i
+            self.__query_executed = 0
+            
+    def fetchone(self):
+        res = _cursor.fetchone(self)
+        if self.__query_executed:
+            self._build_index()
+        return res
+
+    def fetchmany(self, size=None):
+        res = _cursor.fetchmany(self, size)
+        if self.__query_executed:
+            self._build_index()
+        return res
+
+    def fetchall(self):
+        res = _cursor.fetchall(self)
+        if self.__query_executed:
+            self._build_index()
+        return res
+    
+    def next(self):
+        res = _cursor.fetchone(self)
+        if res is None:
+            raise StopIteration()
+        if self.__query_executed:
+            self._build_index()
+        return res
+
+class DictRow(list):
+    """A row object that allow by-colun-name access to data."""
+
+    def __init__(self, cursor):
+        self._index = cursor.index
+        self[:] = [None] * len(cursor.description)
+
+    def __getitem__(self, x):
+        if type(x) != int:
+            x = self._index[x]
+        return list.__getitem__(self, x)
+
+    def items(self):
+        res = []
+        for n, v in self._index.items():
+            res.append((n, list.__getitem__(self, v)))
+        return res
+    
+    def keys(self):
+        return self._index.keys()
+
+    def values(self):
+        return tuple(self[:])
+
+    def has_key(self, x):
+        return self._index.has_key(x)
+
+    def get(self, x, default=None):
+        try:
+            return self[x]
+        except:
+            return default
+
+
+class SQL_IN(object):
+    """Adapt any iterable to an SQL quotable object."""
+    
+    def __init__(self, seq):
+        self._seq = seq
+
+    def prepare(self, conn):
+        self._conn = conn
+    
+    def getquoted(self):
+        # this is the important line: note how every object in the
+        # list is adapted and then how getquoted() is called on it
+        pobjs = [_A(o) for o in self._seq]
+        for obj in pobjs:
+            if hasattr(obj, 'prepare'):
+                obj.prepare(self._conn)
+        qobjs = [str(o.getquoted()) for o in pobjs]
+        return '(' + ', '.join(qobjs) + ')'
+
+    __str__ = getquoted
+    
+_RA(tuple, SQL_IN)
+
+    
+class LoggingConnection(_connection):
+    """A connection that logs all queries to a file or logger object."""
+
+    def initialize(self, logobj):
+        """Initialize the connection to log to `logobj`.
+        
+        The `logobj` parameter can be an open file object or a Logger instance
+        from the standard logging module.
+        """
+        self._logobj = logobj
+        if logging and isinstance(logobj, logging.Logger):
+            self.log = self._logtologger
+        else:
+            self.log = self._logtofile
+    
+    def filter(self, msg, curs):
+        """Filter the query before logging it.
+        
+        This is the method to overwrite to filter unwanted queries out of the
+        log or to add some extra data to the output. The default implementation
+        just does nothing.
+        """
+        return msg
+    
+    def _logtofile(self, msg, curs):
+        msg = self.filter(msg, curs)
+        if msg: self._logobj.write(msg + os.linesep)
+        
+    def _logtologger(self, msg, curs):
+        msg = self.filter(msg, curs)
+        if msg: self._logobj.debug(msg)
+    
+    def _check(self):
+        if not hasattr(self, '_logobj'):
+            raise self.ProgrammingError(
+                "LoggingConnection object has not been initialize()d")
+            
+    def cursor(self):
+        self._check()
+        return _connection.cursor(self, cursor_factory=LoggingCursor)
+    
+class LoggingCursor(_cursor):
+    """A cursor that logs queries using its connection logging facilities."""
+
+    def execute(self, query, vars=None, async=0):
+        try:
+            return _cursor.execute(self, query, vars, async)
+        finally:
+            self.connection.log(self.query, self)
+
+    def callproc(self, procname, vars=None):
+        try:
+            return _cursor.callproc(self, procname, vars)  
+        finally:
+            self.connection.log(self.query, self)
+
+            
+class MinTimeLoggingConnection(LoggingConnection):
+    """A connection that logs queries based on execution time.
+    
+    This is just an example of how to sub-class LoggingConnection to provide
+    some extra filtering for the logged queries. Both the `.inizialize()` and
+    `.filter()` methods are overwritten to make sure that only queries
+    executing for more than `mintime` ms are logged.
+    
+    Note that this connection uses the specialized cursor MinTimeLoggingCursor.
+    """
+    def initialize(self, logobj, mintime=0):
+        LoggingConnection.initialize(self, logobj)
+        self._mintime = mintime
+        
+    def filter(self, msg, curs):
+        t = (time.time() - curs.timestamp) * 1000
+        if t > self._mintime:
+            return msg + os.linesep + "  (execution time: %d ms)" % t
+
+    def cursor(self):
+        self._check()
+        return _connection.cursor(self, cursor_factory=MinTimeLoggingCursor)
+    
+class MinTimeLoggingCursor(LoggingCursor):
+    """The cursor sub-class companion to MinTimeLoggingConnection."""
+
+    def execute(self, query, vars=None, async=0):
+        self.timestamp = time.time()
+        return LoggingCursor.execute(self, query, vars, async)
+    
+    def callproc(self, procname, vars=None):
+        self.timestamp = time.time()
+        return LoggingCursor.execute(self, procname, var)
diff --git a/psycopg2/lib/pool.py b/psycopg2/lib/pool.py
new file mode 100644 (file)
index 0000000..0468db6
--- /dev/null
@@ -0,0 +1,236 @@
+"""Connection pooling for psycopg2
+
+This module implements thread-safe (and not) connection pools.
+"""
+# psycopg/pool.py - pooling code for psycopg
+#
+# 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 psycopg2
+
+try:
+    import logging
+    # do basic initialization if the module is not already initialized
+    logging.basicConfig(level=logging.INFO,
+                        format='%(asctime)s %(levelname)s %(message)s')
+    # create logger object for psycopg2 module and sub-modules
+    _logger = logging.getLogger("psycopg2")
+    def dbg(*args):
+        _logger.debug("psycopg2", ' '.join([str(x) for x in args]))
+    try:
+        import App # does this make sure that we're running in Zope?
+        _logger.info("installed. Logging using Python logging module")
+    except:
+        _logger.debug("installed. Logging using Python logging module")
+    
+except ImportError:
+    from zLOG import LOG, DEBUG, INFO
+    def dbg(*args):
+        LOG('ZPsycopgDA',  DEBUG, "",
+            ' '.join([str(x) for x in args])+'\n')
+    LOG('ZPsycopgDA', INFO, "Installed", "Logging using Zope's zLOG\n") 
+
+except:
+    import sys
+    def dbg(*args):
+        sys.stderr.write(' '.join(args)+'\n')
+
+
+class PoolError(psycopg2.Error):
+    pass
+
+
+class AbstractConnectionPool(object):
+    """Generic key-based pooling code."""
+
+    def __init__(self, minconn, maxconn, *args, **kwargs):
+        """Initialize the connection pool.
+
+        New 'minconn' connections are created immediately calling 'connfunc'
+        with given parameters. The connection pool will support a maximum of
+        about 'maxconn' connections.        
+        """
+        self.minconn = minconn
+        self.maxconn = maxconn
+        self.closed = False
+        
+        self._args = args
+        self._kwargs = kwargs
+
+        self._pool = []
+        self._used = {}
+        self._rused = {} # id(conn) -> key map
+        self._keys = 0
+
+        for i in range(self.minconn):
+            self._connect()
+
+    def _connect(self, key=None):
+        """Create a new connection and assign it to 'key' if not None."""
+        conn = psycopg2.connect(*self._args, **self._kwargs)
+        if key is not None:
+            self._used[key] = conn
+            self._rused[id(conn)] = key
+        else:
+            self._pool.append(conn)
+        return conn
+
+    def _getkey(self):
+        """Return a new unique key."""
+        self._keys += 1
+        return self._keys
+            
+    def _getconn(self, key=None):
+        """Get a free connection and assign it to 'key' if not None."""
+        if self.closed: raise PoolError("connection pool is closed")
+        if key is None: key = self._getkey()
+       
+        if self._used.has_key(key):
+            return self._used[key]
+
+        if self._pool:
+            self._used[key] = conn = self._pool.pop()
+            self._rused[id(conn)] = key
+            return conn
+        else:
+            if len(self._used) == self.maxconn:
+                raise PoolError("connection pool exausted")
+            return self._connect(key)
+                
+    def _putconn(self, conn, key=None, close=False):
+        """Put away a connection."""
+        if self.closed: raise PoolError("connection pool is closed")
+        if key is None: key = self._rused[id(conn)]
+
+        if not key:
+            raise PoolError("trying to put unkeyed connection")
+
+        if len(self._pool) < self.minconn and not close:
+            self._pool.append(conn)
+        else:
+            conn.close()
+
+        # here we check for the presence of key because it can happen that a
+        # thread tries to put back a connection after a call to close
+        if not self.closed or key in self._used:
+            del self._used[key]
+            del self._rused[id(conn)]
+
+    def _closeall(self):
+        """Close all connections.
+
+        Note that this can lead to some code fail badly when trying to use
+        an already closed connection. If you call .closeall() make sure
+        your code can deal with it.
+        """
+        if self.closed: raise PoolError("connection pool is closed")
+        for conn in self._pool + list(self._used.values()):
+            try:
+                print "Closing connection", conn
+                conn.close()
+            except:
+                pass
+        self.closed = True
+        
+
+class SimpleConnectionPool(AbstractConnectionPool):
+    """A connection pool that can't be shared across different threads."""
+
+    getconn = AbstractConnectionPool._getconn
+    putconn = AbstractConnectionPool._putconn
+    closeall   = AbstractConnectionPool._closeall
+
+
+class ThreadedConnectionPool(AbstractConnectionPool):
+    """A connection pool that works with the threading module."""
+
+    def __init__(self, minconn, maxconn, *args, **kwargs):
+        """Initialize the threading lock."""
+        import threading
+        AbstractConnectionPool.__init__(
+            self, minconn, maxconn, *args, **kwargs)
+        self._lock = threading.Lock()
+
+    def getconn(self, key=None):
+        """Get a free connection and assign it to 'key' if not None."""
+        self._lock.acquire()
+        try:
+            return self._getconn(key)
+        finally:
+            self._lock.release()
+
+    def putconn(self, conn=None, key=None, close=False):
+        """Put away an unused connection."""
+        self._lock.acquire()
+        try:
+            self._putconn(conn, key, close)
+        finally:
+            self._lock.release()
+
+    def closeall(self):
+        """Close all connections (even the one currently in use.)"""
+        self._lock.acquire()
+        try:
+            self._closeall()
+        finally:
+            self._lock.release()
+
+
+class PersistentConnectionPool(AbstractConnectionPool):
+    """A pool that assigns persistent connections to different threads. 
+
+    Note that this connection pool generates by itself the required keys
+    using the current thread id.  This means that untill a thread put away
+    a connection it will always get the same connection object by successive
+    .getconn() calls. This also means that a thread can't use more than one
+    single connection from the pool.
+    """
+
+    def __init__(self, minconn, maxconn, *args, **kwargs):
+        """Initialize the threading lock."""
+        import threading
+        AbstractConnectionPool.__init__(
+            self, minconn, maxconn, *args, **kwargs)
+        self._lock = threading.Lock()
+
+        # 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
+
+    def getconn(self):
+        """Generate thread id and return a connection."""
+        key = self.__thread.get_ident()
+        self._lock.acquire()
+        try:
+            return self._getconn(key)
+        finally:
+            self._lock.release()
+
+    def putconn(self, conn=None, close=False):
+        """Put away an unused connection."""
+        key = self.__thread.get_ident()
+        self._lock.acquire()
+        try:
+            if not conn: conn = self._used[key]
+            self._putconn(conn, key, close)
+        finally:
+            self._lock.release()
+
+    def closeall(self):
+        """Close all connections (even the one currently in use.)"""
+        self._lock.acquire()
+        try:
+            self._closeall()
+        finally:
+            self._lock.release()
diff --git a/psycopg2/lib/psycopg1.py b/psycopg2/lib/psycopg1.py
new file mode 100644 (file)
index 0000000..d539888
--- /dev/null
@@ -0,0 +1,87 @@
+"""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
+
diff --git a/psycopg2/lib/tz.py b/psycopg2/lib/tz.py
new file mode 100644 (file)
index 0000000..e521b6d
--- /dev/null
@@ -0,0 +1,100 @@
+"""tzinfo implementations for psycopg2
+
+This module holds two different tzinfo implementations that can be used as
+the 'tzinfo' argument to datetime constructors, directly passed to psycopg
+functions or used to set the .tzinfo_factory attribute in cursors. 
+"""
+# psycopg/tz.py - tzinfo implementation
+#
+# 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 datetime
+import time
+
+
+ZERO = datetime.timedelta(0)
+
+class FixedOffsetTimezone(datetime.tzinfo):
+    """Fixed offset in minutes east from UTC.
+
+    This is exactly the implementation found in Python 2.3.x documentation,
+    with a small change to the __init__ method to allow for pickling and a
+    default name in the form 'sHH:MM' ('s' is the sign.)
+    """
+    _name = None
+    _offset = ZERO
+    
+    def __init__(self, offset=None, name=None):
+        if offset is not None:
+            self._offset = datetime.timedelta(minutes = offset)
+        if name is not None:
+            self._name = name
+
+    def utcoffset(self, dt):
+        return self._offset
+
+    def tzname(self, dt):
+        if self._name is not None:
+            return self._name
+        else:
+            seconds = self._offset.seconds + self._offset.days * 86400
+            hours, seconds = divmod(seconds, 3600)
+            minutes = seconds/60
+            if minutes:
+                return "%+03d:%d" % (hours, minutes)
+            else:
+                return "%+03d" % hours
+            
+    def dst(self, dt):
+        return ZERO
+
+
+STDOFFSET = datetime.timedelta(seconds = -time.timezone)
+if time.daylight:
+    DSTOFFSET = datetime.timedelta(seconds = -time.altzone)
+else:
+    DSTOFFSET = STDOFFSET
+DSTDIFF = DSTOFFSET - STDOFFSET
+
+class LocalTimezone(datetime.tzinfo):
+    """Platform idea of local timezone.
+
+    This is the exact implementation from the Pyhton 2.3 documentation.
+    """
+    
+    def utcoffset(self, dt):
+        if self._isdst(dt):
+            return DSTOFFSET
+        else:
+            return STDOFFSET
+
+    def dst(self, dt):
+        if self._isdst(dt):
+            return DSTDIFF
+        else:
+            return ZERO
+
+    def tzname(self, dt):
+        return time.tzname[self._isdst(dt)]
+
+    def _isdst(self, dt):
+        tt = (dt.year, dt.month, dt.day,
+              dt.hour, dt.minute, dt.second,
+              dt.weekday(), 0, -1)
+        stamp = time.mktime(tt)
+        tt = time.localtime(stamp)
+        return tt.tm_isdst > 0
+
+LOCAL = LocalTimezone()
+
+# TODO: pre-generate some interesting time zones?
diff --git a/psycopg2/psycopg/adapter_asis.c b/psycopg2/psycopg/adapter_asis.c
new file mode 100644 (file)
index 0000000..75ee0e4
--- /dev/null
@@ -0,0 +1,227 @@
+/* adapter_asis.c - adapt types as they are
+ *
+ * Copyright (C) 2003-2004 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <Python.h>
+#include <structmember.h>
+#include <stringobject.h>
+#include <string.h>
+
+#define PSYCOPG_MODULE
+#include "psycopg/config.h"
+#include "psycopg/python.h"
+#include "psycopg/psycopg.h"
+#include "psycopg/adapter_asis.h"
+#include "psycopg/microprotocols_proto.h"
+
+/** the AsIs object **/
+
+static PyObject *
+asis_str(asisObject *self)
+{
+    if (self->wrapped == Py_None) {
+        return PyString_FromString("NULL");
+    }
+    else {
+        return PyObject_Str(self->wrapped);
+    }
+}
+
+PyObject *
+asis_getquoted(asisObject *self, PyObject *args)
+{
+    if (!PyArg_ParseTuple(args, "")) return NULL;
+    return asis_str(self);
+}
+
+PyObject *
+asis_conform(asisObject *self, PyObject *args)
+{
+    PyObject *res, *proto;
+    
+    if (!PyArg_ParseTuple(args, "O", &proto)) return NULL;
+
+    if (proto == (PyObject*)&isqlquoteType)
+        res = (PyObject*)self;
+    else
+        res = Py_None;
+    
+    Py_INCREF(res);
+    return res;
+}
+
+/** the AsIs object */
+
+/* object member list */
+
+static struct PyMemberDef asisObject_members[] = {
+    {"adapted", T_OBJECT, offsetof(asisObject, wrapped), RO},
+    {NULL}
+};
+
+/* object method table */
+
+static PyMethodDef asisObject_methods[] = {
+    {"getquoted", (PyCFunction)asis_getquoted, METH_VARARGS,
+     "getquoted() -> wrapped object value as SQL-quoted string"},
+    {"__conform__", (PyCFunction)asis_conform, METH_VARARGS, NULL},
+    {NULL}  /* Sentinel */
+};
+
+/* initialization and finalization methods */
+
+static int
+asis_setup(asisObject *self, PyObject *obj)
+{
+    Dprintf("asis_setup: init asis object at %p, refcnt = %d",
+            self, ((PyObject *)self)->ob_refcnt);
+
+    self->wrapped = obj;
+    Py_INCREF(self->wrapped);
+    
+    Dprintf("asis_setup: good asis object at %p, refcnt = %d",
+            self, ((PyObject *)self)->ob_refcnt);
+    return 0;
+}
+
+static void
+asis_dealloc(PyObject* obj)
+{
+    asisObject *self = (asisObject *)obj;
+
+    Py_XDECREF(self->wrapped);
+    
+    Dprintf("asis_dealloc: deleted asis object at %p, refcnt = %d",
+            obj, obj->ob_refcnt);
+    
+    obj->ob_type->tp_free(obj);
+}
+
+static int
+asis_init(PyObject *obj, PyObject *args, PyObject *kwds)
+{
+    PyObject *o;
+    
+    if (!PyArg_ParseTuple(args, "O", &o))
+        return -1;
+
+    return asis_setup((asisObject *)obj, o);
+}
+
+static PyObject *
+asis_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{    
+    return type->tp_alloc(type, 0);
+}
+
+static void
+asis_del(PyObject* self)
+{
+    PyObject_Del(self);
+}
+
+static PyObject *
+asis_repr(asisObject *self)
+{
+    return PyString_FromFormat("<psycopg2._psycopg.AsIs object at %p>", self);
+}
+
+
+/* object type */
+
+#define asisType_doc \
+"AsIs(str) -> new AsIs adapter object"
+
+PyTypeObject asisType = {
+    PyObject_HEAD_INIT(NULL)
+    0,
+    "psycopg2._psycopg.AsIs",
+    sizeof(asisObject),
+    0,
+    asis_dealloc, /*tp_dealloc*/
+    0,          /*tp_print*/
+
+    0,          /*tp_getattr*/
+    0,          /*tp_setattr*/ 
+
+    0,          /*tp_compare*/
+
+    (reprfunc)asis_repr, /*tp_repr*/
+    0,          /*tp_as_number*/
+    0,          /*tp_as_sequence*/
+    0,          /*tp_as_mapping*/
+    0,          /*tp_hash */
+
+    0,          /*tp_call*/
+    (reprfunc)asis_str, /*tp_str*/
+    
+    0,          /*tp_getattro*/
+    0,          /*tp_setattro*/
+    0,          /*tp_as_buffer*/
+
+    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /*tp_flags*/
+    asisType_doc, /*tp_doc*/
+    
+    0,          /*tp_traverse*/
+    0,          /*tp_clear*/
+
+    0,          /*tp_richcompare*/
+    0,          /*tp_weaklistoffset*/
+
+    0,          /*tp_iter*/
+    0,          /*tp_iternext*/
+
+    /* Attribute descriptor and subclassing stuff */
+
+    asisObject_methods, /*tp_methods*/
+    asisObject_members, /*tp_members*/
+    0,          /*tp_getset*/
+    0,          /*tp_base*/
+    0,          /*tp_dict*/
+    
+    0,          /*tp_descr_get*/
+    0,          /*tp_descr_set*/
+    0,          /*tp_dictoffset*/
+    
+    asis_init, /*tp_init*/
+    0, /*tp_alloc  will be set to PyType_GenericAlloc in module init*/
+    asis_new, /*tp_new*/
+    (freefunc)asis_del, /*tp_free  Low-level free-memory routine */
+    0,          /*tp_is_gc For PyObject_IS_GC */
+    0,          /*tp_bases*/
+    0,          /*tp_mro method resolution order */
+    0,          /*tp_cache*/
+    0,          /*tp_subclasses*/
+    0           /*tp_weaklist*/
+};
+
+
+/** module-level functions **/
+
+PyObject *
+psyco_AsIs(PyObject *module, PyObject *args)
+{
+    PyObject *obj;
+     
+    if (!PyArg_ParseTuple(args, "O", &obj))
+        return NULL;
+  
+    return PyObject_CallFunction((PyObject *)&asisType, "O", obj);
+}
diff --git a/psycopg2/psycopg/adapter_asis.h b/psycopg2/psycopg/adapter_asis.h
new file mode 100644 (file)
index 0000000..9495c58
--- /dev/null
@@ -0,0 +1,51 @@
+/* adapter_asis.h - definition for the psycopg AsIs type wrapper
+ *
+ * Copyright (C) 2003-2005 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PSYCOPG_ASIS_H
+#define PSYCOPG_ASIS_H 1
+
+#include <Python.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern PyTypeObject asisType;
+
+typedef struct {
+    PyObject HEAD;
+
+    /* this is the real object we wrap */
+    PyObject *wrapped;
+
+} asisObject;
+
+/* functions exported to psycopgmodule.c */
+    
+extern PyObject *psyco_AsIs(PyObject *module, PyObject *args);
+#define psyco_AsIs_doc \
+    "AsIs(obj) -> new AsIs wrapper object"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined(PSYCOPG_ASIS_H) */
diff --git a/psycopg2/psycopg/adapter_binary.c b/psycopg2/psycopg/adapter_binary.c
new file mode 100644 (file)
index 0000000..0fc8101
--- /dev/null
@@ -0,0 +1,382 @@
+/* adapter_binary.c - Binary objects
+ *
+ * Copyright (C) 2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <Python.h>
+#include <structmember.h>
+#include <stringobject.h>
+
+#include <libpq-fe.h>
+#include <string.h>
+
+#define PSYCOPG_MODULE
+#include "psycopg/config.h"
+#include "psycopg/python.h"
+#include "psycopg/psycopg.h"
+#include "psycopg/connection.h"
+#include "psycopg/adapter_binary.h"
+#include "psycopg/microprotocols_proto.h"
+
+/** the quoting code */
+
+#ifndef PSYCOPG_OWN_QUOTING
+static unsigned char *
+binary_escape(unsigned char *from, unsigned int from_length,
+               unsigned int *to_length, PGconn *conn)
+{
+#if PG_MAJOR_VERSION > 8 || \
+ (PG_MAJOR_VERSION == 8 && PG_MINOR_VERSION > 1) || \
+ (PG_MAJOR_VERSION == 8 && PG_MINOR_VERSION == 1 && PG_PATCH_VERSION >= 4)
+    if (conn)
+        return PQescapeByteaConn(conn, from, from_length, to_length);
+    else
+#endif
+        return PQescapeBytea(from, from_length, to_length);
+}
+#else
+static unsigned char *
+binary_escape(unsigned char *from, unsigned int from_length,
+               unsigned int *to_length, PGconn *conn)
+{
+    unsigneed char *quoted, *chptr, *newptr;
+    int i, space, new_space;
+
+    space = from_length + 2;
+
+    Py_BEGIN_ALLOW_THREADS;
+
+    quoted = (unsigned char*)calloc(space, sizeof(char));
+    if (quoted == NULL) return NULL;
+
+    chptr = quoted;
+
+    for (i=0; i < len; i++) {
+        if (chptr - quoted > space - 6) {
+            new_space  =  space * ((space) / (i + 1)) + 2 + 6;
+            if (new_space - space < 1024) space += 1024;
+            else space = new_space;
+            newptr = (unsigned char *)realloc(quoted, space);
+            if (newptr == NULL) {
+                free(quoted);
+                return NULL;
+            }
+            /* chptr has to be moved to the new location*/
+            chptr = newptr + (chptr - quoted);
+            quoted = newptr;
+            Dprintf("binary_escape: reallocated %i bytes at %p", space,quoted);
+        }
+        if (from[i]) {
+            if (from[i] >= ' ' && from[i] <= '~') {
+                if (from[i] == '\'') {
+                    *chptr = '\'';
+                    chptr++;
+                    *chptr = '\'';
+                    chptr++;
+                }
+                else if (from[i] == '\\') {
+                    memcpy(chptr, "\\\\\\\\", 4);
+                    chptr += 4;
+                }
+                else {
+                    /* leave it as it is if ascii printable */
+                    *chptr = from[i];
+                    chptr++;
+                }
+            }
+            else {
+                unsigned char c;
+                
+                /* escape to octal notation \nnn */
+                *chptr++ = '\\';
+                *chptr++ = '\\';
+                c = from[i];
+                *chptr = ((c >> 6) & 0x07) + 0x30; chptr++;
+                *chptr = ((c >> 3) & 0x07) + 0x30; chptr++;
+                *chptr = ( c       & 0x07) + 0x30; chptr++;
+            }
+        }
+        else {
+            /* escape null as \\000 */
+            memcpy(chptr, "\\\\000", 5);
+            chptr += 5;
+        }
+    }
+    *chptr = '\0';
+
+    Py_END_ALLOW_THREADS;
+
+    *to_size = chptr - quoted + 1;
+    return quoted;
+}
+#endif
+
+/* binary_quote - do the quote process on plain and unicode strings */
+
+static PyObject *
+binary_quote(binaryObject *self)
+{
+    char *to;
+    const char *buffer;
+    int buffer_len;
+    size_t len = 0;
+
+    /* if we got a plain string or a buffer we escape it and save the buffer */
+    if (PyString_Check(self->wrapped) || PyBuffer_Check(self->wrapped)) {
+        /* escape and build quoted buffer */
+        PyObject_AsCharBuffer(self->wrapped, &buffer, &buffer_len);
+
+        to = (char *)binary_escape((unsigned char*)buffer, buffer_len, &len,
+            self->conn ? ((connectionObject*)self->conn)->pgconn : NULL);
+        if (to == NULL) {
+            PyErr_NoMemory();
+            return NULL;
+        }
+
+       if (len > 0)
+            self->buffer = PyString_FromFormat("'%s'", to);
+       else
+            self->buffer = PyString_FromString("''");
+        PQfreemem(to);
+    }
+    
+    /* if the wrapped object is not a string or a buffer, this is an error */ 
+    else {
+        PyErr_SetString(PyExc_TypeError, "can't escape non-string object");
+        return NULL;
+    }
+    
+    return self->buffer;
+}
+
+/* binary_str, binary_getquoted - return result of quoting */
+
+static PyObject *
+binary_str(binaryObject *self)
+{
+    if (self->buffer == NULL) {
+        binary_quote(self);
+    }
+    Py_XINCREF(self->buffer);
+    return self->buffer;
+}
+
+PyObject *
+binary_getquoted(binaryObject *self, PyObject *args)
+{
+    if (!PyArg_ParseTuple(args, "")) return NULL;
+    return binary_str(self);
+}
+
+PyObject *
+binary_prepare(binaryObject *self, PyObject *args)
+{
+    connectionObject *conn;
+
+    if (!PyArg_ParseTuple(args, "O", &conn))
+        return NULL;
+
+    Py_XDECREF(self->conn);
+    if (conn) {
+        self->conn = (PyObject*)conn;
+        Py_INCREF(self->conn);
+    }
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+PyObject *
+binary_conform(binaryObject *self, PyObject *args)
+{
+    PyObject *res, *proto;
+    
+    if (!PyArg_ParseTuple(args, "O", &proto)) return NULL;
+
+    if (proto == (PyObject*)&isqlquoteType)
+        res = (PyObject*)self;
+    else
+        res = Py_None;
+    
+    Py_INCREF(res);
+    return res;
+}
+
+/** the Binary object **/
+
+/* object member list */
+
+static struct PyMemberDef binaryObject_members[] = {
+    {"adapted", T_OBJECT, offsetof(binaryObject, wrapped), RO},
+    {"buffer", T_OBJECT, offsetof(binaryObject, buffer), RO},
+    {NULL}
+};
+
+/* object method table */
+
+static PyMethodDef binaryObject_methods[] = {
+    {"getquoted", (PyCFunction)binary_getquoted, METH_VARARGS,
+     "getquoted() -> wrapped object value as SQL-quoted binary string"},
+    {"prepare", (PyCFunction)binary_prepare, METH_VARARGS,
+     "prepare(conn) -> prepare for binary encoding using conn"},
+    {"__conform__", (PyCFunction)binary_conform, METH_VARARGS, NULL},
+    {NULL}  /* Sentinel */
+};
+
+/* initialization and finalization methods */
+
+static int
+binary_setup(binaryObject *self, PyObject *str)
+{
+    Dprintf("binary_setup: init binary object at %p, refcnt = %d",
+            self, ((PyObject *)self)->ob_refcnt);
+
+    self->buffer = NULL;
+    self->conn = NULL;
+    self->wrapped = str;
+    Py_INCREF(self->wrapped);
+    
+    Dprintf("binary_setup: good binary object at %p, refcnt = %d",
+            self, ((PyObject *)self)->ob_refcnt);
+    return 0;
+}
+
+static void
+binary_dealloc(PyObject* obj)
+{
+    binaryObject *self = (binaryObject *)obj;
+
+    Py_XDECREF(self->wrapped);
+    Py_XDECREF(self->buffer);
+    Py_XDECREF(self->conn);
+    
+    Dprintf("binary_dealloc: deleted binary object at %p, refcnt = %d",
+            obj, obj->ob_refcnt);
+    
+    obj->ob_type->tp_free(obj);
+}
+
+static int
+binary_init(PyObject *obj, PyObject *args, PyObject *kwds)
+{
+    PyObject *str;
+    
+    if (!PyArg_ParseTuple(args, "O", &str))
+        return -1;
+
+    return binary_setup((binaryObject *)obj, str);
+}
+
+static PyObject *
+binary_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{    
+    return type->tp_alloc(type, 0);
+}
+
+static void
+binary_del(PyObject* self)
+{
+    PyObject_Del(self);
+}
+
+static PyObject *
+binary_repr(binaryObject *self)
+{
+    return PyString_FromFormat("<psycopg2._psycopg.Binary object at %p>", self);
+}
+
+/* object type */
+
+#define binaryType_doc \
+"Binary(buffer) -> new binary object"
+
+PyTypeObject binaryType = {
+    PyObject_HEAD_INIT(NULL)
+    0,
+    "psycopg2._psycopg.Binary",
+    sizeof(binaryObject),
+    0,
+    binary_dealloc, /*tp_dealloc*/
+    0,          /*tp_print*/
+    0,          /*tp_getattr*/
+    0,          /*tp_setattr*/   
+
+    0,          /*tp_compare*/
+    (reprfunc)binary_repr, /*tp_repr*/
+    0,          /*tp_as_number*/
+    0,          /*tp_as_sequence*/
+    0,          /*tp_as_mapping*/
+    0,          /*tp_hash */
+
+    0,          /*tp_call*/
+    (reprfunc)binary_str, /*tp_str*/
+    0,          /*tp_getattro*/
+    0,          /*tp_setattro*/
+    0,          /*tp_as_buffer*/
+
+    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /*tp_flags*/
+
+    binaryType_doc, /*tp_doc*/
+    
+    0,          /*tp_traverse*/
+    0,          /*tp_clear*/
+
+    0,          /*tp_richcompare*/
+    0,          /*tp_weaklistoffset*/
+
+    0,          /*tp_iter*/
+    0,          /*tp_iternext*/
+
+    /* Attribute descriptor and subclassing stuff */
+
+    binaryObject_methods, /*tp_methods*/
+    binaryObject_members, /*tp_members*/
+    0,          /*tp_getset*/
+    0,          /*tp_base*/
+    0,          /*tp_dict*/
+    
+    0,          /*tp_descr_get*/
+    0,          /*tp_descr_set*/
+    0,          /*tp_dictoffset*/
+    
+    binary_init, /*tp_init*/
+    0, /*tp_alloc  will be set to PyType_GenericAlloc in module init*/
+    binary_new, /*tp_new*/
+    (freefunc)binary_del, /*tp_free  Low-level free-memory routine */
+    0,          /*tp_is_gc For PyObject_IS_GC */
+    0,          /*tp_bases*/
+    0,          /*tp_mro method resolution order */
+    0,          /*tp_cache*/
+    0,          /*tp_subclasses*/
+    0           /*tp_weaklist*/
+};
+
+
+/** module-level functions **/
+
+PyObject *
+psyco_Binary(PyObject *module, PyObject *args)
+{
+    PyObject *str;
+    
+    if (!PyArg_ParseTuple(args, "O", &str))
+        return NULL;
+  
+    return PyObject_CallFunction((PyObject *)&binaryType, "O", str);
+}
diff --git a/psycopg2/psycopg/adapter_binary.h b/psycopg2/psycopg/adapter_binary.h
new file mode 100644 (file)
index 0000000..262a72d
--- /dev/null
@@ -0,0 +1,53 @@
+/* adapter_binary.h - definition for the Binary type
+ *
+ * Copyright (C) 2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PSYCOPG_BINARY_H
+#define PSYCOPG_BINARY_H 1
+
+#include <Python.h>
+#include <libpq-fe.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern PyTypeObject binaryType;
+
+typedef struct {
+    PyObject HEAD;
+
+    PyObject *wrapped;
+    PyObject *buffer;
+    PyObject *conn;
+} binaryObject;
+
+/* functions exported to psycopgmodule.c */
+    
+extern PyObject *psyco_Binary(PyObject *module, PyObject *args);
+#define psyco_Binary_doc \
+    "Binary(buffer) -> new binary object\n\n" \
+    "Build an object capable to hold a bynary string value."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined(PSYCOPG_BINARY_H) */
diff --git a/psycopg2/psycopg/adapter_datetime.c b/psycopg2/psycopg/adapter_datetime.c
new file mode 100644 (file)
index 0000000..6409cef
--- /dev/null
@@ -0,0 +1,461 @@
+/* adapter_datetime.c - python date/time objects
+ *
+ * Copyright (C) 2004 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <Python.h>
+#include <structmember.h>
+#include <stringobject.h>
+#include <datetime.h>
+
+#include <time.h>
+#include <string.h>
+
+#define PSYCOPG_MODULE
+#include "psycopg/config.h"
+#include "psycopg/python.h"
+#include "psycopg/psycopg.h"
+#include "psycopg/adapter_datetime.h"
+#include "psycopg/microprotocols_proto.h"
+
+
+/* the pointer to the datetime module API is initialized by the module init
+   code, we just need to grab it */
+extern PyObject* pyDateTimeModuleP;
+extern PyObject *pyDateTypeP;
+extern PyObject *pyTimeTypeP;
+extern PyObject *pyDateTimeTypeP;
+extern PyObject *pyDeltaTypeP;
+
+extern PyObject *pyPsycopgTzModule;
+extern PyObject *pyPsycopgTzLOCAL;
+
+/* datetime_str, datetime_getquoted - return result of quoting */
+
+static PyObject *
+pydatetime_str(pydatetimeObject *self)
+{
+    if (self->type <= PSYCO_DATETIME_TIMESTAMP) {
+        PyObject *res = NULL;
+        PyObject *iso = PyObject_CallMethod(self->wrapped, "isoformat", NULL);
+        if (iso) {
+            res = PyString_FromFormat("'%s'", PyString_AsString(iso));
+            Py_DECREF(iso);
+        }
+        return res;
+    }
+    else {
+        PyDateTime_Delta *obj = (PyDateTime_Delta*)self->wrapped;
+        
+        char buffer[8];
+        int i;
+        int a = obj->microseconds;
+        
+        for (i=0; i < 6 ; i++) {
+            buffer[5-i] = '0' + (a % 10);
+            a /= 10;
+        }
+        buffer[6] = '\0';
+
+        return PyString_FromFormat("'%d days %d.%s seconds'",
+                                   obj->days, obj->seconds, buffer);
+    }
+}
+
+PyObject *
+pydatetime_getquoted(pydatetimeObject *self, PyObject *args)
+{
+    if (!PyArg_ParseTuple(args, "")) return NULL;
+    return pydatetime_str(self);
+}
+
+PyObject *
+pydatetime_conform(pydatetimeObject *self, PyObject *args)
+{
+    PyObject *res, *proto;
+    
+    if (!PyArg_ParseTuple(args, "O", &proto)) return NULL;
+
+    if (proto == (PyObject*)&isqlquoteType)
+        res = (PyObject*)self;
+    else
+        res = Py_None;
+    
+    Py_INCREF(res);
+    return res;
+}
+
+/** the DateTime wrapper object **/
+
+/* object member list */
+
+static struct PyMemberDef pydatetimeObject_members[] = {
+    {"adapted", T_OBJECT, offsetof(pydatetimeObject, wrapped), RO},
+    {"type", T_INT, offsetof(pydatetimeObject, type), RO},
+    {NULL}
+};
+
+/* object method table */
+
+static PyMethodDef pydatetimeObject_methods[] = {
+    {"getquoted", (PyCFunction)pydatetime_getquoted, METH_VARARGS,
+     "getquoted() -> wrapped object value as SQL date/time"},
+    {"__conform__", (PyCFunction)pydatetime_conform, METH_VARARGS, NULL},
+    {NULL}  /* Sentinel */
+};
+
+/* initialization and finalization methods */
+
+static int
+pydatetime_setup(pydatetimeObject *self, PyObject *obj, int type)
+{
+    Dprintf("pydatetime_setup: init datetime object at %p, refcnt = %d",
+            self, ((PyObject *)self)->ob_refcnt);
+
+    self->type = type;
+    self->wrapped = obj;
+    Py_INCREF(self->wrapped);
+    
+    Dprintf("pydatetime_setup: good pydatetime object at %p, refcnt = %d",
+            self, ((PyObject *)self)->ob_refcnt);
+    return 0;
+}
+
+static void
+pydatetime_dealloc(PyObject* obj)
+{
+    pydatetimeObject *self = (pydatetimeObject *)obj;
+
+    Py_XDECREF(self->wrapped);
+    
+    Dprintf("mpydatetime_dealloc: deleted pydatetime object at %p, "
+            "refcnt = %d", obj, obj->ob_refcnt);
+    
+    obj->ob_type->tp_free(obj);
+}
+
+static int
+pydatetime_init(PyObject *obj, PyObject *args, PyObject *kwds)
+{
+    PyObject *dt;
+    int type = -1; /* raise an error if type was not passed! */
+    
+    if (!PyArg_ParseTuple(args, "O|i", &dt, &type))
+        return -1;
+
+    return pydatetime_setup((pydatetimeObject *)obj, dt, type);
+}
+
+static PyObject *
+pydatetime_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{    
+    return type->tp_alloc(type, 0);
+}
+
+static void
+pydatetime_del(PyObject* self)
+{
+    PyObject_Del(self);
+}
+
+static PyObject *
+pydatetime_repr(pydatetimeObject *self)
+{
+    return PyString_FromFormat("<psycopg2._psycopg.datetime object at %p>",
+                                self);
+}
+
+/* object type */
+
+#define pydatetimeType_doc \
+"datetime(datetime, type) -> new datetime wrapper object"
+
+PyTypeObject pydatetimeType = {
+    PyObject_HEAD_INIT(NULL)
+    0,
+    "psycopg2._psycopg.datetime",
+    sizeof(pydatetimeObject),
+    0,
+    pydatetime_dealloc, /*tp_dealloc*/
+    0,          /*tp_print*/
+    0,          /*tp_getattr*/
+    0,          /*tp_setattr*/   
+
+    0,          /*tp_compare*/
+    (reprfunc)pydatetime_repr, /*tp_repr*/
+    0,          /*tp_as_number*/
+    0,          /*tp_as_sequence*/
+    0,          /*tp_as_mapping*/
+    0,          /*tp_hash */
+
+    0,          /*tp_call*/
+    (reprfunc)pydatetime_str, /*tp_str*/
+    0,          /*tp_getattro*/
+    0,          /*tp_setattro*/
+    0,          /*tp_as_buffer*/
+
+    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /*tp_flags*/
+
+    pydatetimeType_doc, /*tp_doc*/
+    
+    0,          /*tp_traverse*/
+    0,          /*tp_clear*/
+
+    0,          /*tp_richcompare*/
+    0,          /*tp_weaklistoffset*/
+
+    0,          /*tp_iter*/
+    0,          /*tp_iternext*/
+
+    /* Attribute descriptor and subclassing stuff */
+
+    pydatetimeObject_methods, /*tp_methods*/
+    pydatetimeObject_members, /*tp_members*/
+    0,          /*tp_getset*/
+    0,          /*tp_base*/
+    0,          /*tp_dict*/
+    
+    0,          /*tp_descr_get*/
+    0,          /*tp_descr_set*/
+    0,          /*tp_dictoffset*/
+    
+    pydatetime_init, /*tp_init*/
+    0, /*tp_alloc  will be set to PyType_GenericAlloc in module init*/
+    pydatetime_new, /*tp_new*/
+    (freefunc)pydatetime_del, /*tp_free  Low-level free-memory routine */
+    0,          /*tp_is_gc For PyObject_IS_GC */
+    0,          /*tp_bases*/
+    0,          /*tp_mro method resolution order */
+    0,          /*tp_cache*/
+    0,          /*tp_subclasses*/
+    0           /*tp_weaklist*/
+};
+
+
+/** module-level functions **/
+
+#ifdef PSYCOPG_DEFAULT_PYDATETIME
+
+PyObject *
+psyco_Date(PyObject *self, PyObject *args) 
+{
+       PyObject *res = NULL;
+       int year, month, day;
+
+    PyObject* obj = NULL;
+    
+       if (!PyArg_ParseTuple(args, "iii", &year, &month, &day))
+           return NULL;
+
+    obj = PyObject_CallFunction(pyDateTypeP, "iii", year, month, day);
+
+    if (obj) {
+        res = PyObject_CallFunction((PyObject *)&pydatetimeType,
+                                    "Oi", obj, PSYCO_DATETIME_DATE);
+        Py_DECREF(obj);
+    }
+
+    return res;
+}
+
+PyObject *
+psyco_Time(PyObject *self, PyObject *args) 
+{
+       PyObject *res = NULL;
+    PyObject *tzinfo = NULL;
+    int hours, minutes=0;
+       double micro, seconds=0.0;
+    
+    PyObject* obj = NULL;
+
+    if (!PyArg_ParseTuple(args, "iid|O", &hours, &minutes, &seconds,
+                          &tzinfo))
+           return NULL;
+
+    micro = (seconds - floor(seconds)) * 1000000.0;
+    
+    if (tzinfo == NULL)
+       obj = PyObject_CallFunction(pyTimeTypeP, "iiii",
+            hours, minutes, (int)round(seconds), (int)round(micro));
+    else
+       obj = PyObject_CallFunction(pyTimeTypeP, "iiiiO",
+            hours, minutes, (int)round(seconds), (int)round(micro), tzinfo);
+    
+    if (obj) {
+        res = PyObject_CallFunction((PyObject *)&pydatetimeType,
+                                    "Oi", obj, PSYCO_DATETIME_TIME);
+        Py_DECREF(obj);
+    }
+
+    return res;
+}
+
+PyObject *
+psyco_Timestamp(PyObject *self, PyObject *args) 
+{
+       PyObject *res = NULL;
+    PyObject *tzinfo = NULL;
+    int year, month, day;
+       int hour=0, minute=0; /* default to midnight */
+       double micro, second=0.0;
+
+    PyObject* obj = NULL;
+    
+    if (!PyArg_ParseTuple(args, "lii|iidO", &year, &month, &day,
+                          &hour, &minute, &second, &tzinfo))
+           return NULL;
+
+    micro = (second - floor(second)) * 1000000.0;
+    
+    if (tzinfo == NULL)
+        obj = PyObject_CallFunction(pyDateTimeTypeP, "iiiiiii",
+            year, month, day, hour, minute, (int)round(second),
+            (int)round(micro));
+    else
+        obj = PyObject_CallFunction(pyDateTimeTypeP, "iiiiiiiO",
+            year, month, day, hour, minute, (int)round(second),
+            (int)round(micro), tzinfo);
+    
+    if (obj) {
+        res = PyObject_CallFunction((PyObject *)&pydatetimeType,
+                                    "Oi", obj, PSYCO_DATETIME_TIMESTAMP);
+        Py_DECREF(obj);
+    }
+    
+    return res;
+}
+
+PyObject *
+psyco_DateFromTicks(PyObject *self, PyObject *args)
+{
+    PyObject *res = NULL;
+    struct tm tm;
+    time_t t;
+    double ticks;
+
+    if (!PyArg_ParseTuple(args, "d", &ticks))
+        return NULL;
+
+    t = (time_t)round(ticks);
+    if (localtime_r(&t, &tm)) {
+        args = Py_BuildValue("iii", tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday);
+        if (args) {
+            res = psyco_Date(self, args);
+            Py_DECREF(args);
+        }
+    }    
+    return res; 
+}
+
+PyObject *
+psyco_TimeFromTicks(PyObject *self, PyObject *args)
+{
+    PyObject *res = NULL;
+    struct tm tm;
+    time_t t;
+    double ticks;
+
+    if (!PyArg_ParseTuple(args,"d", &ticks))
+        return NULL;
+
+    t = (time_t)round(ticks);
+    if (localtime_r(&t, &tm)) {
+        args = Py_BuildValue("iid", tm.tm_hour, tm.tm_min, (double)tm.tm_sec);
+        if (args) {
+            res = psyco_Time(self, args);
+            Py_DECREF(args);
+        }
+    } 
+    return res; 
+}
+
+PyObject *
+psyco_TimestampFromTicks(PyObject *self, PyObject *args)
+{
+    PyObject *res = NULL;
+    struct tm tm;
+    time_t t;
+    double ticks;
+
+    if (!PyArg_ParseTuple(args,"d", &ticks))
+        return NULL;
+    
+    t = (time_t)round(ticks);
+    if (localtime_r(&t, &tm)) {
+        args = Py_BuildValue("iiiiidO",
+                             tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday,
+                             tm.tm_hour, tm.tm_min, (double)tm.tm_sec,
+                             pyPsycopgTzLOCAL);
+        if (args) {
+            res = psyco_Timestamp(self, args);
+            Py_DECREF(args);
+        }
+    } 
+    return res; 
+}
+
+#endif
+
+PyObject *
+psyco_DateFromPy(PyObject *self, PyObject *args)
+{
+    PyObject *obj;
+
+    if (!PyArg_ParseTuple(args, "O!", pyDateTypeP, &obj))
+        return NULL;
+    
+    return PyObject_CallFunction((PyObject *)&pydatetimeType, "Oi", obj,
+                                 PSYCO_DATETIME_DATE);
+}
+
+PyObject *
+psyco_TimeFromPy(PyObject *self, PyObject *args)
+{
+    PyObject *obj;
+
+    if (!PyArg_ParseTuple(args, "O!", pyTimeTypeP, &obj))
+        return NULL;
+    
+    return PyObject_CallFunction((PyObject *)&pydatetimeType, "Oi", obj,
+                                 PSYCO_DATETIME_TIME);
+}
+
+PyObject *
+psyco_TimestampFromPy(PyObject *self, PyObject *args)
+{
+    PyObject *obj;
+
+    if (!PyArg_ParseTuple(args, "O!", pyDateTimeTypeP, &obj))
+        return NULL;
+    
+    return PyObject_CallFunction((PyObject *)&pydatetimeType, "Oi", obj,
+                                 PSYCO_DATETIME_TIMESTAMP);
+}
+
+PyObject *
+psyco_IntervalFromPy(PyObject *self, PyObject *args)
+{
+    PyObject *obj;
+
+    if (!PyArg_ParseTuple(args, "O!", pyDeltaTypeP, &obj))
+        return NULL;
+    
+    return PyObject_CallFunction((PyObject *)&pydatetimeType, "Oi", obj,
+                                 PSYCO_DATETIME_INTERVAL);
+}
diff --git a/psycopg2/psycopg/adapter_datetime.h b/psycopg2/psycopg/adapter_datetime.h
new file mode 100644 (file)
index 0000000..a32bb8d
--- /dev/null
@@ -0,0 +1,107 @@
+/* adapter_datetime.h - definition for the python date/time types
+ *
+ * Copyright (C) 2004 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PSYCOPG_DATETIME_H
+#define PSYCOPG_DATETIME_H 1
+
+#include <Python.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern PyTypeObject pydatetimeType;
+
+typedef struct {
+    PyObject HEAD;
+
+    PyObject *wrapped;
+    int       type;
+#define       PSYCO_DATETIME_TIME       0
+#define       PSYCO_DATETIME_DATE       1
+#define       PSYCO_DATETIME_TIMESTAMP  2
+#define       PSYCO_DATETIME_INTERVAL   3    
+    
+} pydatetimeObject;
+    
+    
+/* functions exported to psycopgmodule.c */
+#ifdef PSYCOPG_DEFAULT_PYDATETIME
+    
+extern PyObject *psyco_Date(PyObject *module, PyObject *args);
+#define psyco_Date_doc \
+    "Date(year, month, day) -> new date\n\n" \
+    "Build an object holding a date value."
+
+extern PyObject *psyco_Time(PyObject *module, PyObject *args);
+#define psyco_Time_doc \
+    "Time(hour, minutes, seconds, tzinfo=None) -> new time\n\n" \
+    "Build an object holding a time value."
+
+extern PyObject *psyco_Timestamp(PyObject *module, PyObject *args);
+#define psyco_Timestamp_doc \
+    "Timestamp(year, month, day, hour, minutes, seconds, tzinfo=None) -> new timestamp\n\n" \
+    "Build an object holding a timestamp value."
+
+extern PyObject *psyco_DateFromTicks(PyObject *module, PyObject *args);
+#define psyco_DateFromTicks_doc \
+    "DateFromTicks(ticks) -> new date\n\n" \
+    "Build an object holding a date value from the given ticks value.\n\n" \
+    "Ticks are the number of seconds since the epoch; see the documentation " \
+    "of the standard Python time module for details)."
+
+extern PyObject *psyco_TimeFromTicks(PyObject *module, PyObject *args);
+#define psyco_TimeFromTicks_doc \
+    "TimeFromTicks(ticks) -> new time\n\n" \
+    "Build an object holding a time value from the given ticks value.\n\n" \
+    "Ticks are the number of seconds since the epoch; see the documentation " \
+    "of the standard Python time module for details)."
+
+extern PyObject *psyco_TimestampFromTicks(PyObject *module, PyObject *args);
+#define psyco_TimestampFromTicks_doc \
+    "TimestampFromTicks(ticks) -> new timestamp\n\n" \
+    "Build an object holding a timestamp value from the given ticks value.\n\n" \
+    "Ticks are the number of seconds since the epoch; see the documentation " \
+    "of the standard Python time module for details)."
+
+#endif /* PSYCOPG_DEFAULT_PYDATETIME */
+
+extern PyObject *psyco_DateFromPy(PyObject *module, PyObject *args);
+#define psyco_DateFromPy_doc \
+    "DateFromPy(datetime.date) -> new wrapper"
+
+extern PyObject *psyco_TimeFromPy(PyObject *module, PyObject *args);
+#define psyco_TimeFromPy_doc \
+    "TimeFromPy(datetime.time) -> new wrapper"
+
+extern PyObject *psyco_TimestampFromPy(PyObject *module, PyObject *args);
+#define psyco_TimestampFromPy_doc \
+    "TimestampFromPy(datetime.datetime) -> new wrapper"
+
+extern PyObject *psyco_IntervalFromPy(PyObject *module, PyObject *args);
+#define psyco_IntervalFromPy_doc \
+    "IntervalFromPy(datetime.timedelta) -> new wrapper"
+    
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined(PSYCOPG_DATETIME_H) */
diff --git a/psycopg2/psycopg/adapter_list.c b/psycopg2/psycopg/adapter_list.c
new file mode 100644 (file)
index 0000000..29ef116
--- /dev/null
@@ -0,0 +1,297 @@
+/* adapter_list.c - python list objects
+ *
+ * Copyright (C) 2004-2005 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <Python.h>
+#include <structmember.h>
+#include <stringobject.h>
+
+#define PSYCOPG_MODULE
+#include "psycopg/config.h"
+#include "psycopg/python.h"
+#include "psycopg/psycopg.h"
+#include "psycopg/adapter_list.h"
+#include "psycopg/microprotocols.h"
+#include "psycopg/microprotocols_proto.h"
+
+
+/* list_str, list_getquoted - return result of quoting */
+
+static PyObject *
+list_quote(listObject *self)
+{
+    /*  adapt the list by calling adapt() recursively and then wrapping
+        everything into "ARRAY[]" */
+    PyObject *tmp = NULL, *str = NULL, *joined = NULL, *res = NULL;
+    int i, len;
+
+    len = PyList_GET_SIZE(self->wrapped);
+    
+    /* empty arrays are converted to NULLs (still searching for a way to
+       insert an empty array in postgresql */
+    if (len == 0) return PyString_FromString("'{}'");
+    
+    tmp = PyTuple_New(len);
+    
+    for (i=0; i<len; i++) {
+        PyObject *quoted =
+            microprotocol_getquoted(PyList_GET_ITEM(self->wrapped, i),
+                                    (connectionObject*)self->connection);
+        if (quoted == NULL) goto error;
+
+        /* here we don't loose a refcnt: SET_ITEM does not change the
+           reference count and we are just transferring ownership of the tmp
+           object to the tuple */
+        PyTuple_SET_ITEM(tmp, i, quoted);
+    }
+
+    /* now that we have a tuple of adapted objects we just need to join them
+       and put "ARRAY[] around the result */
+    str = PyString_FromString(", ");
+    joined = PyObject_CallMethod(str, "join", "(O)", tmp);
+    if (joined == NULL) goto error;
+
+    res = PyString_FromFormat("ARRAY[%s]", PyString_AsString(joined));
+    
+ error:
+    Py_XDECREF(tmp);
+    Py_XDECREF(str);
+    Py_XDECREF(joined);
+    return res;
+}
+
+PyObject *
+list_str(listObject *self, PyObject *args)
+{
+    if (!PyArg_ParseTuple(args, "")) return NULL;
+    return list_quote(self);
+}
+
+PyObject *
+list_getquoted(listObject *self, PyObject *args)
+{
+    if (!PyArg_ParseTuple(args, "")) return NULL;
+    return list_quote(self);
+}
+
+PyObject *
+list_prepare(listObject *self, PyObject *args)
+{
+    connectionObject *conn;
+
+    if (!PyArg_ParseTuple(args, "O", &conn))
+        return NULL;
+
+    /* note that we don't copy the encoding from the connection, but take a
+       reference to it; we'll need it during the recursive adapt() call (the
+       encoding is here for a future expansion that will make .getquoted()
+       work even without a connection to the backend. */
+    Py_XDECREF(self->connection);
+    self->connection = (PyObject*)conn;
+    Py_INCREF(self->connection);
+    
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+PyObject *
+list_conform(listObject *self, PyObject *args)
+{
+    PyObject *res, *proto;
+    
+    if (!PyArg_ParseTuple(args, "O", &proto)) return NULL;
+
+    if (proto == (PyObject*)&isqlquoteType)
+        res = (PyObject*)self;
+    else
+        res = Py_None;
+    
+    Py_INCREF(res);
+    return res;
+}
+
+/** the DateTime wrapper object **/
+
+/* object member list */
+
+static struct PyMemberDef listObject_members[] = {
+    {"adapted", T_OBJECT, offsetof(listObject, wrapped), RO},
+    {NULL}
+};
+
+/* object method table */
+
+static PyMethodDef listObject_methods[] = {
+    {"getquoted", (PyCFunction)list_getquoted, METH_VARARGS,
+     "getquoted() -> wrapped object value as SQL date/time"},
+    {"prepare", (PyCFunction)list_prepare, METH_VARARGS,
+     "prepare(conn) -> set encoding to conn->encoding"},    
+    {"__conform__", (PyCFunction)list_conform, METH_VARARGS, NULL},
+    {NULL}  /* Sentinel */
+};
+
+/* initialization and finalization methods */
+
+static int
+list_setup(listObject *self, PyObject *obj, char *enc)
+{
+    Dprintf("list_setup: init list object at %p, refcnt = %d",
+            self, ((PyObject *)self)->ob_refcnt);
+
+    if (!PyList_Check(obj))
+        return -1;
+
+    /* FIXME: remove this orrible strdup */
+    if (enc) self->encoding = strdup(enc);
+
+    self->connection = NULL;
+    self->wrapped = obj;
+    Py_INCREF(self->wrapped);
+    
+    Dprintf("list_setup: good list object at %p, refcnt = %d",
+            self, ((PyObject *)self)->ob_refcnt);
+    return 0;
+}
+
+static void
+list_dealloc(PyObject* obj)
+{
+    listObject *self = (listObject *)obj;
+
+    Py_XDECREF(self->wrapped);
+    Py_XDECREF(self->connection);
+    if (self->encoding) free(self->encoding);
+    
+    Dprintf("list_dealloc: deleted list object at %p, "
+            "refcnt = %d", obj, obj->ob_refcnt);
+    
+    obj->ob_type->tp_free(obj);
+}
+
+static int
+list_init(PyObject *obj, PyObject *args, PyObject *kwds)
+{
+    PyObject *l;
+    char *enc = "latin-1"; /* default encoding as in Python */
+    
+    if (!PyArg_ParseTuple(args, "O|s", &l, &enc))
+        return -1;
+
+    return list_setup((listObject *)obj, l, enc);
+}
+
+static PyObject *
+list_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{    
+    return type->tp_alloc(type, 0);
+}
+
+static void
+list_del(PyObject* self)
+{
+    PyObject_Del(self);
+}
+
+static PyObject *
+list_repr(listObject *self)
+{
+    return PyString_FromFormat("<psycopg2._psycopg.List object at %p>", self);
+}
+
+/* object type */
+
+#define listType_doc \
+"List(list) -> new list wrapper object"
+
+PyTypeObject listType = {
+    PyObject_HEAD_INIT(NULL)
+    0,
+    "psycopg2._psycopg.List",
+    sizeof(listObject),
+    0,
+    list_dealloc, /*tp_dealloc*/
+    0,          /*tp_print*/
+    0,          /*tp_getattr*/
+    0,          /*tp_setattr*/   
+
+    0,          /*tp_compare*/
+    (reprfunc)list_repr, /*tp_repr*/
+    0,          /*tp_as_number*/
+    0,          /*tp_as_sequence*/
+    0,          /*tp_as_mapping*/
+    0,          /*tp_hash */
+
+    0,          /*tp_call*/
+    (reprfunc)list_str, /*tp_str*/
+    0,          /*tp_getattro*/
+    0,          /*tp_setattro*/
+    0,          /*tp_as_buffer*/
+
+    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /*tp_flags*/
+
+    listType_doc, /*tp_doc*/
+    
+    0,          /*tp_traverse*/
+    0,          /*tp_clear*/
+
+    0,          /*tp_richcompare*/
+    0,          /*tp_weaklistoffset*/
+
+    0,          /*tp_iter*/
+    0,          /*tp_iternext*/
+
+    /* Attribute descriptor and subclassing stuff */
+
+    listObject_methods, /*tp_methods*/
+    listObject_members, /*tp_members*/
+    0,          /*tp_getset*/
+    0,          /*tp_base*/
+    0,          /*tp_dict*/
+    
+    0,          /*tp_descr_get*/
+    0,          /*tp_descr_set*/
+    0,          /*tp_dictoffset*/
+    
+    list_init, /*tp_init*/
+    0, /*tp_alloc  will be set to PyType_GenericAlloc in module init*/
+    list_new, /*tp_new*/
+    (freefunc)list_del, /*tp_free  Low-level free-memory routine */
+    0,          /*tp_is_gc For PyObject_IS_GC */
+    0,          /*tp_bases*/
+    0,          /*tp_mro method resolution order */
+    0,          /*tp_cache*/
+    0,          /*tp_subclasses*/
+    0           /*tp_weaklist*/
+};
+
+
+/** module-level functions **/
+
+PyObject *
+psyco_List(PyObject *module, PyObject *args)
+{
+    PyObject *str;
+    char *enc = "latin-1"; /* default encoding as in Python */
+    
+    if (!PyArg_ParseTuple(args, "O|s", &str, &enc))
+        return NULL;
+  
+    return PyObject_CallFunction((PyObject *)&listType, "Os", str, enc);
+}
diff --git a/psycopg2/psycopg/adapter_list.h b/psycopg2/psycopg/adapter_list.h
new file mode 100644 (file)
index 0000000..71b4286
--- /dev/null
@@ -0,0 +1,49 @@
+/* adapter_list.h - definition for the python list types
+ *
+ * Copyright (C) 2004-2005 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PSYCOPG_LIST_H
+#define PSYCOPG_LIST_H 1
+
+#include <Python.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern PyTypeObject listType;
+
+typedef struct {
+    PyObject HEAD;
+
+    PyObject *wrapped;
+    PyObject *connection;
+    char     *encoding;
+} listObject;
+
+extern PyObject *psyco_List(PyObject *module, PyObject *args);
+#define psyco_List_doc \
+    "List(list, enc) -> new quoted list"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined(PSYCOPG_LIST_H) */
diff --git a/psycopg2/psycopg/adapter_mxdatetime.c b/psycopg2/psycopg/adapter_mxdatetime.c
new file mode 100644 (file)
index 0000000..3b23148
--- /dev/null
@@ -0,0 +1,446 @@
+/* adapter_mxdatetime.c - mx date/time objects
+ *
+ * Copyright (C) 2003-2004 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <Python.h>
+#include <structmember.h>
+#include <stringobject.h>
+#include <mxDateTime.h>
+#include <string.h>
+
+#define PSYCOPG_MODULE
+#include "psycopg/config.h"
+#include "psycopg/python.h"
+#include "psycopg/psycopg.h"
+#include "psycopg/adapter_mxdatetime.h"
+#include "psycopg/microprotocols_proto.h"
+
+/* the pointer to the mxDateTime API is initialized by the module init code,
+   we just need to grab it */
+extern mxDateTimeModule_APIObject *mxDateTimeP;
+
+
+/* mxdatetime_str, mxdatetime_getquoted - return result of quoting */
+
+static PyObject *
+mxdatetime_str(mxdatetimeObject *self)
+{
+    PyObject *str = NULL, *res = NULL;
+    
+    switch (self->type) {
+
+    case PSYCO_MXDATETIME_DATE:
+    case PSYCO_MXDATETIME_TIMESTAMP:
+        str = PyObject_Str(self->wrapped);
+        
+        /* given the limitation of the mx.DateTime module that uses the same
+           type for both date and timestamp values we need to do some black
+           magic and make sure we're not using an adapt()ed timestamp as a
+           simple date */
+        if (strncmp(&(PyString_AsString(str)[11]), "00:00:00.000", 12) == 0) {
+            PyObject *tmp = 
+                PyString_FromStringAndSize(PyString_AsString(str), 10);
+            Py_DECREF(str);
+            str = tmp; 
+        }
+        break;
+
+    case PSYCO_MXDATETIME_TIME:
+    case PSYCO_MXDATETIME_INTERVAL:
+        str = PyObject_Str(self->wrapped);
+
+        /* given the limitation of the mx.DateTime module that uses the same
+           type for both time and delta values we need to do some black magic
+           and make sure we're not using an adapt()ed interval as a simple
+           time */                    
+        if (PyString_Size(str) > 8 && PyString_AsString(str)[8] == ':') {
+            mxDateTimeDeltaObject *obj = (mxDateTimeDeltaObject*)self->wrapped;
+        
+            char buffer[8];
+            int i, j, x;
+            
+            double ss = obj->hour*3600.0 + obj->minute*60.0 + obj->second;
+            int us = (int)((ss - floor(ss))*1000000);
+                
+            for (i=1000000, j=0; i > 0 ; i /= 10) {
+                x = us/i;
+                us -= x*i;
+                buffer[j++] = '0'+x;
+            }
+            buffer[j] = '\0';
+            
+            res = PyString_FromFormat("'%ld days %d.%s seconds'",
+                obj->day, (int)round(ss), buffer);
+        }
+        break;
+    }
+
+    if (str != NULL && res == NULL) {
+        res = PyString_FromFormat("'%s'", PyString_AsString(str));
+    }
+    Py_XDECREF(str);   
+
+    return res;
+}
+
+PyObject *
+mxdatetime_getquoted(mxdatetimeObject *self, PyObject *args)
+{
+    if (!PyArg_ParseTuple(args, "")) return NULL;
+    return mxdatetime_str(self);
+}
+
+PyObject *
+mxdatetime_conform(mxdatetimeObject *self, PyObject *args)
+{
+    PyObject *res, *proto;
+    
+    if (!PyArg_ParseTuple(args, "O", &proto)) return NULL;
+
+    if (proto == (PyObject*)&isqlquoteType)
+        res = (PyObject*)self;
+    else
+        res = Py_None;
+    
+    Py_INCREF(res);
+    return res;
+}
+
+/** the MxDateTime object **/
+
+/* object member list */
+
+static struct PyMemberDef mxdatetimeObject_members[] = {
+    {"adapted", T_OBJECT, offsetof(mxdatetimeObject, wrapped), RO},
+    {"type", T_INT, offsetof(mxdatetimeObject, type), RO},
+    {NULL}
+};
+
+/* object method table */
+
+static PyMethodDef mxdatetimeObject_methods[] = {
+    {"getquoted", (PyCFunction)mxdatetime_getquoted, METH_VARARGS,
+     "getquoted() -> wrapped object value as SQL date/time"},
+    {"__conform__", (PyCFunction)mxdatetime_conform, METH_VARARGS, NULL},
+    {NULL}  /* Sentinel */
+};
+
+/* initialization and finalization methods */
+
+static int
+mxdatetime_setup(mxdatetimeObject *self, PyObject *obj, int type)
+{
+    Dprintf("mxdatetime_setup: init mxdatetime object at %p, refcnt = %d",
+            self, ((PyObject *)self)->ob_refcnt);
+
+    self->type = type;
+    self->wrapped = obj;
+    Py_INCREF(self->wrapped);
+    
+    Dprintf("mxdatetime_setup: good mxdatetime object at %p, refcnt = %d",
+            self, ((PyObject *)self)->ob_refcnt);
+    return 0;
+}
+
+static void
+mxdatetime_dealloc(PyObject* obj)
+{
+    mxdatetimeObject *self = (mxdatetimeObject *)obj;
+
+    Py_XDECREF(self->wrapped);
+    
+    Dprintf("mxdatetime_dealloc: deleted mxdatetime object at %p, refcnt = %d",
+            obj, obj->ob_refcnt);
+    
+    obj->ob_type->tp_free(obj);
+}
+
+static int
+mxdatetime_init(PyObject *obj, PyObject *args, PyObject *kwds)
+{
+    PyObject *mx;
+    int type = -1; /* raise an error if type was not passed! */
+    
+    if (!PyArg_ParseTuple(args, "O|i", &mx, &type))
+        return -1;
+
+    return mxdatetime_setup((mxdatetimeObject *)obj, mx, type);
+}
+
+static PyObject *
+mxdatetime_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{    
+    return type->tp_alloc(type, 0);
+}
+
+static void
+mxdatetime_del(PyObject* self)
+{
+    PyObject_Del(self);
+}
+
+static PyObject *
+mxdatetime_repr(mxdatetimeObject *self)
+{
+    return PyString_FromFormat("<psycopg2._psycopg.MxDateTime object at %p>",
+                                self);
+}
+
+/* object type */
+
+#define mxdatetimeType_doc \
+"MxDateTime(mx, type) -> new mx.DateTime wrapper object"
+
+PyTypeObject mxdatetimeType = {
+    PyObject_HEAD_INIT(NULL)
+    0,
+    "psycopg2._psycopg.MxDateTime",
+    sizeof(mxdatetimeObject),
+    0,
+    mxdatetime_dealloc, /*tp_dealloc*/
+    0,          /*tp_print*/
+    0,          /*tp_getattr*/
+    0,          /*tp_setattr*/   
+
+    0,          /*tp_compare*/
+    (reprfunc)mxdatetime_repr, /*tp_repr*/
+    0,          /*tp_as_number*/
+    0,          /*tp_as_sequence*/
+    0,          /*tp_as_mapping*/
+    0,          /*tp_hash */
+
+    0,          /*tp_call*/
+    (reprfunc)mxdatetime_str, /*tp_str*/
+    0,          /*tp_getattro*/
+    0,          /*tp_setattro*/
+    0,          /*tp_as_buffer*/
+
+    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /*tp_flags*/
+
+    mxdatetimeType_doc, /*tp_doc*/
+    
+    0,          /*tp_traverse*/
+    0,          /*tp_clear*/
+
+    0,          /*tp_richcompare*/
+    0,          /*tp_weaklistoffset*/
+
+    0,          /*tp_iter*/
+    0,          /*tp_iternext*/
+
+    /* Attribute descriptor and subclassing stuff */
+
+    mxdatetimeObject_methods, /*tp_methods*/
+    mxdatetimeObject_members, /*tp_members*/
+    0,          /*tp_getset*/
+    0,          /*tp_base*/
+    0,          /*tp_dict*/
+    
+    0,          /*tp_descr_get*/
+    0,          /*tp_descr_set*/
+    0,          /*tp_dictoffset*/
+    
+    mxdatetime_init, /*tp_init*/
+    PyType_GenericAlloc, /*tp_alloc*/
+    mxdatetime_new, /*tp_new*/
+    (freefunc)mxdatetime_del, /*tp_free  Low-level free-memory routine */
+    0,          /*tp_is_gc For PyObject_IS_GC */
+    0,          /*tp_bases*/
+    0,          /*tp_mro method resolution order */
+    0,          /*tp_cache*/
+    0,          /*tp_subclasses*/
+    0           /*tp_weaklist*/
+};
+
+
+/** module-level functions **/
+
+#ifdef PSYCOPG_DEFAULT_MXDATETIME
+
+PyObject *
+psyco_Date(PyObject *self, PyObject *args) 
+{
+       PyObject *res, *mx;
+       int year, month, day;
+       
+       if (!PyArg_ParseTuple(args, "iii", &year, &month, &day))
+           return NULL;
+                                        
+       mx = mxDateTimeP->DateTime_FromDateAndTime(year, month, day, 0, 0, 0.0);
+    if (mx == NULL) return NULL;
+
+    res = PyObject_CallFunction((PyObject *)&mxdatetimeType, "Oi", mx,
+                                PSYCO_MXDATETIME_DATE);
+    Py_DECREF(mx);
+    return res;
+}
+
+PyObject *
+psyco_Time(PyObject *self, PyObject *args) 
+{
+       PyObject *res, *mx;
+    int hours, minutes=0;
+       double seconds=0.0;
+
+    if (!PyArg_ParseTuple(args, "iid", &hours, &minutes, &seconds))
+           return NULL;
+                                        
+       mx = mxDateTimeP->DateTimeDelta_FromTime(hours, minutes, seconds);
+    if (mx == NULL) return NULL;
+
+    res = PyObject_CallFunction((PyObject *)&mxdatetimeType, "Oi", mx,
+                                PSYCO_MXDATETIME_TIME);
+    Py_DECREF(mx);
+    return res;    
+}
+
+PyObject *
+psyco_Timestamp(PyObject *self, PyObject *args) 
+{
+       PyObject *res, *mx;
+    int year, month, day;
+       int hour=0, minute=0; /* default to midnight */
+       double second=0.0;
+    
+    if (!PyArg_ParseTuple(args, "lii|iid", &year, &month, &day,
+                          &hour, &minute, &second))
+           return NULL;
+
+    mx = mxDateTimeP->DateTime_FromDateAndTime(year, month, day,
+                                               hour, minute, second);
+    if (mx == NULL) return NULL;
+
+    res = PyObject_CallFunction((PyObject *)&mxdatetimeType, "Oi", mx,
+                                PSYCO_MXDATETIME_TIMESTAMP);
+    Py_DECREF(mx);
+    return res;     
+}
+
+PyObject *
+psyco_DateFromTicks(PyObject *self, PyObject *args)
+{
+    PyObject *res, *mx;
+    double ticks;
+
+    if (!PyArg_ParseTuple(args,"d", &ticks))
+        return NULL;
+                                        
+    if (!(mx = mxDateTimeP->DateTime_FromTicks(ticks)))
+        return NULL;
+    
+    res = PyObject_CallFunction((PyObject *)&mxdatetimeType, "Oi", mx,
+                                PSYCO_MXDATETIME_DATE);
+    Py_DECREF(mx);
+    return res; 
+}
+
+PyObject *
+psyco_TimeFromTicks(PyObject *self, PyObject *args)
+{
+    PyObject *res, *mx, *dt;
+    double ticks;
+
+    if (!PyArg_ParseTuple(args,"d", &ticks))
+        return NULL;
+                                        
+    if (!(dt = mxDateTimeP->DateTime_FromTicks(ticks)))
+        return NULL;
+
+    if (!(mx = mxDateTimeP->DateTimeDelta_FromDaysAndSeconds(
+            0, ((mxDateTimeObject*)dt)->abstime)))
+    {
+        Py_DECREF(dt);
+        return NULL;
+    }
+
+    Py_DECREF(dt);
+    res = PyObject_CallFunction((PyObject *)&mxdatetimeType, "Oi", mx,
+                                PSYCO_MXDATETIME_TIME);
+    Py_DECREF(mx);
+    return res; 
+}
+
+PyObject *
+psyco_TimestampFromTicks(PyObject *self, PyObject *args)
+{
+    PyObject *mx, *res;
+    double ticks;
+
+    if (!PyArg_ParseTuple(args, "d", &ticks))
+        return NULL;
+                                        
+    if (!(mx = mxDateTimeP->DateTime_FromTicks(ticks)))
+        return NULL;
+
+    res = PyObject_CallFunction((PyObject *)&mxdatetimeType, "Oi", mx,
+                                 PSYCO_MXDATETIME_TIMESTAMP);
+    Py_DECREF(mx);
+    return res; 
+}
+
+#endif
+
+PyObject *
+psyco_DateFromMx(PyObject *self, PyObject *args)
+{
+    PyObject *mx;
+
+    if (!PyArg_ParseTuple(args, "O!", mxDateTimeP->DateTime_Type, &mx))
+        return NULL;
+    
+    return PyObject_CallFunction((PyObject *)&mxdatetimeType, "Oi", mx,
+                                 PSYCO_MXDATETIME_DATE);
+}
+
+PyObject *
+psyco_TimeFromMx(PyObject *self, PyObject *args)
+{
+    PyObject *mx;
+
+    if (!PyArg_ParseTuple(args, "O!", mxDateTimeP->DateTimeDelta_Type, &mx))
+        return NULL;
+    
+    return PyObject_CallFunction((PyObject *)&mxdatetimeType, "Oi", mx,
+                                 PSYCO_MXDATETIME_TIME);
+}
+
+PyObject *
+psyco_TimestampFromMx(PyObject *self, PyObject *args)
+{
+    PyObject *mx;
+
+    if (!PyArg_ParseTuple(args, "O!", mxDateTimeP->DateTime_Type, &mx))
+        return NULL;
+    
+    return PyObject_CallFunction((PyObject *)&mxdatetimeType, "Oi", mx,
+                                 PSYCO_MXDATETIME_TIMESTAMP);
+}
+
+PyObject *
+psyco_IntervalFromMx(PyObject *self, PyObject *args)
+{
+    PyObject *mx;
+
+    if (!PyArg_ParseTuple(args, "O!", mxDateTimeP->DateTime_Type, &mx))
+        return NULL;
+    
+    return PyObject_CallFunction((PyObject *)&mxdatetimeType, "Oi", mx,
+                                 PSYCO_MXDATETIME_INTERVAL);
+}
diff --git a/psycopg2/psycopg/adapter_mxdatetime.h b/psycopg2/psycopg/adapter_mxdatetime.h
new file mode 100644 (file)
index 0000000..c485707
--- /dev/null
@@ -0,0 +1,94 @@
+/* adapter_mxdatetime.h - definition for the mx date/time types
+ *
+ * Copyright (C) 2003-2004 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PSYCOPG_MXDATETIME_H
+#define PSYCOPG_MXDATETIME_H 1
+
+#include <Python.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern PyTypeObject mxdatetimeType;
+
+typedef struct {
+    PyObject HEAD;
+
+    PyObject *wrapped;
+    int       type;
+#define       PSYCO_MXDATETIME_TIME       0
+#define       PSYCO_MXDATETIME_DATE       1
+#define       PSYCO_MXDATETIME_TIMESTAMP  2
+#define       PSYCO_MXDATETIME_INTERVAL   3   
+    
+} mxdatetimeObject;
+    
+/* functions exported to psycopgmodule.c */
+#ifdef PSYCOPG_DEFAULT_MXDATETIME
+    
+extern PyObject *psyco_Date(PyObject *module, PyObject *args);
+#define psyco_Date_doc \
+    "Date(year, month, day) -> new date"
+
+extern PyObject *psyco_Time(PyObject *module, PyObject *args);
+#define psyco_Time_doc \
+    "Time(hour, minutes, seconds) -> new time"
+
+extern PyObject *psyco_Timestamp(PyObject *module, PyObject *args);
+#define psyco_Timestamp_doc \
+    "Time(year, month, day, hour, minutes, seconds) -> new timestamp"
+    
+extern PyObject *psyco_DateFromTicks(PyObject *module, PyObject *args);
+#define psyco_DateFromTicks_doc \
+    "DateFromTicks(ticks) -> new date"
+
+extern PyObject *psyco_TimeFromTicks(PyObject *module, PyObject *args);
+#define psyco_TimeFromTicks_doc \
+    "TimeFromTicks(ticks) -> new time"
+
+extern PyObject *psyco_TimestampFromTicks(PyObject *module, PyObject *args);
+#define psyco_TimestampFromTicks_doc \
+    "TimestampFromTicks(ticks) -> new timestamp"
+
+#endif /* PSYCOPG_DEFAULT_MXDATETIME */
+
+extern PyObject *psyco_DateFromMx(PyObject *module, PyObject *args);
+#define psyco_DateFromMx_doc \
+    "DateFromMx(mx) -> new date"
+
+extern PyObject *psyco_TimeFromMx(PyObject *module, PyObject *args);
+#define psyco_TimeFromMx_doc \
+    "TimeFromMx(mx) -> new time"
+
+extern PyObject *psyco_TimestampFromMx(PyObject *module, PyObject *args);
+#define psyco_TimestampFromMx_doc \
+    "TimestampFromMx(mx) -> new timestamp"
+
+extern PyObject *psyco_IntervalFromMx(PyObject *module, PyObject *args);
+#define psyco_IntervalFromMx_doc \
+    "IntervalFromMx(mx) -> new interval"
+    
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined(PSYCOPG_MXDATETIME_H) */
diff --git a/psycopg2/psycopg/adapter_pboolean.c b/psycopg2/psycopg/adapter_pboolean.c
new file mode 100644 (file)
index 0000000..fa70ad0
--- /dev/null
@@ -0,0 +1,238 @@
+/* adapter_pboolean.c - psycopg boolean type wrapper implementation
+ *
+ * Copyright (C) 2003-2004 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <Python.h>
+#include <structmember.h>
+#include <stringobject.h>
+#include <string.h>
+
+#define PSYCOPG_MODULE
+#include "psycopg/config.h"
+#include "psycopg/python.h"
+#include "psycopg/psycopg.h"
+#include "psycopg/adapter_pboolean.h"
+#include "psycopg/microprotocols_proto.h"
+
+
+/** the Boolean object **/
+
+static PyObject *
+pboolean_str(pbooleanObject *self)
+{
+#ifdef PSYCOPG_NEW_BOOLEAN
+    if (PyObject_IsTrue(self->wrapped)) {
+        return PyString_FromString("true");
+    }
+    else {
+        return PyString_FromString("false");
+    }
+#else
+    if (PyObject_IsTrue(self->wrapped)) {
+        return PyString_FromString("'t'");
+    }
+    else {
+        return PyString_FromString("'f'");
+    }
+#endif
+}
+
+PyObject *
+pboolean_getquoted(pbooleanObject *self, PyObject *args)
+{
+    if (!PyArg_ParseTuple(args, "")) return NULL;
+    return pboolean_str(self);
+}
+
+PyObject *
+pboolean_conform(pbooleanObject *self, PyObject *args)
+{
+    PyObject *res, *proto;
+    
+    if (!PyArg_ParseTuple(args, "O", &proto)) return NULL;
+
+    if (proto == (PyObject*)&isqlquoteType)
+        res = (PyObject*)self;
+    else
+        res = Py_None;
+    
+    Py_INCREF(res);
+    return res;
+}
+
+/** the Boolean object */
+
+/* object member list */
+
+static struct PyMemberDef pbooleanObject_members[] = {
+    {"adapted", T_OBJECT, offsetof(pbooleanObject, wrapped), RO},
+    {NULL}
+};
+
+/* object method table */
+
+static PyMethodDef pbooleanObject_methods[] = {
+    {"getquoted", (PyCFunction)pboolean_getquoted, METH_VARARGS,
+     "getquoted() -> wrapped object value as SQL-quoted string"},
+    {"__conform__", (PyCFunction)pboolean_conform, METH_VARARGS, NULL},
+    {NULL}  /* Sentinel */
+};
+
+/* initialization and finalization methods */
+
+static int
+pboolean_setup(pbooleanObject *self, PyObject *obj)
+{
+    Dprintf("pboolean_setup: init pboolean object at %p, refcnt = %d",
+            self, ((PyObject *)self)->ob_refcnt);
+
+    self->wrapped = obj;
+    Py_INCREF(self->wrapped);
+    
+    Dprintf("pboolean_setup: good pboolean object at %p, refcnt = %d",
+            self, ((PyObject *)self)->ob_refcnt);
+    return 0;
+}
+
+static void
+pboolean_dealloc(PyObject* obj)
+{
+    pbooleanObject *self = (pbooleanObject *)obj;
+
+    Py_XDECREF(self->wrapped);
+    
+    Dprintf("pboolean_dealloc: deleted pboolean object at %p, refcnt = %d",
+            obj, obj->ob_refcnt);
+    
+    obj->ob_type->tp_free(obj);
+}
+
+static int
+pboolean_init(PyObject *obj, PyObject *args, PyObject *kwds)
+{
+    PyObject *o;
+    
+    if (!PyArg_ParseTuple(args, "O", &o))
+        return -1;
+
+    return pboolean_setup((pbooleanObject *)obj, o);
+}
+
+static PyObject *
+pboolean_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{    
+    return type->tp_alloc(type, 0);
+}
+
+static void
+pboolean_del(PyObject* self)
+{
+    PyObject_Del(self);
+}
+
+static PyObject *
+pboolean_repr(pbooleanObject *self)
+{
+    return PyString_FromFormat("<psycopg2._psycopg.Boolean object at %p>",
+                                self);
+}
+
+
+/* object type */
+
+#define pbooleanType_doc \
+"Boolean(str) -> new Boolean adapter object"
+
+PyTypeObject pbooleanType = {
+    PyObject_HEAD_INIT(NULL)
+    0,
+    "psycopg2._psycopg.Boolean",
+    sizeof(pbooleanObject),
+    0,
+    pboolean_dealloc, /*tp_dealloc*/
+    0,          /*tp_print*/
+
+    0,          /*tp_getattr*/
+    0,          /*tp_setattr*/ 
+
+    0,          /*tp_compare*/
+
+    (reprfunc)pboolean_repr, /*tp_repr*/
+    0,          /*tp_as_number*/
+    0,          /*tp_as_sequence*/
+    0,          /*tp_as_mapping*/
+    0,          /*tp_hash */
+
+    0,          /*tp_call*/
+    (reprfunc)pboolean_str, /*tp_str*/
+    
+    0,          /*tp_getattro*/
+    0,          /*tp_setattro*/
+    0,          /*tp_as_buffer*/
+
+    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /*tp_flags*/
+    pbooleanType_doc, /*tp_doc*/
+    
+    0,          /*tp_traverse*/
+    0,          /*tp_clear*/
+
+    0,          /*tp_richcompare*/
+    0,          /*tp_weaklistoffset*/
+
+    0,          /*tp_iter*/
+    0,          /*tp_iternext*/
+
+    /* Attribute descriptor and subclassing stuff */
+
+    pbooleanObject_methods, /*tp_methods*/
+    pbooleanObject_members, /*tp_members*/
+    0,          /*tp_getset*/
+    0,          /*tp_base*/
+    0,          /*tp_dict*/
+    
+    0,          /*tp_descr_get*/
+    0,          /*tp_descr_set*/
+    0,          /*tp_dictoffset*/
+    
+    pboolean_init, /*tp_init*/
+    0, /*tp_alloc  will be set to PyType_GenericAlloc in module init*/
+    pboolean_new, /*tp_new*/
+    (freefunc)pboolean_del, /*tp_free  Low-level free-memory routine */
+    0,          /*tp_is_gc For PyObject_IS_GC */
+    0,          /*tp_bases*/
+    0,          /*tp_mro method resolution order */
+    0,          /*tp_cache*/
+    0,          /*tp_subclasses*/
+    0           /*tp_weaklist*/
+};
+
+
+/** module-level functions **/
+
+PyObject *
+psyco_Boolean(PyObject *module, PyObject *args)
+{
+    PyObject *obj;
+     
+    if (!PyArg_ParseTuple(args, "O", &obj))
+        return NULL;
+  
+    return PyObject_CallFunction((PyObject *)&pbooleanType, "O", obj);
+}
diff --git a/psycopg2/psycopg/adapter_pboolean.h b/psycopg2/psycopg/adapter_pboolean.h
new file mode 100644 (file)
index 0000000..efdfe56
--- /dev/null
@@ -0,0 +1,51 @@
+/* adapter_pboolean.h - definition for the psycopg boolean type wrapper
+ *
+ * Copyright (C) 2003-2004 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PSYCOPG_PBOOLEAN_H
+#define PSYCOPG_PBOOLEAN_H 1
+
+#include <Python.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern PyTypeObject pbooleanType;
+
+typedef struct {
+    PyObject HEAD;
+
+    /* this is the real object we wrap */
+    PyObject *wrapped;
+
+} pbooleanObject;
+
+/* functions exported to psycopgmodule.c */
+    
+extern PyObject *psyco_Boolean(PyObject *module, PyObject *args);
+#define psyco_Boolean_doc \
+    "Boolean(obj) -> new boolean value"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined(PSYCOPG_PBOOLEAN_H) */
diff --git a/psycopg2/psycopg/adapter_qstring.c b/psycopg2/psycopg/adapter_qstring.c
new file mode 100644 (file)
index 0000000..2eaf7f3
--- /dev/null
@@ -0,0 +1,393 @@
+/* adapter_qstring.c - QuotedString objects
+ *
+ * Copyright (C) 2003-2004 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <Python.h>
+#include <structmember.h>
+#include <stringobject.h>
+
+#include <libpq-fe.h>
+#include <string.h>
+
+#define PSYCOPG_MODULE
+#include "psycopg/config.h"
+#include "psycopg/python.h"
+#include "psycopg/psycopg.h"
+#include "psycopg/connection.h"
+#include "psycopg/adapter_qstring.h"
+#include "psycopg/microprotocols_proto.h"
+
+
+/** the quoting code */
+
+#ifndef PSYCOPG_OWN_QUOTING
+static size_t
+qstring_escape(char *to, char *from, size_t len, PGconn *conn)
+{
+#if PG_MAJOR_VERSION > 8 || \
+ (PG_MAJOR_VERSION == 8 && PG_MINOR_VERSION > 1) || \
+ (PG_MAJOR_VERSION == 8 && PG_MINOR_VERSION == 1 && PG_PATCH_VERSION >= 4)
+    int err;
+    if (conn)
+        return PQescapeStringConn(conn, to, from, len, &err);
+    else
+#endif
+        return PQescapeString(to, from, len);
+}
+#else
+static size_t
+qstring_escape(char *to, char *from, size_t len, PGconn *conn)
+{
+    int i, j;
+
+    for (i=0, j=0; i<len; i++) {
+        switch(from[i]) {
+
+        case '\'':
+            to[j++] = '\'';
+            to[j++] = '\'';
+            break;
+
+        case '\\':
+            to[j++] = '\\';
+            to[j++] = '\\';
+            break;
+
+        case '\0':
+            /* do nothing, embedded \0 are discarded */
+            break;
+
+        default:
+            to[j++] = from[i];
+        }
+    }
+    to[j] = '\0';
+
+    Dprintf("qstring_quote: to = %s", to);
+    return strlen(to);
+}
+#endif
+
+/* qstring_quote - do the quote process on plain and unicode strings */
+
+static PyObject *
+qstring_quote(qstringObject *self)
+{
+    PyObject *str;
+    char *s, *buffer;
+    int len;
+
+    /* if the wrapped object is an unicode object we can encode it to match
+       self->encoding but if the encoding is not specified we don't know what
+       to do and we raise an exception */
+
+    /* TODO: we need a real translation table from postgres encoding names to
+           python ones here */
+    
+    if (PyUnicode_Check(self->wrapped) && self->encoding) {
+        PyObject *enc = PyDict_GetItemString(psycoEncodings, self->encoding);
+        /* note that pgenc is a borrowed reference */
+
+        if (enc) {
+            char *s = PyString_AsString(enc);
+            Dprintf("qstring_quote: encoding unicode object to %s", s);
+            str = PyUnicode_AsEncodedString(self->wrapped, s, NULL);
+            Dprintf("qstring_quote: got encoded object at %p", str);
+            if (str == NULL) return NULL;
+        }
+        else {
+            /* can't find the right encoder, raise exception */
+            PyErr_Format(InterfaceError,
+                         "can't encode unicode string to %s", self->encoding);
+            return NULL;
+        }
+    }
+
+    /* if the wrapped object is a simple string, we don't know how to
+       (re)encode it, so we pass it as-is */
+    else if (PyString_Check(self->wrapped)) {
+        str = self->wrapped;
+        /* INCREF to make it ref-wise identical to unicode one */
+        Py_INCREF(str);
+    }
+    
+    /* if the wrapped object is not a string, this is an error */ 
+    else {
+        PyErr_SetString(PyExc_TypeError,
+                        "can't quote non-string object (or missing encoding)");
+        return NULL;
+    }
+
+    /* encode the string into buffer */
+    PyString_AsStringAndSize(str, &s, &len);
+        
+    buffer = (char *)PyMem_Malloc((len*2+3) * sizeof(char));
+    if (buffer == NULL) {
+        Py_DECREF(str);
+        PyErr_NoMemory();
+        return NULL;
+    }
+
+    Py_BEGIN_ALLOW_THREADS;
+    len = qstring_escape(buffer+1, s, len,
+        self->conn ? ((connectionObject*)self->conn)->pgconn : NULL);
+    buffer[0] = '\'' ; buffer[len+1] = '\'';
+    Py_END_ALLOW_THREADS;
+    
+    self->buffer = PyString_FromStringAndSize(buffer, len+2);
+    PyMem_Free(buffer);
+    Py_DECREF(str);
+        
+    return self->buffer;
+}
+
+/* qstring_str, qstring_getquoted - return result of quoting */
+
+static PyObject *
+qstring_str(qstringObject *self)
+{
+    if (self->buffer == NULL) {
+        qstring_quote(self);
+    }
+    Py_XINCREF(self->buffer);
+    return self->buffer;
+}
+
+PyObject *
+qstring_getquoted(qstringObject *self, PyObject *args)
+{
+    if (!PyArg_ParseTuple(args, "")) return NULL;
+    return qstring_str(self);
+}
+
+PyObject *
+qstring_prepare(qstringObject *self, PyObject *args)
+{
+    connectionObject *conn;
+
+    if (!PyArg_ParseTuple(args, "O", &conn))
+        return NULL;
+
+    /* we bother copying the encoding only if the wrapped string is unicode,
+       we don't need the encoding if that's not the case */
+    if (PyUnicode_Check(self->wrapped)) {
+        if (self->encoding) free(self->encoding);
+        self->encoding = strdup(conn->encoding);
+        Dprintf("qstring_prepare: set encoding to %s", conn->encoding);
+    }
+
+    Py_XDECREF(self->conn);
+    if (conn) {
+        self->conn = (PyObject*)conn;
+        Py_INCREF(self->conn);
+    }
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+    
+PyObject *
+qstring_conform(qstringObject *self, PyObject *args)
+{
+    PyObject *res, *proto;
+    
+    if (!PyArg_ParseTuple(args, "O", &proto)) return NULL;
+
+    if (proto == (PyObject*)&isqlquoteType)
+        res = (PyObject*)self;
+    else
+        res = Py_None;
+    
+    Py_INCREF(res);
+    return res;
+}
+
+/** the QuotedString object **/
+
+/* object member list */
+
+static struct PyMemberDef qstringObject_members[] = {
+    {"adapted", T_OBJECT, offsetof(qstringObject, wrapped), RO},
+    {"buffer", T_OBJECT, offsetof(qstringObject, buffer), RO},
+    {"encoding", T_STRING, offsetof(qstringObject, encoding), RO},
+    {NULL}
+};
+
+/* object method table */
+
+static PyMethodDef qstringObject_methods[] = {
+    {"getquoted", (PyCFunction)qstring_getquoted, METH_VARARGS,
+     "getquoted() -> wrapped object value as SQL-quoted string"},
+    {"prepare", (PyCFunction)qstring_prepare, METH_VARARGS,
+     "prepare(conn) -> set encoding to conn->encoding and store conn"},
+    {"__conform__", (PyCFunction)qstring_conform, METH_VARARGS, NULL},
+    {NULL}  /* Sentinel */
+};
+
+/* initialization and finalization methods */
+
+static int
+qstring_setup(qstringObject *self, PyObject *str, char *enc)
+{
+    Dprintf("qstring_setup: init qstring object at %p, refcnt = %d",
+            self, ((PyObject *)self)->ob_refcnt);
+
+    self->buffer = NULL;
+    self->conn = NULL;
+
+    /* FIXME: remove this orrible strdup */
+    if (enc) self->encoding = strdup(enc);
+    
+    self->wrapped = str;
+    Py_INCREF(self->wrapped);
+    
+    Dprintf("qstring_setup: good qstring object at %p, refcnt = %d",
+            self, ((PyObject *)self)->ob_refcnt);
+    return 0;
+}
+
+static void
+qstring_dealloc(PyObject* obj)
+{
+    qstringObject *self = (qstringObject *)obj;
+
+    Py_XDECREF(self->wrapped);
+    Py_XDECREF(self->buffer);
+    Py_XDECREF(self->conn);
+
+    if (self->encoding) free(self->encoding);
+    
+    Dprintf("qstring_dealloc: deleted qstring object at %p, refcnt = %d",
+            obj, obj->ob_refcnt);
+    
+    obj->ob_type->tp_free(obj);
+}
+
+static int
+qstring_init(PyObject *obj, PyObject *args, PyObject *kwds)
+{
+    PyObject *str;
+    char *enc = "latin-1"; /* default encoding as in Python */
+    
+    if (!PyArg_ParseTuple(args, "O|s", &str, &enc))
+        return -1;
+
+    return qstring_setup((qstringObject *)obj, str, enc);
+}
+
+static PyObject *
+qstring_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{    
+    return type->tp_alloc(type, 0);
+}
+
+static void
+qstring_del(PyObject* self)
+{
+    PyObject_Del(self);
+}
+
+static PyObject *
+qstring_repr(qstringObject *self)
+{
+    return PyString_FromFormat("<psycopg2._psycopg.QuotedString object at %p>", 
+                                self);
+}
+
+/* object type */
+
+#define qstringType_doc \
+"QuotedString(str, enc) -> new quoted object with 'enc' encoding"
+
+PyTypeObject qstringType = {
+    PyObject_HEAD_INIT(NULL)
+    0,
+    "psycopg2._psycopg.QuotedString",
+    sizeof(qstringObject),
+    0,
+    qstring_dealloc, /*tp_dealloc*/
+    0,          /*tp_print*/
+    0,          /*tp_getattr*/
+    0,          /*tp_setattr*/   
+
+    0,          /*tp_compare*/
+    (reprfunc)qstring_repr, /*tp_repr*/
+    0,          /*tp_as_number*/
+    0,          /*tp_as_sequence*/
+    0,          /*tp_as_mapping*/
+    0,          /*tp_hash */
+
+    0,          /*tp_call*/
+    (reprfunc)qstring_str, /*tp_str*/
+    0,          /*tp_getattro*/
+    0,          /*tp_setattro*/
+    0,          /*tp_as_buffer*/
+
+    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /*tp_flags*/
+
+    qstringType_doc, /*tp_doc*/
+    
+    0,          /*tp_traverse*/
+    0,          /*tp_clear*/
+
+    0,          /*tp_richcompare*/
+    0,          /*tp_weaklistoffset*/
+
+    0,          /*tp_iter*/
+    0,          /*tp_iternext*/
+
+    /* Attribute descriptor and subclassing stuff */
+
+    qstringObject_methods, /*tp_methods*/
+    qstringObject_members, /*tp_members*/
+    0,          /*tp_getset*/
+    0,          /*tp_base*/
+    0,          /*tp_dict*/
+    
+    0,          /*tp_descr_get*/
+    0,          /*tp_descr_set*/
+    0,          /*tp_dictoffset*/
+    
+    qstring_init, /*tp_init*/
+    0, /*tp_alloc  will be set to PyType_GenericAlloc in module init*/
+    qstring_new, /*tp_new*/
+    (freefunc)qstring_del, /*tp_free  Low-level free-memory routine */
+    0,          /*tp_is_gc For PyObject_IS_GC */
+    0,          /*tp_bases*/
+    0,          /*tp_mro method resolution order */
+    0,          /*tp_cache*/
+    0,          /*tp_subclasses*/
+    0           /*tp_weaklist*/
+};
+
+
+/** module-level functions **/
+
+PyObject *
+psyco_QuotedString(PyObject *module, PyObject *args)
+{
+    PyObject *str;
+    char *enc = "latin-1"; /* default encoding as in Python */
+    
+    if (!PyArg_ParseTuple(args, "O|s", &str, &enc))
+        return NULL;
+  
+    return PyObject_CallFunction((PyObject *)&qstringType, "Os", str, enc);
+}
diff --git a/psycopg2/psycopg/adapter_qstring.h b/psycopg2/psycopg/adapter_qstring.h
new file mode 100644 (file)
index 0000000..544b32b
--- /dev/null
@@ -0,0 +1,53 @@
+/* adapter_qstring.h - definition for the QuotedString type
+ *
+ * Copyright (C) 2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PSYCOPG_QSTRING_H
+#define PSYCOPG_QSTRING_H 1
+
+#include <Python.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern PyTypeObject qstringType;
+
+typedef struct {
+    PyObject HEAD;
+
+    PyObject *wrapped;
+    PyObject *buffer;
+    char     *encoding;
+
+    PyObject *conn;
+} qstringObject;
+    
+/* functions exported to psycopgmodule.c */
+    
+extern PyObject *psyco_QuotedString(PyObject *module, PyObject *args);
+#define psyco_QuotedString_doc \
+    "QuotedString(str, enc) -> new quoted string"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined(PSYCOPG_QSTRING_H) */
diff --git a/psycopg2/psycopg/config.h b/psycopg2/psycopg/config.h
new file mode 100644 (file)
index 0000000..649fee8
--- /dev/null
@@ -0,0 +1,118 @@
+/* config.h - general config and Dprintf macro
+ *
+ * Copyright (C) 2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PSYCOPG_CONFIG_H
+#define PSYCOPG_CONFIG_H 1
+
+/* debug printf-like function */
+#if defined( __GNUC__) && !defined(__APPLE__)
+#ifdef PSYCOPG_DEBUG
+#include <sys/types.h>
+#include <unistd.h>
+#define Dprintf(fmt, args...) \
+    fprintf(stderr, "[%d] " fmt "\n", getpid() , ## args)
+#else
+#define Dprintf(fmt, args...)
+#endif
+#else /* !__GNUC__ or __APPLE__ */
+#ifdef PSYCOPG_DEBUG
+#include <stdarg.h>
+static void Dprintf(const char *fmt, ...)
+{
+    va_list ap;
+    va_start(ap, fmt);
+    vprintf(fmt, ap);
+    va_end(ap);
+    printf("\n");
+}
+#else
+static void Dprintf(const char *fmt, ...) {}
+#endif
+#endif
+
+/* pthreads work-arounds for mutilated operating systems */
+#if defined(_WIN32) || defined(__BEOS__)
+
+#ifdef _WIN32
+#include <winsock2.h>
+#define pthread_mutex_t HANDLE
+#define pthread_condvar_t HANDLE
+#define pthread_mutex_lock(object) WaitForSingleObject(object, INFINITE)
+#define pthread_mutex_unlock(object) ReleaseMutex(object)
+#define pthread_mutex_destroy(ref) (CloseHandle(*(ref)))
+/* convert pthread mutex to native mutex */
+static int pthread_mutex_init(pthread_mutex_t *mutex, void* fake)
+{
+  *mutex = CreateMutex(NULL, FALSE, NULL);
+  return 0;
+}
+#endif /* _WIN32 */
+
+#ifdef __BEOS__
+#include <OS.h>
+#define pthread_mutex_t sem_id
+#define pthread_mutex_lock(object) acquire_sem(object)
+#define pthread_mutex_unlock(object) release_sem(object)
+#define pthread_mutex_destroy(ref) delete_sem(*ref)
+static int pthread_mutex_init(pthread_mutex_t *mutex, void* fake)
+{
+        *mutex = create_sem(1, "psycopg_mutex");
+        if (*mutex < B_OK)
+                return *mutex;
+        return 0;
+}
+#endif /* __BEOS__ */
+
+#else /* pthread is available */
+#include <pthread.h>
+#endif
+
+/* to work around the fact that Windows does not have a gmtime_r function, or
+   a proper gmtime function */
+#ifdef _WIN32
+static struct tm *gmtime_r(time_t *t, struct tm *tm)
+{
+  tm = gmtime(t);
+  return tm;
+}
+static struct tm *localtime_r(time_t *t, struct tm *tm)
+{
+  tm = localtime(t);
+  return tm;
+}
+/* remove the inline keyword, since it doesn't work unless C++ file */
+#define inline
+#endif
+
+#if defined(__FreeBSD__) || defined(_WIN32) || defined(__sun__)
+/* what's this, we have no round function either? */
+static double round(double num)
+{
+  return (num >= 0) ? floor(num + 0.5) : ceil(num - 0.5);
+}
+#endif
+
+/* postgresql < 7.4 does not have PQfreemem */
+#ifndef HAVE_PQFREEMEM
+#define PQfreemem free
+#endif
+
+#endif /* !defined(PSYCOPG_CONFIG_H) */
diff --git a/psycopg2/psycopg/connection.h b/psycopg2/psycopg/connection.h
new file mode 100644 (file)
index 0000000..7010120
--- /dev/null
@@ -0,0 +1,97 @@
+/* connection.h - definition for the psycopg connection type
+ *
+ * Copyright (C) 2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PSYCOPG_CONNECTION_H
+#define PSYCOPG_CONNECTION_H 1
+
+#include <Python.h>
+#include <libpq-fe.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* connection status */
+#define CONN_STATUS_READY 1
+#define CONN_STATUS_BEGIN 2
+#define CONN_STATUS_SYNC  3
+#define CONN_STATUS_ASYNC 4
+    
+extern PyTypeObject connectionType;
+
+typedef struct {
+    PyObject HEAD;
+
+    pthread_mutex_t lock;   /* the global connection lock */
+
+    char *dsn;              /* data source name */
+    char *critical;         /* critical error on this connection */
+    char *encoding;         /* current backend encoding */
+    
+    long int closed;          /* 2 means connection has been closed */
+    long int isolation_level; /* isolation level for this connection */
+    long int mark;            /* number of commits/rollbacks done so far */ 
+    int status;               /* status of the connection */
+    int protocol;             /* protocol version */
+    
+    PGconn *pgconn;         /* the postgresql connection */
+
+    PyObject *async_cursor;
+    
+    /* notice processing */
+    PyObject *notice_list;
+    PyObject *notice_filter;
+
+    /* notifies */
+    PyObject *notifies;
+
+    /* errors (DBAPI-2.0 extension) */
+    PyObject *exc_Error;
+    PyObject *exc_Warning;
+    PyObject *exc_InterfaceError;
+    PyObject *exc_DatabaseError;
+    PyObject *exc_InternalError;
+    PyObject *exc_OperationalError;
+    PyObject *exc_ProgrammingError;
+    PyObject *exc_IntegrityError;
+    PyObject *exc_DataError;
+    PyObject *exc_NotSupportedError;
+    
+} connectionObject;
+    
+/* C-callable functions in connection_int.c and connection_ext.c */
+extern int  conn_connect(connectionObject *self);
+extern void conn_close(connectionObject *self);
+extern int  conn_commit(connectionObject *self);
+extern int  conn_rollback(connectionObject *self);
+extern int  conn_switch_isolation_level(connectionObject *self, int level);
+extern int  conn_set_client_encoding(connectionObject *self, char *enc); 
+
+/* exception-raising macros */
+#define EXC_IF_CONN_CLOSED(self) if ((self)->closed > 0) { \
+    PyErr_SetString(InterfaceError, "connection already closed"); \
+    return NULL; }
+    
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined(PSYCOPG_CONNECTION_H) */
diff --git a/psycopg2/psycopg/connection_int.c b/psycopg2/psycopg/connection_int.c
new file mode 100644 (file)
index 0000000..3e61ddf
--- /dev/null
@@ -0,0 +1,303 @@
+/* connection_int.c - code used by the connection object
+ *
+ * Copyright (C) 2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <Python.h>
+#include <string.h>
+
+#define PSYCOPG_MODULE
+#include "psycopg/config.h"
+#include "psycopg/psycopg.h"
+#include "psycopg/connection.h"
+#include "psycopg/cursor.h"
+#include "psycopg/pqpath.h"
+
+/* conn_notice_callback - process notices */
+
+void
+conn_notice_callback(void *args, const char *message)
+{
+    connectionObject *self = (connectionObject *)args;
+
+    Dprintf("conn_notice_callback: %s", message);
+
+    /* unfortunately the old protocl return COPY FROM errors only as notices,
+       so we need to filter them looking for such errors */
+    if (strncmp(message, "ERROR", 5) == 0)
+        pq_set_critical(self, message);
+    else
+        PyList_Append(self->notice_list, PyString_FromString(message));
+}
+
+/* conn_connect - execute a connection to the dataabase */
+
+int
+conn_connect(connectionObject *self)
+{
+    PGconn *pgconn;
+    PGresult *pgres;
+    char *data, *tmp;
+    int i;
+    
+    /* we need the initial date style to be ISO, for typecasters; if the user
+       later change it, she must know what she's doing... */
+    const char *datestyle = "SET DATESTYLE TO 'ISO'";
+    const char *encoding  = "SHOW client_encoding";
+    const char *isolevel  = "SHOW default_transaction_isolation";
+    
+    const char *lvl1a = "read uncommitted";
+    const char *lvl1b = "read committed";
+    const char *lvl2a = "repeatable read";
+    const char *lvl2b = "serializable";
+    
+    Py_BEGIN_ALLOW_THREADS;
+    pgconn = PQconnectdb(self->dsn);
+    Py_END_ALLOW_THREADS;
+    
+    Dprintf("conn_connect: new postgresql connection at %p", pgconn);
+
+    if (pgconn == NULL)
+    {
+        Dprintf("conn_connect: PQconnectdb(%s) FAILED", self->dsn);
+        PyErr_SetString(OperationalError, "PQconnectdb() failed");
+        return -1;
+    }
+    else if (PQstatus(pgconn) == CONNECTION_BAD)
+    {
+        Dprintf("conn_connect: PQconnectdb(%s) returned BAD", self->dsn);
+        PyErr_SetString(OperationalError, PQerrorMessage(pgconn));
+        PQfinish(pgconn);
+        return -1;
+    }
+
+    PQsetNoticeProcessor(pgconn, conn_notice_callback, (void*)self);
+
+    Py_BEGIN_ALLOW_THREADS;
+    pgres = PQexec(pgconn, datestyle);
+    Py_END_ALLOW_THREADS;
+
+    if (pgres == NULL || PQresultStatus(pgres) != PGRES_COMMAND_OK ) {
+        PyErr_SetString(OperationalError, "can't set datestyle to ISO");
+        PQfinish(pgconn);
+        IFCLEARPGRES(pgres);
+        return -1;
+    }
+    CLEARPGRES(pgres);
+
+    Py_BEGIN_ALLOW_THREADS;
+    pgres = PQexec(pgconn, encoding);
+    Py_END_ALLOW_THREADS;
+
+    if (pgres == NULL || PQresultStatus(pgres) != PGRES_TUPLES_OK) {
+        PyErr_SetString(OperationalError, "can't fetch client_encoding");
+        PQfinish(pgconn);
+        IFCLEARPGRES(pgres);
+        return -1;
+    }
+    tmp = PQgetvalue(pgres, 0, 0);
+    self->encoding = PyMem_Malloc(strlen(tmp)+1);
+    if (self->encoding == NULL) {
+        /* exception already set by PyMem_Malloc() */
+        PQfinish(pgconn);
+        IFCLEARPGRES(pgres);
+        return -1;
+    }  
+    for (i=0 ; i < strlen(tmp) ; i++)
+        self->encoding[i] = toupper(tmp[i]);
+    self->encoding[i] = '\0';
+    CLEARPGRES(pgres);
+    
+    Py_BEGIN_ALLOW_THREADS;
+    pgres = PQexec(pgconn, isolevel);
+    Py_END_ALLOW_THREADS;
+
+    if (pgres == NULL || PQresultStatus(pgres) != PGRES_TUPLES_OK) {
+        PyErr_SetString(OperationalError,
+                         "can't fetch default_isolation_level");
+        PQfinish(pgconn);
+        IFCLEARPGRES(pgres);
+        return -1;
+    }
+    data = PQgetvalue(pgres, 0, 0);
+    if ((strncmp(lvl1a, data, strlen(lvl1a)) == 0)
+        || (strncmp(lvl1b, data, strlen(lvl1b)) == 0))
+        self->isolation_level = 1;
+    else if ((strncmp(lvl2a, data, strlen(lvl2a)) == 0)
+        || (strncmp(lvl2b, data, strlen(lvl2b)) == 0))
+        self->isolation_level = 2;
+    else
+        self->isolation_level = 2;
+    CLEARPGRES(pgres);
+
+    if (PQsetnonblocking(pgconn, 1) != 0) {
+        Dprintf("conn_connect: PQsetnonblocking() FAILED");
+        PyErr_SetString(OperationalError, "PQsetnonblocking() failed");
+        PQfinish(pgconn);
+        return -1;
+    }
+
+#ifdef HAVE_PQPROTOCOL3
+    self->protocol = PQprotocolVersion(pgconn);
+#else
+    self->protocol = 2;
+#endif
+    Dprintf("conn_connect: using protocol %d", self->protocol);
+    
+    self->pgconn = pgconn;
+    return 0;
+}
+
+/* conn_close - do anything needed to shut down the connection */
+
+void
+conn_close(connectionObject *self)
+{
+    /* sets this connection as closed even for other threads; also note that
+       we need to check the value of pgconn, because we get called even when
+       the connection fails! */
+    Py_BEGIN_ALLOW_THREADS;
+    pthread_mutex_lock(&self->lock);
+
+    self->closed = 1;
+
+    /* execute a forced rollback on the connection (but don't check the
+       result, we're going to close the pq connection anyway */    
+    if (self->pgconn) {
+        pq_abort(self);
+        PQfinish(self->pgconn);
+        Dprintf("conn_close: PQfinish called");
+        self->pgconn = NULL;
+    }
+
+    pthread_mutex_unlock(&self->lock);
+    Py_END_ALLOW_THREADS;
+
+}
+
+/* conn_commit - commit on a connection */
+
+int
+conn_commit(connectionObject *self)
+{
+    int res;
+
+    Py_BEGIN_ALLOW_THREADS;
+    pthread_mutex_lock(&self->lock);
+
+    res = pq_commit(self);
+    self->mark++;
+    
+    pthread_mutex_unlock(&self->lock);
+    Py_END_ALLOW_THREADS;
+
+    return res;
+}
+
+/* conn_rollback - rollback a connection */
+
+int
+conn_rollback(connectionObject *self)
+{
+    int res;
+
+    Py_BEGIN_ALLOW_THREADS;
+    pthread_mutex_lock(&self->lock);
+
+    res = pq_abort(self);
+    self->mark++;
+    
+    pthread_mutex_unlock(&self->lock);
+    Py_END_ALLOW_THREADS;
+
+    return res;
+}
+
+/* conn_switch_isolation_level - switch isolation level on the connection */
+
+int
+conn_switch_isolation_level(connectionObject *self, int level)
+{
+    int res = 0;
+
+    Py_BEGIN_ALLOW_THREADS;
+    pthread_mutex_lock(&self->lock);
+    
+    /* if the current isolation level is > 0 we need to abort the current
+       transaction before changing; that all folks! */
+    if (self->isolation_level != level && self->isolation_level > 0) {
+        res = pq_abort(self);
+    }
+    self->isolation_level = level;
+    self->mark++;
+    
+    Dprintf("conn_switch_isolation_level: switched to level %d", level);
+    
+    pthread_mutex_unlock(&self->lock);
+    Py_END_ALLOW_THREADS;
+
+    return res;   
+}
+
+/* conn_set_client_encoding - switch client encoding on connection */
+
+int
+conn_set_client_encoding(connectionObject *self, char *enc)
+{
+    PGresult *pgres;
+    char query[48];
+    int res = 0;
+    
+    /* TODO: check for async query here and raise error if necessary */
+    
+    Py_BEGIN_ALLOW_THREADS;
+    pthread_mutex_lock(&self->lock);
+    
+    /* set encoding, no encoding string is longer than 24 bytes */
+    PyOS_snprintf(query, 47, "SET client_encoding = '%s'", enc);
+
+    /* abort the current transaction, to set the encoding ouside of
+       transactions */
+    res = pq_abort(self);
+
+    if (res == 0) {
+        pgres = PQexec(self->pgconn, query);
+
+        if (pgres == NULL || PQresultStatus(pgres) != PGRES_COMMAND_OK ) {
+            res = -1;
+        }
+        else {
+            /* no error, we can proceeed and store the new encoding */
+            if (self->encoding) free(self->encoding);
+            self->encoding = strdup(enc);
+        }
+
+        IFCLEARPGRES(pgres);
+    }
+    
+    Dprintf("conn_set_client_encoding: set encoding to %s", self->encoding);
+    
+    pthread_mutex_unlock(&self->lock);
+    Py_END_ALLOW_THREADS;
+
+    if (res == -1)
+        PyErr_Format(OperationalError, "can't set encoding to %s", enc);
+        
+    return res;   
+}
diff --git a/psycopg2/psycopg/connection_type.c b/psycopg2/psycopg/connection_type.c
new file mode 100644 (file)
index 0000000..f8cbd80
--- /dev/null
@@ -0,0 +1,422 @@
+/* connection_type.c - python interface to connection objects
+ *
+ * Copyright (C) 2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <Python.h>
+#include <structmember.h>
+#include <stringobject.h>
+
+#include <string.h>
+
+#define PSYCOPG_MODULE
+#include "psycopg/config.h"
+#include "psycopg/python.h"
+#include "psycopg/psycopg.h"
+#include "psycopg/connection.h"
+#include "psycopg/cursor.h"
+
+/** DBAPI methods **/
+
+/* cursor method - allocate a new cursor */
+
+#define psyco_conn_cursor_doc \
+"cursor(cursor_factory=extensions.cursor) -- new cursor\n\n"                \
+"Return a new cursor.\n\nThe ``cursor_factory`` argument can be used to\n"  \
+"create non-standard cursors by passing a class different from the\n"       \
+"default. Note that the new class *should* be a sub-class of\n"             \
+"`extensions.cursor`.\n\n"                                                  \
+":rtype: `extensions.cursor`"
+
+static PyObject *
+psyco_conn_cursor(connectionObject *self, PyObject *args, PyObject *keywds)
+{
+    char *name = NULL;
+    PyObject *obj, *factory = NULL;
+
+    static char *kwlist[] = {"name", "cursor_factory", NULL};
+    
+    if (!PyArg_ParseTupleAndKeywords(args, keywds, "|sO", kwlist,
+                                     &name, &factory)) {
+        return NULL;
+    }
+
+    EXC_IF_CONN_CLOSED(self);
+
+    Dprintf("psyco_conn_cursor: new cursor for connection at %p", self);
+    Dprintf("psyco_conn_cursor:     parameters: name = %s", name);
+    
+    if (factory == NULL) factory = (PyObject *)&cursorType;
+    if (name)
+        obj = PyObject_CallFunction(factory, "Os", self, name);    
+    else
+        obj = PyObject_CallFunction(factory, "O", self);
+
+    if (obj == NULL) return NULL;
+    if (PyObject_IsInstance(obj, (PyObject *)&cursorType) == 0) {
+        PyErr_SetString(PyExc_TypeError,
+            "cursor factory must be subclass of psycopg2._psycopg.cursor");
+        Py_DECREF(obj);
+        return NULL;
+    }
+    
+    Dprintf("psyco_conn_cursor: new cursor at %p: refcnt = %d",
+            obj, obj->ob_refcnt);
+    return obj;
+}
+
+
+/* close method - close the connection and all related cursors */
+
+#define psyco_conn_close_doc "close() -- Close the connection."
+
+static PyObject *
+psyco_conn_close(connectionObject *self, PyObject *args)
+{
+    EXC_IF_CONN_CLOSED(self);
+
+    if (!PyArg_ParseTuple(args, "")) return NULL;
+                                     
+    Dprintf("psyco_conn_close: closing connection at %p", self);
+    conn_close(self);
+    Dprintf("psyco_conn_close: connection at %p closed", self);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
+/* commit method - commit all changes to the database */
+
+#define psyco_conn_commit_doc "commit() -- Commit all changes to database."
+
+static PyObject *
+psyco_conn_commit(connectionObject *self, PyObject *args)
+{
+    EXC_IF_CONN_CLOSED(self);
+
+    if (!PyArg_ParseTuple(args, "")) return NULL;
+
+    /* FIXME: check return status? */
+    conn_commit(self);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
+/* rollback method - roll back all changes done to the database */
+
+#define psyco_conn_rollback_doc \
+"rollback() -- Roll back all changes done to database."
+
+static PyObject *
+psyco_conn_rollback(connectionObject *self, PyObject *args)
+{
+    EXC_IF_CONN_CLOSED(self);
+
+    if (!PyArg_ParseTuple(args, "")) return NULL;
+
+    /* FIXME: check return status? */
+    conn_rollback(self);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
+#ifdef PSYCOPG_EXTENSIONS
+/* set_isolation_level method - switch connection isolation level */
+
+#define psyco_conn_set_isolation_level_doc \
+"set_isolation_level(level) -- Switch isolation level to ``level``."
+
+static PyObject *
+psyco_conn_set_isolation_level(connectionObject *self, PyObject *args)
+{
+    int level = 1;
+    
+    EXC_IF_CONN_CLOSED(self);
+
+    if (!PyArg_ParseTuple(args, "i", &level)) return NULL;
+
+    if (level < 0 || level > 2) {
+        PyErr_SetString(PyExc_ValueError,
+                        "isolation level out of bounds (0,3)");
+        return NULL;
+    }
+    
+    /* FIXME: check return status? */
+    conn_switch_isolation_level(self, level);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+\f
+
+/* set_isolation_level method - switch connection isolation level */
+
+#define psyco_conn_set_client_encoding_doc \
+"set_client_encoding(encoding) -- Set client encoding to ``encoding``."
+
+static PyObject *
+psyco_conn_set_client_encoding(connectionObject *self, PyObject *args)
+{
+    char *enc = NULL;
+    
+    EXC_IF_CONN_CLOSED(self);
+
+    if (!PyArg_ParseTuple(args, "s", &enc)) return NULL;
+    
+    if (conn_set_client_encoding(self, enc) == 0) {
+        Py_INCREF(Py_None);
+        return Py_None;
+    }
+    else {
+        return NULL;
+    }
+}
+#endif
+
+
+/** the connection object **/
+
+
+/* object method list */
+
+static struct PyMethodDef connectionObject_methods[] = {
+    {"cursor", (PyCFunction)psyco_conn_cursor,
+     METH_VARARGS|METH_KEYWORDS, psyco_conn_cursor_doc},
+    {"close", (PyCFunction)psyco_conn_close,
+     METH_VARARGS, psyco_conn_close_doc},
+    {"commit", (PyCFunction)psyco_conn_commit,
+     METH_VARARGS, psyco_conn_commit_doc},
+    {"rollback", (PyCFunction)psyco_conn_rollback,
+     METH_VARARGS, psyco_conn_rollback_doc},
+#ifdef PSYCOPG_EXTENSIONS
+    {"set_isolation_level", (PyCFunction)psyco_conn_set_isolation_level,
+     METH_VARARGS, psyco_conn_set_isolation_level_doc},
+    {"set_client_encoding", (PyCFunction)psyco_conn_set_client_encoding,
+     METH_VARARGS, psyco_conn_set_client_encoding_doc},    
+#endif    
+    {NULL}
+};
+
+/* object member list */
+
+static struct PyMemberDef connectionObject_members[] = {
+    /* DBAPI-2.0 extensions (exception objects) */
+    {"Error", T_OBJECT, 
+        offsetof(connectionObject, exc_Error), RO, Error_doc},
+    {"Warning", 
+        T_OBJECT, offsetof(connectionObject, exc_Warning), RO, Warning_doc},
+    {"InterfaceError", T_OBJECT,
+        offsetof(connectionObject, exc_InterfaceError), RO,
+        InterfaceError_doc},
+    {"DatabaseError", T_OBJECT,
+        offsetof(connectionObject, exc_DatabaseError), RO, DatabaseError_doc},
+    {"InternalError", T_OBJECT,
+        offsetof(connectionObject, exc_InternalError), RO, InternalError_doc},
+    {"OperationalError", T_OBJECT,
+        offsetof(connectionObject, exc_OperationalError), RO,
+        OperationalError_doc},
+    {"ProgrammingError", T_OBJECT,
+        offsetof(connectionObject, exc_ProgrammingError), RO,
+        ProgrammingError_doc},
+    {"IntegrityError", T_OBJECT,
+        offsetof(connectionObject, exc_IntegrityError), RO,
+        IntegrityError_doc},
+    {"DataError", T_OBJECT,
+        offsetof(connectionObject, exc_DataError), RO, DataError_doc},
+    {"NotSupportedError", T_OBJECT,
+        offsetof(connectionObject, exc_NotSupportedError), RO,
+        NotSupportedError_doc},
+#ifdef PSYCOPG_EXTENSIONS    
+    {"closed", T_LONG, offsetof(connectionObject, closed), RO,
+        "True if the connection is closed."},
+    {"isolation_level", T_LONG,
+        offsetof(connectionObject, isolation_level), RO,
+        "The current isolation level."},
+    {"encoding", T_STRING, offsetof(connectionObject, encoding), RO,
+        "The current client encoding."},
+    {"notices", T_OBJECT, offsetof(connectionObject, notice_list), RO},
+    {"notifies", T_OBJECT, offsetof(connectionObject, notifies), RO},
+    {"dsn", T_STRING, offsetof(connectionObject, dsn), RO,
+        "The current connection string."},
+    {"status", T_LONG,
+        offsetof(connectionObject, status), RO,
+       "The current transaction status."},
+#endif    
+    {NULL}
+};
+
+/* initialization and finalization methods */
+
+static int
+connection_setup(connectionObject *self, char *dsn)
+{
+    Dprintf("connection_setup: init connection object at %p, refcnt = %d",
+            self, ((PyObject *)self)->ob_refcnt);
+    
+    self->dsn = strdup(dsn);
+    self->notice_list = PyList_New(0);
+    self->notifies = PyList_New(0);
+    self->closed = 0;
+    self->status = CONN_STATUS_READY;
+    self->critical = NULL;
+    self->async_cursor = NULL;
+    self->pgconn = NULL;
+    self->mark = 0;
+    
+    pthread_mutex_init(&(self->lock), NULL);
+    if (conn_connect(self) != 0) {
+        pthread_mutex_destroy(&(self->lock));
+        Dprintf("connection_init: FAILED");
+        return -1;
+    }
+    Dprintf("connection_setup: good connection object at %p, refcnt = %d",
+            self, ((PyObject *)self)->ob_refcnt);
+    return 0;
+}
+
+static void
+connection_dealloc(PyObject* obj)
+{
+    connectionObject *self = (connectionObject *)obj;
+
+    if (self->closed == 0) conn_close(self);
+    
+    if (self->dsn) free(self->dsn);
+    if (self->encoding) PyMem_Free(self->encoding);
+    if (self->critical) free(self->critical);
+    
+    Py_XDECREF(self->notice_list);
+    Py_XDECREF(self->notifies);
+    Py_XDECREF(self->async_cursor);
+    
+    pthread_mutex_destroy(&(self->lock));
+
+    Dprintf("connection_dealloc: deleted connection object at %p, refcnt = %d",
+            obj, obj->ob_refcnt);
+
+    obj->ob_type->tp_free(obj);
+}
+
+static int
+connection_init(PyObject *obj, PyObject *args, PyObject *kwds)
+{
+    char *dsn;
+
+    if (!PyArg_ParseTuple(args, "s", &dsn))
+        return -1;
+
+    return connection_setup((connectionObject *)obj, dsn);
+}
+
+static PyObject *
+connection_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    return type->tp_alloc(type, 0);
+}
+
+static void
+connection_del(PyObject* self)
+{
+    PyObject_Del(self);
+}
+
+static PyObject *
+connection_repr(connectionObject *self)
+{
+    return PyString_FromFormat(
+        "<connection object at %p; dsn: '%s', closed: %ld>",
+        self, self->dsn, self->closed);
+}
+
+
+/* object type */
+
+#define connectionType_doc \
+"connection(dsn, ...) -> new connection object\n\n" \
+":Groups:\n" \
+"  * `DBAPI-2.0 errors`: Error, Warning, InterfaceError,\n" \
+"    DatabaseError, InternalError, OperationalError,\n" \
+"    ProgrammingError, IntegrityError, DataError, NotSupportedError"
+
+PyTypeObject connectionType = {
+    PyObject_HEAD_INIT(NULL)
+    0,
+    "psycopg2._psycopg.connection",
+    sizeof(connectionObject),
+    0,
+    connection_dealloc, /*tp_dealloc*/
+    0,          /*tp_print*/ 
+    0,          /*tp_getattr*/
+    0,          /*tp_setattr*/
+    0,          /*tp_compare*/
+    (reprfunc)connection_repr, /*tp_repr*/
+    0,          /*tp_as_number*/
+    0,          /*tp_as_sequence*/
+    0,          /*tp_as_mapping*/
+    0,          /*tp_hash */
+
+    0,          /*tp_call*/
+    (reprfunc)connection_repr, /*tp_str*/
+    0,          /*tp_getattro*/
+    0,          /*tp_setattro*/
+    0,          /*tp_as_buffer*/
+
+    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /*tp_flags*/
+    connectionType_doc, /*tp_doc*/
+    
+    0,          /*tp_traverse*/
+    0,          /*tp_clear*/
+
+    0,          /*tp_richcompare*/
+    0,          /*tp_weaklistoffset*/
+
+    0,          /*tp_iter*/
+    0,          /*tp_iternext*/
+
+    /* Attribute descriptor and subclassing stuff */
+
+    connectionObject_methods, /*tp_methods*/
+    connectionObject_members, /*tp_members*/
+    0,          /*tp_getset*/
+    0,          /*tp_base*/
+    0,          /*tp_dict*/
+    
+    0,          /*tp_descr_get*/
+    0,          /*tp_descr_set*/
+    0,          /*tp_dictoffset*/
+    
+    connection_init, /*tp_init*/
+    0, /*tp_alloc  will be set to PyType_GenericAlloc in module init*/
+    connection_new, /*tp_new*/
+    (freefunc)connection_del, /*tp_free  Low-level free-memory routine */
+    0,          /*tp_is_gc For PyObject_IS_GC */
+    0,          /*tp_bases*/
+    0,          /*tp_mro method resolution order */
+    0,          /*tp_cache*/
+    0,          /*tp_subclasses*/
+    0           /*tp_weaklist*/
+};
diff --git a/psycopg2/psycopg/cursor.h b/psycopg2/psycopg/cursor.h
new file mode 100644 (file)
index 0000000..5aab172
--- /dev/null
@@ -0,0 +1,103 @@
+/* cursor.h - definition for the psycopg cursor type
+ *
+ * Copyright (C) 2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PSYCOPG_CURSOR_H
+#define PSYCOPG_CURSOR_H 1
+
+#include <Python.h>
+#include <libpq-fe.h>
+
+#include "psycopg/connection.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern PyTypeObject cursorType;
+
+typedef struct {
+    PyObject HEAD;
+
+    connectionObject *conn; /* connection owning the cursor */
+
+    int closed:1;            /* 1 if the cursor is closed */
+    int notuples:1;          /* 1 if the command was not a SELECT query */
+    int needsfetch:1;        /* 1 if a call to pq_fetch is pending */
+    
+    long int rowcount;       /* number of rows affected by last execute */
+    long int columns;        /* number of columns fetched from the db */
+    long int arraysize;      /* how many rows should fetchmany() return */
+    long int row;            /* the row counter for fetch*() operations */
+    long int mark;           /* transaction marker, copied from conn */
+
+    PyObject *description;   /* read-only attribute: sequence of 7-item
+                                sequences.*/
+
+    /* postgres connection stuff */
+    PGresult   *pgres;     /* result of last query */
+    PyObject   *pgstatus;  /* last message from the server after an execute */
+    Oid         lastoid;   /* last oid from an insert or InvalidOid */
+
+    PyObject *casts;      /* an array (tuple) of typecast functions */
+    PyObject *caster;     /* the current typecaster object */
+    
+    PyObject *copyfile;   /* file-like used during COPY TO/FROM ops */
+    long int  copysize;   /* size of the copy buffer during COPY TO/FROM ops */
+#define DEFAULT_COPYSIZE 16384
+    
+    PyObject *tuple_factory;    /* factory for result tuples */
+    PyObject *tzinfo_factory;   /* factory for tzinfo objects */
+    
+    PyObject *query;      /* last query executed */
+    
+    char *qattr;          /* quoting attr, used when quoting strings */
+    char *notice;         /* a notice from the backend */
+    char *name;           /* this cursor name */
+    
+    PyObject *string_types;   /* a set of typecasters for string types */
+    PyObject *binary_types;   /* a set of typecasters for binary types */
+
+} cursorObject;
+    
+/* C-callable functions in cursor_int.c and cursor_ext.c */
+extern void curs_reset(cursorObject *self);
+    
+/* exception-raising macros */
+#define EXC_IF_CURS_CLOSED(self) \
+if ((self)->closed || ((self)->conn && (self)->conn->closed)) { \
+    PyErr_SetString(InterfaceError, "cursor already closed");   \
+    return NULL; }
+
+#define EXC_IF_NO_TUPLES(self) \
+if ((self)->notuples && (self)->name == NULL) {               \
+    PyErr_SetString(ProgrammingError, "no results to fetch"); \
+    return NULL; }
+    
+#define EXC_IF_NO_MARK(self) \
+if ((self)->mark != (self)->conn->mark) {                                  \
+    PyErr_SetString(ProgrammingError, "named cursor isn't valid anymore"); \
+    return NULL; }
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined(PSYCOPG_CURSOR_H) */
diff --git a/psycopg2/psycopg/cursor_int.c b/psycopg2/psycopg/cursor_int.c
new file mode 100644 (file)
index 0000000..8036268
--- /dev/null
@@ -0,0 +1,47 @@
+/* cursor_int.c - code used by the cursor object
+ *
+ * Copyright (C) 2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <Python.h>
+#include <string.h>
+
+#define PSYCOPG_MODULE
+#include "psycopg/config.h"
+#include "psycopg/psycopg.h"
+#include "psycopg/cursor.h"
+#include "psycopg/pqpath.h"
+
+/* curs_reset - reset the cursor to a clean state */
+
+void
+curs_reset(cursorObject *self)
+{
+    /* initialize some variables to default values */
+    self->notuples = 1;
+    self->rowcount = -1;
+    self->row = 0;
+
+    Py_XDECREF(self->description);
+    Py_INCREF(Py_None);
+    self->description = Py_None;
+
+    Py_XDECREF(self->casts);
+    self->casts = NULL;
+}
diff --git a/psycopg2/psycopg/cursor_type.c b/psycopg2/psycopg/cursor_type.c
new file mode 100644 (file)
index 0000000..73e4de6
--- /dev/null
@@ -0,0 +1,1553 @@
+/* cursor_type.c - python interface to cursor objects
+ *
+ * Copyright (C) 2003-2004 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public Likcense
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <Python.h>
+#include <structmember.h>
+#include <string.h>
+
+#define PSYCOPG_MODULE
+#include "psycopg/config.h"
+#include "psycopg/python.h"
+#include "psycopg/psycopg.h"
+#include "psycopg/cursor.h"
+#include "psycopg/connection.h"
+#include "psycopg/pqpath.h"
+#include "psycopg/typecast.h"
+#include "psycopg/microprotocols.h"
+#include "psycopg/microprotocols_proto.h"
+#include "pgversion.h"
+
+extern PyObject *pyPsycopgTzFixedOffsetTimezone;
+
+
+/** DBAPI methods **/
+
+/* close method - close the cursor */
+
+#define psyco_curs_close_doc \
+"close() -- Close the cursor."
+
+static PyObject *
+psyco_curs_close(cursorObject *self, PyObject *args)
+{
+    if (!PyArg_ParseTuple(args, "")) return NULL;
+    
+    EXC_IF_CURS_CLOSED(self);
+    
+    if (self->name != NULL) {
+        char buffer[128];
+        
+        EXC_IF_NO_MARK(self);
+        PyOS_snprintf(buffer, 127, "CLOSE %s", self->name);
+        if (pq_execute(self, buffer, 0) == -1) return NULL;
+    }
+
+    self->closed = 1;
+    Dprintf("psyco_curs_close: cursor at %p closed", self);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
+/* execute method - executes a query */
+
+/* mogrify a query string and build argument array or dict */
+
+static int
+_mogrify(PyObject *var, PyObject *fmt, connectionObject *conn, PyObject **new)
+{
+    PyObject *key, *value, *n, *item;
+    char *d, *c;
+    int index = 0, force = 0;
+
+    /* from now on we'll use n and replace its value in *new only at the end,
+       just before returning. we also init *new to NULL to exit with an error
+       if we can't complete the mogrification */
+    n = *new = NULL;
+    c = PyString_AsString(fmt);
+
+    while(*c) {
+        /* handle plain percent symbol in format string */
+        if (c[0] == '%' && c[1] == '%') {
+            c+=2; force = 1;
+        }
+        
+        /* if we find '%(' then this is a dictionary, we:
+           1/ find the matching ')' and extract the key name
+           2/ locate the value in the dictionary (or return an error)
+           3/ mogrify the value into something usefull (quoting)...
+           4/ ...and add it to the new dictionary to be used as argument
+        */
+        else if (c[0] == '%' && c[1] == '(') {
+
+            /* let's have d point the end of the argument */
+            for (d = c + 2; *d && *d != ')'; d++);
+
+            if (*d == ')') {
+                key = PyString_FromStringAndSize(c+2, d-c-2);
+                value = PyObject_GetItem(var, key);
+                /* key has refcnt 1, value the original value + 1 */
+                
+                /*  if value is NULL we did not find the key (or this is not a
+                    dictionary): let python raise a KeyError */
+                if (value == NULL) {
+                    Py_DECREF(key); /* destroy key */
+                    Py_XDECREF(n);  /* destroy n */
+                    return -1;
+                }
+
+                Dprintf("_mogrify: value refcnt: %d (+1)", value->ob_refcnt);
+                
+                if (n == NULL) {
+                    n = PyDict_New();
+                }
+                
+                if ((item = PyObject_GetItem(n, key)) == NULL) {
+                    PyObject *t = NULL;
+
+                    PyErr_Clear();
+
+                    /* None is always converted to NULL; this is an
+                       optimization over the adapting code and can go away in
+                       the future if somebody finds a None adapter usefull. */
+                    if (value == Py_None) {
+                        t = PyString_FromString("NULL");
+                        PyDict_SetItem(n, key, t);
+                        /* t is a new object, refcnt = 1, key is at 2 */
+                        
+                        /* if the value is None we need to substitute the
+                           formatting char with 's' (FIXME: this should not be
+                           necessary if we drop support for formats other than
+                           %s!) */
+                        while (*d && !isalpha(*d)) d++;
+                        if (*d) *d = 's';
+                    }
+                    else {
+                        t = microprotocol_getquoted(value, conn);
+
+                        if (t != NULL) {
+                            PyDict_SetItem(n, key, t);
+                            /* both key and t refcnt +1, key is at 2 now */
+                        }
+                        else {
+                            /* no adapter found, raise a BIG exception */
+                            Py_XDECREF(value); 
+                            Py_DECREF(n);
+                            return -1;
+                        }
+                    }
+
+                    Py_XDECREF(t); /* t dies here */
+                    /* after the DECREF value has the original refcnt plus 1
+                       if it was added to the dictionary directly; good */
+                    Py_XDECREF(value); 
+                }
+                else {
+                    /* we have an item with one extra refcnt here, zap! */
+                    Py_DECREF(item);
+                }
+                Py_DECREF(key); /* key has the original refcnt now */
+                Dprintf("_mogrify: after value refcnt: %d",value->ob_refcnt);
+            }
+            c = d;
+        }
+        
+        else if (c[0] == '%' && c[1] != '(') {
+            /* this is a format that expects a tuple; it is much easier,
+               because we don't need to check the old/new dictionary for
+               keys */
+            
+            value = PySequence_GetItem(var, index);
+            /* value has refcnt inc'ed by 1 here */
+            
+            /*  if value is NULL this is not a sequence or the index is wrong;
+                anyway we let python set its own exception */
+            if (value == NULL) {
+                Py_XDECREF(n);
+                return -1;
+            }
+
+            if (n == NULL) {
+                n = PyTuple_New(PyObject_Length(var));
+            }
+            
+            /* let's have d point just after the '%' */
+            d = c+1;
+            
+            if (value == Py_None) {
+                PyTuple_SET_ITEM(n, index, PyString_FromString("NULL"));
+                while (*d && !isalpha(*d)) d++;
+                if (*d) *d = 's';
+                Py_DECREF(value);
+            }
+            else {
+                PyObject *t = microprotocol_getquoted(value, conn);
+
+                if (t != NULL) {
+                    PyTuple_SET_ITEM(n, index, t);
+                    Py_DECREF(value);
+                }
+                else {
+                    Py_DECREF(n);
+                    Py_DECREF(value);
+                    return -1;
+                }
+            }
+            c = d;
+            index += 1;
+        }
+        else {
+            c++;
+        }
+    }
+
+    if (force && n == NULL)
+        n = PyTuple_New(0);
+    *new = n;
+    
+    return 0;
+}
+    
+#define psyco_curs_execute_doc \
+"execute(query, vars=None, async=0) -- Execute query with bound vars."
+
+static int
+_psyco_curs_execute(cursorObject *self,
+                    PyObject *operation, PyObject *vars, long int async)
+{
+    int res;
+    PyObject *fquery, *cvt = NULL, *uoperation = NULL;
+    
+    pthread_mutex_lock(&(self->conn->lock));
+    if (self->conn->async_cursor != NULL
+        && self->conn->async_cursor != (PyObject*)self) {
+        pthread_mutex_unlock(&(self->conn->lock));
+        psyco_set_error(ProgrammingError, (PyObject*)self,
+                         "asynchronous query already in execution", NULL, NULL);
+        return 0;
+    }
+    pthread_mutex_unlock(&(self->conn->lock));
+    
+    if (!PyObject_IsTrue(operation)) {
+        psyco_set_error(ProgrammingError, (PyObject*)self,
+                         "can't execute an empty query", NULL, NULL);
+       return 0;
+    }
+    
+    if (PyUnicode_Check(operation)) {
+        PyObject *enc = PyDict_GetItemString(psycoEncodings,
+                                             self->conn->encoding);
+        /* enc is a borrowed reference, we won't decref it */
+        
+        if (enc) {
+            operation = PyUnicode_AsEncodedString(
+                operation, PyString_AsString(enc), NULL);
+
+            /* if there was an error during the encoding from unicode to the
+               target encoding we just let the exception propagate */
+            if (operation == NULL) return 0;
+
+            /* we clone operation in uoperation to be sure to free it later */ 
+            uoperation = operation;
+        }
+        else {
+            PyErr_Format(InterfaceError, "can't encode unicode query to %s",
+                         self->conn->encoding);
+            return 0;
+        }
+    }
+    else if (!PyString_Check(operation)) {
+        /* the operation is not unicode or string, raise an error */
+        PyErr_SetString(PyExc_TypeError,
+                        "argument 1 must be a string or unicode object");
+        return 0;
+    }
+    
+    IFCLEARPGRES(self->pgres);
+
+    if (self->query) {
+        Py_DECREF(self->query);
+        self->query = NULL;
+    }
+    
+    Dprintf("psyco_curs_execute: starting execution of new query");
+
+    /* here we are, and we have a sequence or a dictionary filled with
+       objects to be substituted (bound variables). we try to be smart and do
+       the right thing (i.e., what the user expects) */
+    
+    if (vars && vars != Py_None)
+    {
+        if(_mogrify(vars, operation, self->conn, &cvt) == -1) {
+            Py_XDECREF(uoperation);
+            return 0;
+        }
+    }
+
+    if (vars && cvt) {
+        /* if PyString_Format() return NULL an error occured: if the error is
+           a TypeError we need to check the exception.args[0] string for the
+           values:
+
+               "not enough arguments for format string"
+               "not all arguments converted"
+
+           and return the appropriate ProgrammingError. we do that by grabbing
+           the curren exception (we will later restore it if the type or the
+           strings do not match.) */
+        
+        if (!(fquery = PyString_Format(operation, cvt))) {
+            PyObject *err, *arg, *trace;
+            int pe = 0;
+
+            PyErr_Fetch(&err, &arg, &trace);
+            
+            if (err && PyErr_GivenExceptionMatches(err, PyExc_TypeError)) {
+                Dprintf("psyco_curs_execute: TypeError exception catched");
+                PyErr_NormalizeException(&err, &arg, &trace);
+
+                if (PyObject_HasAttrString(arg, "args")) {
+                    PyObject *args = PyObject_GetAttrString(arg, "args");
+                    PyObject *str = PySequence_GetItem(args, 0);
+                    char *s = PyString_AS_STRING(str);
+
+                    Dprintf("psyco_curs_execute:     -> %s", s);
+
+                    if (!strcmp(s, "not enough arguments for format string")
+                      || !strcmp(s, "not all arguments converted")) {
+                        Dprintf("psyco_curs_execute:     -> got a match");
+                        psyco_set_error(ProgrammingError, (PyObject*)self,
+                                         s, NULL, NULL);
+                        pe = 1;
+                    }
+
+                    Py_DECREF(args);
+                    Py_DECREF(str);
+                }
+            }
+
+            /* if we did not manage our own exception, restore old one */
+            if (pe == 1) {
+                Py_XDECREF(err); Py_XDECREF(arg); Py_XDECREF(trace);
+            }
+            else {
+                PyErr_Restore(err, arg, trace);
+            }
+            Py_XDECREF(uoperation);
+            return 0;
+        }
+        
+        if (self->name != NULL) {
+            self->query = PyString_FromFormat(
+                "DECLARE %s CURSOR WITHOUT HOLD FOR %s",
+                self->name, PyString_AS_STRING(fquery));
+            Py_DECREF(fquery);
+        }
+        else {
+            self->query = fquery;
+        }
+        
+        Dprintf("psyco_curs_execute: cvt->refcnt = %d", cvt->ob_refcnt);
+        Py_DECREF(cvt);
+    }
+    else {
+        if (self->name != NULL) {
+            self->query = PyString_FromFormat(
+                "DECLARE %s CURSOR WITHOUT HOLD FOR %s",
+                self->name, PyString_AS_STRING(operation));
+        }
+        else {
+            Py_INCREF(operation);
+            self->query = operation;
+        }
+    }
+    
+    res = pq_execute(self, PyString_AS_STRING(self->query), async);
+    
+    Dprintf("psyco_curs_execute: res = %d, pgres = %p", res, self->pgres);
+
+    Py_XDECREF(uoperation);
+    
+    return res == -1 ? 0 : 1;
+}
+
+static PyObject *
+psyco_curs_execute(cursorObject *self, PyObject *args, PyObject *kwargs)
+{   
+    long int async = 0;
+    PyObject *vars = NULL, *operation = NULL;
+    
+    static char *kwlist[] = {"query", "vars", "async", NULL};
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|Oi", kwlist,
+                                     &operation, &vars, &async)) {
+        return NULL;
+    }
+
+    if (self->name != NULL) {
+        if (self->query != Py_None) {
+            psyco_set_error(ProgrammingError, (PyObject*)self,
+                "can't call .execute() on named cursors more than once",
+                NULL, NULL);
+            return NULL;
+        }
+        if (self->conn->isolation_level == 0) {
+            psyco_set_error(ProgrammingError, (PyObject*)self,
+                "can't use a named cursor outside of transactions", NULL, NULL);
+            return NULL;          
+        }
+        if (self->conn->mark != self->mark) {
+            psyco_set_error(ProgrammingError, (PyObject*)self,
+                "named cursor isn't valid anymore", NULL, NULL);
+            return NULL;
+        }
+    }
+
+    EXC_IF_CURS_CLOSED(self);
+    
+    if (_psyco_curs_execute(self, operation, vars, async)) {
+        Py_INCREF(Py_None);
+        return Py_None;
+    }
+    else {
+        return NULL;
+    }
+}
+
+#define psyco_curs_executemany_doc \
+"executemany(query, vars_list) -- Execute many queries with bound vars."
+
+static PyObject *
+psyco_curs_executemany(cursorObject *self, PyObject *args, PyObject *kwargs)
+{
+    PyObject *operation = NULL, *vars = NULL;
+    PyObject *v, *iter = NULL;
+    
+    static char *kwlist[] = {"query", "vars_list", NULL};
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "OO", kwlist,
+                                     &operation, &vars)) {
+        return NULL;
+    }
+
+    EXC_IF_CURS_CLOSED(self);
+    
+    if (self->name != NULL) {
+        psyco_set_error(ProgrammingError, (PyObject*)self,
+                "can't call .executemany() on named cursors", NULL, NULL);
+        return NULL;
+    } 
+
+    if (!PyIter_Check(vars)) {
+        vars = iter = PyObject_GetIter(vars);
+        if (iter == NULL) return NULL;
+    }
+    
+    while ((v = PyIter_Next(vars)) != NULL) {
+        if (_psyco_curs_execute(self, operation, v, 0) == 0) {
+            Py_DECREF(v);
+            return NULL;
+        }
+        else {
+            Py_DECREF(v);
+        }
+    }
+    Py_XDECREF(iter);
+    
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
+#ifdef PSYCOPG_EXTENSIONS
+#define psyco_curs_mogrify_doc \
+"mogrify(query, vars=None) -> str -- Return query after vars binding."
+
+static PyObject *
+psyco_curs_mogrify(cursorObject *self, PyObject *args, PyObject *kwargs)
+{   
+    PyObject *vars = NULL, *cvt = NULL, *operation = NULL;
+    PyObject *fquery;
+    
+    static char *kwlist[] = {"query", "vars", NULL};
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O|O", kwlist,
+                                     &operation, &vars)) {
+        return NULL;
+    }
+
+    if (PyUnicode_Check(operation)) {
+        PyErr_SetString(NotSupportedError,
+                        "unicode queries not yet supported");
+        return NULL;
+    }
+    
+    EXC_IF_CURS_CLOSED(self);
+    IFCLEARPGRES(self->pgres);
+
+    /* note that we don't overwrite the last query executed on the cursor, we
+       just *return* the new query with bound variables
+
+       TODO: refactor the common mogrification code (see psycopg_curs_execute
+       for comments, the code is amost identical) */
+
+    if (vars)
+    {
+        if(_mogrify(vars, operation, self->conn, &cvt) == -1) return NULL;
+    }
+
+    if (vars && cvt) {        
+        if (!(fquery = PyString_Format(operation, cvt))) {
+            PyObject *err, *arg, *trace;
+            int pe = 0;
+
+            PyErr_Fetch(&err, &arg, &trace);
+            
+            if (err && PyErr_GivenExceptionMatches(err, PyExc_TypeError)) {
+                Dprintf("psyco_curs_execute: TypeError exception catched");
+                PyErr_NormalizeException(&err, &arg, &trace);
+
+                if (PyObject_HasAttrString(arg, "args")) {
+                    PyObject *args = PyObject_GetAttrString(arg, "args");
+                    PyObject *str = PySequence_GetItem(args, 0);
+                    char *s = PyString_AS_STRING(str);
+
+                    Dprintf("psyco_curs_execute:     -> %s", s);
+
+                    if (!strcmp(s, "not enough arguments for format string")
+                      || !strcmp(s, "not all arguments converted")) {
+                        Dprintf("psyco_curs_execute:     -> got a match");
+                        psyco_set_error(ProgrammingError, (PyObject*)self,
+                                         s, NULL, NULL);
+                        pe = 1;
+                    }
+
+                    Py_DECREF(args);
+                    Py_DECREF(str);
+                }
+            }
+
+            /* if we did not manage our own exception, restore old one */
+            if (pe == 1) {
+                Py_XDECREF(err); Py_XDECREF(arg); Py_XDECREF(trace);
+            }
+            else {
+                PyErr_Restore(err, arg, trace);
+            }
+            return NULL;
+        }
+
+        Dprintf("psyco_curs_execute: cvt->refcnt = %d, fquery->refcnt = %d",
+                cvt->ob_refcnt, fquery->ob_refcnt);
+        Py_DECREF(cvt);
+    }
+    else {
+        fquery = operation;
+        Py_INCREF(operation);
+    }
+
+    return fquery;
+}
+#endif
+
+
+/* fetchone method - fetch one row of results */
+
+#define psyco_curs_fetchone_doc \
+"fetchone() -> tuple or None\n\n" \
+"Return the next row of a query result set in the form of a tuple (by\n" \
+"default) or using the sequence factory previously set in the\n" \
+"`row_factory` attribute. Return `None` when no more data is available.\n"
+
+static int
+_psyco_curs_prefetch(cursorObject *self)
+{
+    int i = 0;
+    
+    /* check if the fetching cursor is the one that did the asynchronous query
+       and raise an exception if not */
+    pthread_mutex_lock(&(self->conn->lock));
+    if (self->conn->async_cursor != NULL
+        && self->conn->async_cursor != (PyObject*)self) {
+        pthread_mutex_unlock(&(self->conn->lock));
+        psyco_set_error(ProgrammingError, (PyObject*)self,
+                         "asynchronous fetch by wrong cursor", NULL, NULL);
+        return -2;
+    }
+    pthread_mutex_unlock(&(self->conn->lock));
+    
+    if (self->pgres == NULL || self->needsfetch) {
+        self->needsfetch = 0;
+        Dprintf("_psyco_curs_prefetch: trying to fetch data");
+        do {
+            i = pq_fetch(self);
+            Dprintf("_psycopg_curs_prefetch: result = %d", i);
+        } while(i == 1);
+    }
+
+    Dprintf("_psyco_curs_prefetch: result = %d", i);
+    return i;
+}
+
+static PyObject *
+_psyco_curs_buildrow_fill(cursorObject *self, PyObject *res,
+                          int row, int n, int istuple)
+{
+    int i, len;
+    unsigned char *str;
+    PyObject *val;
+    
+    for (i=0; i < n; i++) {
+        if (PQgetisnull(self->pgres, row, i)) {
+            str = NULL;
+            len = 0;
+        }
+        else {
+            str = (unsigned char*)PQgetvalue(self->pgres, row, i);
+            len = PQgetlength(self->pgres, row, i);
+        }
+
+        Dprintf("_psyco_curs_buildrow: row %ld, element %d, len %i",
+                self->row, i, len);
+
+        val = typecast_cast(PyTuple_GET_ITEM(self->casts, i), (char*)str, len,
+                            (PyObject*)self);
+
+        if (val) {
+            Dprintf("_psyco_curs_buildrow: val->refcnt = %d", val->ob_refcnt);
+            if (istuple) {
+                PyTuple_SET_ITEM(res, i, val);
+            }
+            else {
+                PySequence_SetItem(res, i, val);
+                Py_DECREF(val);
+            }
+        }
+        else {
+            /* an error occurred in the type system, we return NULL to raise
+               an exception. the typecast code should already have set the
+               exception type and text */
+            Py_DECREF(res);
+            res = NULL;
+            break;
+        }
+    }
+    return res;
+}
+
+static PyObject *
+_psyco_curs_buildrow(cursorObject *self, int row)
+{
+    int n;
+    
+    n = PQnfields(self->pgres);
+    return _psyco_curs_buildrow_fill(self, PyTuple_New(n), row, n, 1);
+}
+
+static PyObject *
+_psyco_curs_buildrow_with_factory(cursorObject *self, int row)
+{
+    int n;
+    PyObject *res;
+
+    n = PQnfields(self->pgres);
+    if ((res = PyObject_CallFunction(self->tuple_factory, "O", self))== NULL)
+        return NULL;
+
+    return _psyco_curs_buildrow_fill(self, res, row, n, 0);
+}
+
+PyObject *
+psyco_curs_fetchone(cursorObject *self, PyObject *args)
+{
+    PyObject *res;
+    
+    if (args && !PyArg_ParseTuple(args, "")) return NULL;
+    
+    EXC_IF_CURS_CLOSED(self)
+    if (_psyco_curs_prefetch(self) < 0) return NULL;
+    EXC_IF_NO_TUPLES(self);
+    
+    if (self->name != NULL) {
+        char buffer[128];
+        
+        EXC_IF_NO_MARK(self);
+        PyOS_snprintf(buffer, 127, "FETCH FORWARD 1 FROM %s", self->name);
+        if (pq_execute(self, buffer, 0) == -1) return NULL;
+        if (_psyco_curs_prefetch(self) < 0) return NULL;
+    }
+    
+    Dprintf("psyco_curs_fetchone: fetching row %ld", self->row);
+    Dprintf("psyco_curs_fetchone: rowcount = %ld", self->rowcount); 
+
+    if (self->row >= self->rowcount) {
+        /* we exausted available data: return None */
+        Py_INCREF(Py_None);
+        return Py_None;
+    }
+
+    if (self->tuple_factory == Py_None)
+        res = _psyco_curs_buildrow(self, self->row);
+    else
+        res = _psyco_curs_buildrow_with_factory(self, self->row);
+    
+    self->row++; /* move the counter to next line */
+
+    /* if the query was async aggresively free pgres, to allow
+       successive requests to reallocate it */
+    if (self->row >= self->rowcount
+        && self->conn->async_cursor == (PyObject*)self)
+        IFCLEARPGRES(self->pgres);
+
+    return res;
+}
+
+
+/* fetch many - fetch some results */
+
+#define psyco_curs_fetchmany_doc \
+"fetchmany(size=self.arraysize) -> list of tuple\n\n" \
+"Return the next `size` rows of a query result set in the form of a list\n" \
+"of tuples (by default) or using the sequence factory previously set in\n" \
+"the `row_factory` attribute. Return `None` when no more data is available.\n"
+
+PyObject *
+psyco_curs_fetchmany(cursorObject *self, PyObject *args, PyObject *kwords)
+{
+    int i;
+    PyObject *list, *res;
+    
+    long int size = self->arraysize;
+    static char *kwlist[] = {"size", NULL};
+    
+    if (!PyArg_ParseTupleAndKeywords(args, kwords, "|l", kwlist, &size)) {
+        return NULL;
+    }
+
+    EXC_IF_CURS_CLOSED(self);
+    if (_psyco_curs_prefetch(self) < 0) return NULL;
+    EXC_IF_NO_TUPLES(self);
+
+    if (self->name != NULL) {
+        char buffer[128];
+        
+        EXC_IF_NO_MARK(self);
+        PyOS_snprintf(buffer, 127, "FETCH FORWARD %d FROM %s",
+            (int)size, self->name);
+        if (pq_execute(self, buffer, 0) == -1) return NULL;
+        if (_psyco_curs_prefetch(self) < 0) return NULL;
+    }
+
+    /* make sure size is not > than the available number of rows */
+    if (size > self->rowcount - self->row || size < 0) {
+        size = self->rowcount - self->row;
+    }
+
+    Dprintf("psyco_curs_fetchmany: size = %ld", size);
+    
+    if (size <= 0) {
+        return PyList_New(0);
+    }
+    
+    list = PyList_New(size);
+    
+    for (i = 0; i < size; i++) {
+        if (self->tuple_factory == Py_None)
+            res = _psyco_curs_buildrow(self, self->row);
+        else
+            res = _psyco_curs_buildrow_with_factory(self, self->row);
+        
+        self->row++;
+
+        if (res == NULL) {
+            Py_DECREF(list);
+            return NULL;
+        }
+
+        PyList_SET_ITEM(list, i, res);
+    }
+
+    /* if the query was async aggresively free pgres, to allow
+       successive requests to reallocate it */
+    if (self->row >= self->rowcount
+        && self->conn->async_cursor == (PyObject*)self)
+        IFCLEARPGRES(self->pgres);
+    
+    return list;
+}
+
+
+/* fetch all - fetch all results */
+
+#define psyco_curs_fetchall_doc \
+"fetchall() -> list of tuple\n\n" \
+"Return all the remaining rows of a query result set.\n\n" \
+"Rows are returned in the form of a list of tuples (by default) or using\n" \
+"the sequence factory previously set in the `row_factory` attribute.\n" \
+"Return `None` when no more data is available.\n"
+
+PyObject *
+psyco_curs_fetchall(cursorObject *self, PyObject *args)
+{
+    int i, size;
+    PyObject *list, *res;
+
+    if (!PyArg_ParseTuple(args, "")) {
+        return NULL;
+    }
+
+    EXC_IF_CURS_CLOSED(self);
+    if (_psyco_curs_prefetch(self) < 0) return NULL;
+    EXC_IF_NO_TUPLES(self);
+    
+    if (self->name != NULL) {
+        char buffer[128];
+        
+        EXC_IF_NO_MARK(self);
+        PyOS_snprintf(buffer, 127, "FETCH FORWARD ALL FROM %s", self->name);
+        if (pq_execute(self, buffer, 0) == -1) return NULL;
+        if (_psyco_curs_prefetch(self) < 0) return NULL;
+    }
+
+    size = self->rowcount - self->row;
+    
+    if (size <= 0) {
+        return PyList_New(0);
+    }
+    
+    list = PyList_New(size);
+    
+    for (i = 0; i < size; i++) {
+        if (self->tuple_factory == Py_None)
+            res = _psyco_curs_buildrow(self, self->row);
+        else
+            res = _psyco_curs_buildrow_with_factory(self, self->row);
+        
+        self->row++;
+
+        if (res == NULL) {
+            Py_DECREF(list);
+            return NULL;
+        }
+
+        PyList_SET_ITEM(list, i, res);
+    }
+
+    /* if the query was async aggresively free pgres, to allow
+       successive requests to reallocate it */
+    if (self->row >= self->rowcount
+        && self->conn->async_cursor == (PyObject*)self)
+        IFCLEARPGRES(self->pgres);
+    
+    return list;
+}
+
+
+/* callproc method - execute a stored procedure */
+
+#define psyco_curs_callproc_doc \
+"callproc(procname, parameters=None, async=0) -- Execute stored procedure."
+
+static PyObject *
+psyco_curs_callproc(cursorObject *self, PyObject *args, PyObject *kwargs)
+{
+    char *procname = NULL, *sql = NULL;
+    long int async = 0;
+    int i, nparameters = 0, sl = 0;
+    PyObject *parameters = NULL;
+    PyObject *operation = NULL;
+    PyObject *res = NULL;
+
+    if (!PyArg_ParseTuple(args, "s|Oi", &procname, &parameters, &async)) {
+        return NULL;
+    }
+
+    EXC_IF_CURS_CLOSED(self);
+
+    if (self->name != NULL) {
+        psyco_set_error(ProgrammingError, (PyObject*)self,
+                         "can't call .callproc() on named cursors", NULL, NULL);
+        return NULL;
+    } 
+
+    if(parameters && parameters != Py_None) {
+        nparameters = PyObject_Length(parameters);
+       if (nparameters < 0) nparameters = 0;
+    }
+
+    /* allocate some memory, build the SQL and create a PyString from it */
+    sl = strlen(procname) + 10 + nparameters*3 - (nparameters ? 1 : 0);
+    sql = (char*)PyMem_Malloc(sl);
+    if (sql == NULL) return NULL;
+    
+    sprintf(sql, "SELECT %s(", procname);
+    for(i=0; i<nparameters; i++) {
+        strcat(sql, "%s,");
+    }
+    sql[sl-2] = ')';
+    sql[sl-1] = '\0';
+    
+    operation = PyString_FromString(sql);
+    PyMem_Free((void*)sql);
+    
+    if (_psyco_curs_execute(self, operation, parameters, async)) {
+        Py_INCREF(Py_None);
+        res = Py_None;
+    }
+
+    Py_DECREF(operation);
+    return res;
+}
+
+
+/* nextset method - return the next set of data (not supported) */
+
+#define psyco_curs_nextset_doc \
+"nextset() -- Skip to next set of data.\n\n" \
+"This method is not supported (PostgreSQL does not have multiple data \n" \
+"sets) and will raise a NotSupportedError exception."
+
+static PyObject *
+psyco_curs_nextset(cursorObject *self, PyObject *args)
+{
+    if (!PyArg_ParseTuple(args, "")) return NULL;
+    
+    EXC_IF_CURS_CLOSED(self);
+
+    PyErr_SetString(NotSupportedError, "not supported by PostgreSQL");
+    return NULL;
+}
+
+
+/* setinputsizes - predefine memory areas for execute (does nothing) */
+
+#define psyco_curs_setinputsizes_doc \
+"setinputsizes(sizes) -- Set memory areas before execute.\n\n" \
+"This method currently does nothing but it is safe to call it."
+
+static PyObject *
+psyco_curs_setinputsizes(cursorObject *self, PyObject *args)
+{
+    PyObject *sizes;
+    
+    if (!PyArg_ParseTuple(args, "O", &sizes))
+        return NULL;
+    
+    EXC_IF_CURS_CLOSED(self);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
+/* setoutputsize - predefine memory areas for execute (does nothing) */
+
+#define psyco_curs_setoutputsize_doc \
+"setoutputsize(size, column=None) -- Set column buffer size.\n\n" \
+"This method currently does nothing but it is safe to call it."
+
+static PyObject *
+psyco_curs_setoutputsize(cursorObject *self, PyObject *args)
+{
+    long int size, column;
+    
+    if (!PyArg_ParseTuple(args, "l|l", &size, &column))
+        return NULL;
+    
+    EXC_IF_CURS_CLOSED(self);
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
+/* scroll - scroll position in result list */
+
+#define psyco_curs_scroll_doc \
+"scroll(value, mode='relative') -- Scroll to new position according to mode." 
+
+static PyObject *
+psyco_curs_scroll(cursorObject *self, PyObject *args, PyObject *kwargs)
+{
+    int value, newpos;
+    char *mode = "relative";
+
+    static char *kwlist[] = {"value", "mode", NULL};
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "i|s",
+                                     kwlist, &value, &mode))
+        return NULL;
+    
+    EXC_IF_CURS_CLOSED(self);
+
+    /* if the cursor is not named we have the full result set and we can do
+       our own calculations to scroll; else we just delegate the scrolling
+       to the MOVE SQL statement */
+    if (self->name == NULL) {
+        if (strcmp(mode, "relative") == 0) {
+            newpos = self->row + value;
+        } else if (strcmp( mode, "absolute") == 0) {
+            newpos = value;
+        } else {
+            psyco_set_error(ProgrammingError, (PyObject*)self,
+                "scroll mode must be 'relative' or 'absolute'", NULL, NULL);
+            return NULL;
+        }
+    
+        if (newpos < 0 || newpos >= self->rowcount ) {
+            psyco_set_error(ProgrammingError, (PyObject*)self,
+                             "scroll destination out of bounds", NULL, NULL);
+            return NULL;
+        }
+        
+        self->row = newpos;
+    }
+    
+    else {
+        char buffer[128];
+        
+        EXC_IF_NO_MARK(self);
+        
+        if (strcmp(mode, "absolute") == 0) {
+            PyOS_snprintf(buffer, 127, "MOVE ABSOLUTE %d FROM %s",
+                value, self->name);
+        }
+        else {
+            PyOS_snprintf(buffer, 127, "MOVE %d FROM %s", value, self->name);
+        }
+        if (pq_execute(self, buffer, 0) == -1) return NULL;
+        if (_psyco_curs_prefetch(self) < 0) return NULL;
+    }
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
+#ifdef PSYCOPG_EXTENSIONS
+
+/* extension: copy_from - implements COPY FROM */
+
+#define psyco_curs_copy_from_doc \
+"copy_from(file, table, sep='\\t', null='\\N', columns=None) -- Copy table from file."
+
+static int
+_psyco_curs_has_read_check(PyObject* o, void* var)
+{
+    if (PyObject_HasAttrString(o, "readline")
+        && PyObject_HasAttrString(o, "read")) {
+        Py_INCREF(o);
+        *((PyObject**)var) = o;
+        return 1;
+    }
+    else {
+        PyErr_SetString(PyExc_TypeError,
+            "argument 1 must have both .read() and .readline() methods");
+        return 0;
+    }   
+}
+
+static PyObject *
+psyco_curs_copy_from(cursorObject *self, PyObject *args, PyObject *kwargs)
+{
+    char query[1024];
+    char *table_name;
+    char *sep = "\t", *null = NULL;
+    long int bufsize = DEFAULT_COPYSIZE;
+    PyObject *file, *columns = NULL, *res = NULL;
+    char columnlist[1024] = "";
+
+    static char *kwlist[] = {"file", "table", "sep", "null", "size", 
+                             "columns", NULL};
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&s|ssiO", kwlist,
+                                     _psyco_curs_has_read_check, &file,
+                                     &table_name, &sep, &null, &bufsize,
+                                     &columns)) {
+        return NULL;
+    }
+    
+    if (columns != NULL && columns != Py_None) {
+        PyObject* collistiter = PyObject_GetIter(columns);
+        PyObject* col;
+        int collistlen = 2;
+        int colitemlen;
+        char* colname;
+        if (collistiter == NULL) {
+            return NULL;
+        }
+        strcpy(columnlist, " (");
+        while ((col = PyIter_Next(collistiter)) != NULL) {
+            if (!PyString_Check(col)) {
+                Py_DECREF(col);
+                Py_DECREF(collistiter);
+                PyErr_SetString(PyExc_ValueError,
+                   "Elements in column list must be strings");
+                return NULL;
+            }
+            PyString_AsStringAndSize(col, &colname, &colitemlen);
+            if (collistlen + colitemlen > 1022) {
+                Py_DECREF(col);
+                Py_DECREF(collistiter);
+                PyErr_SetString(PyExc_ValueError, "Column list too long");
+                return NULL;
+            }
+            strncpy(&columnlist[collistlen], colname, colitemlen);
+            collistlen += colitemlen;
+            columnlist[collistlen++] = ',';
+            Py_DECREF(col);
+        }
+        Py_DECREF(collistiter);
+
+        if (collistlen == 2) {  /* empty list; we printed no comma */
+            collistlen++;
+        }
+
+        columnlist[collistlen - 1] = ')';
+        columnlist[collistlen] = '\0';
+    }
+
+    if (PyErr_Occurred()) {
+        return NULL;
+    }
+
+    EXC_IF_CURS_CLOSED(self);
+
+    if (null) {
+        PyOS_snprintf(query, 1023, "COPY %s%s FROM stdin USING DELIMITERS '%s'"
+                      " WITH NULL AS '%s'", table_name, columnlist, sep, null);
+    }
+    else {
+        PyOS_snprintf(query, 1023, "COPY %s%s FROM stdin USING DELIMITERS '%s'",
+                      table_name, columnlist, sep);
+    }
+    Dprintf("psyco_curs_copy_from: query = %s", query);
+
+    self->copysize = bufsize;
+    self->copyfile = file;
+
+    if (pq_execute(self, query, 0) == 1) {
+        res = Py_None;
+        Py_INCREF(Py_None);
+    }
+
+    self->copyfile =NULL;
+    
+    return res;
+}
+
+#define psyco_curs_copy_to_doc \
+"copy_to(file, table, sep='\\t', null='\\N') -- Copy table to file."
+
+static int
+_psyco_curs_has_write_check(PyObject* o, void* var)
+{
+    if (PyObject_HasAttrString(o, "write")) {
+        Py_INCREF(o);
+        *((PyObject**)var) = o;
+        return 1;
+    }
+    else {
+        PyErr_SetString(PyExc_TypeError,
+                        "argument 1 must have a .write() method");
+        return 0;
+    }   
+}
+
+static PyObject *
+psyco_curs_copy_to(cursorObject *self, PyObject *args, PyObject *kwargs)
+{
+    char query[256];
+    char *table_name;
+    char *sep = "\t", *null = NULL;
+    PyObject *file, *res = NULL;
+
+    static char *kwlist[] = {"file", "table", "sep", "null", NULL};
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O&s|ss", kwlist,
+                                     _psyco_curs_has_write_check, &file,
+                                     &table_name, &sep, &null)) {
+        return NULL;
+    }
+    
+    EXC_IF_CURS_CLOSED(self);
+
+    if (null) {
+        PyOS_snprintf(query, 255, "COPY %s TO stdout USING DELIMITERS '%s'"
+                      " WITH NULL AS '%s'", table_name, sep, null);
+    }
+    else {
+        PyOS_snprintf(query, 255, "COPY %s TO stdout USING DELIMITERS '%s'",
+                      table_name, sep);
+    }
+
+    self->copysize = 0;
+    self->copyfile = file;
+
+    if (pq_execute(self, query, 0) == 1) {
+        res = Py_None;
+        Py_INCREF(Py_None);   
+    }
+    
+    self->copyfile = NULL;
+    
+    return res;
+}   
+/* extension: fileno - return the file descripor of the connection */
+
+#define psyco_curs_fileno_doc \
+"fileno() -> int -- Return file descriptor associated to database connection."
+
+static PyObject *
+psyco_curs_fileno(cursorObject *self, PyObject *args)
+{
+    long int socket;
+    
+    if (!PyArg_ParseTuple(args, "")) return NULL;
+    EXC_IF_CURS_CLOSED(self);
+
+    /* note how we call PQflush() to make sure the user will use
+       select() in the safe way! */
+    pthread_mutex_lock(&(self->conn->lock));
+    Py_BEGIN_ALLOW_THREADS;
+    PQflush(self->conn->pgconn);
+    socket = (long int)PQsocket(self->conn->pgconn);
+    Py_END_ALLOW_THREADS;
+    pthread_mutex_unlock(&(self->conn->lock));
+
+    return PyInt_FromLong(socket);
+}
+
+/* extension: isready - return true if data from async execute is ready */
+
+#define psyco_curs_isready_doc \
+"isready() -> bool -- Return True if data is ready after an async query."
+
+static PyObject *
+psyco_curs_isready(cursorObject *self, PyObject *args)
+{
+    if (!PyArg_ParseTuple(args, "")) return NULL;
+    EXC_IF_CURS_CLOSED(self);
+
+    /* pq_is_busy does its own locking, we don't need anything special but if
+       the cursor is ready we need to fetch the result and free the connection
+       for the next query. */
+    
+    if (pq_is_busy(self->conn)) {
+        Py_INCREF(Py_False);
+        return Py_False;
+    }
+    else {
+        IFCLEARPGRES(self->pgres);
+        pthread_mutex_lock(&(self->conn->lock));
+        self->pgres = PQgetResult(self->conn->pgconn);
+        self->conn->async_cursor = NULL;
+        pthread_mutex_unlock(&(self->conn->lock));
+        self->needsfetch = 1;
+        Py_INCREF(Py_True);
+        return Py_True;
+    }
+}
+
+#endif
+
+
+/** the cursor object **/
+
+/* iterator protocol */
+
+static PyObject *
+cursor_iter(PyObject *self)
+{
+    EXC_IF_CURS_CLOSED((cursorObject*)self);
+    Py_INCREF(self);
+    return self;
+}
+
+static PyObject *
+cursor_next(PyObject *self)
+{
+    PyObject *res;
+
+    /* we don't parse arguments: psyco_curs_fetchone will do that for us */
+    res = psyco_curs_fetchone((cursorObject*)self, NULL);
+
+    /* convert a None to NULL to signal the end of iteration */
+    if (res && res == Py_None) {
+        Py_DECREF(res);
+        res = NULL;
+    }
+    return res;
+}
+
+/* object method list */
+
+static struct PyMethodDef cursorObject_methods[] = {
+    /* DBAPI-2.0 core */
+    {"close", (PyCFunction)psyco_curs_close,
+     METH_VARARGS, psyco_curs_close_doc},
+    {"execute", (PyCFunction)psyco_curs_execute,
+     METH_VARARGS|METH_KEYWORDS, psyco_curs_execute_doc},
+    {"executemany", (PyCFunction)psyco_curs_executemany,
+     METH_VARARGS|METH_KEYWORDS, psyco_curs_executemany_doc},
+    {"fetchone", (PyCFunction)psyco_curs_fetchone,
+     METH_VARARGS, psyco_curs_fetchone_doc},
+    {"fetchmany", (PyCFunction)psyco_curs_fetchmany,
+     METH_VARARGS|METH_KEYWORDS, psyco_curs_fetchmany_doc},
+    {"fetchall", (PyCFunction)psyco_curs_fetchall,
+     METH_VARARGS, psyco_curs_fetchall_doc},
+    {"callproc", (PyCFunction)psyco_curs_callproc,
+     METH_VARARGS, psyco_curs_callproc_doc},
+    {"nextset", (PyCFunction)psyco_curs_nextset,
+     METH_VARARGS, psyco_curs_nextset_doc},
+    {"setinputsizes", (PyCFunction)psyco_curs_setinputsizes,
+     METH_VARARGS, psyco_curs_setinputsizes_doc},
+    {"setoutputsize", (PyCFunction)psyco_curs_setoutputsize,
+     METH_VARARGS, psyco_curs_setoutputsize_doc},
+    /* DBAPI-2.0 extensions */
+    {"scroll", (PyCFunction)psyco_curs_scroll,
+     METH_VARARGS|METH_KEYWORDS, psyco_curs_scroll_doc},
+    /* psycopg extensions */
+#ifdef PSYCOPG_EXTENSIONS
+    {"mogrify", (PyCFunction)psyco_curs_mogrify,
+     METH_VARARGS|METH_KEYWORDS, psyco_curs_mogrify_doc},
+    {"fileno", (PyCFunction)psyco_curs_fileno,
+     METH_VARARGS, psyco_curs_fileno_doc},
+    {"isready", (PyCFunction)psyco_curs_isready,
+     METH_VARARGS, psyco_curs_isready_doc},
+    {"copy_from", (PyCFunction)psyco_curs_copy_from,
+     METH_VARARGS|METH_KEYWORDS, psyco_curs_copy_from_doc},
+    {"copy_to", (PyCFunction)psyco_curs_copy_to,
+     METH_VARARGS|METH_KEYWORDS, psyco_curs_copy_to_doc},
+#endif
+    {NULL}
+};
+
+/* object member list */
+
+#define OFFSETOF(x) offsetof(cursorObject, x)
+
+static struct PyMemberDef cursorObject_members[] = {
+    /* DBAPI-2.0 basics */
+    {"rowcount", T_LONG, OFFSETOF(rowcount), RO,
+        "Number of rows read from the backend in the last command."},
+    {"arraysize", T_LONG, OFFSETOF(arraysize), 0, 
+        "Number of records `fetchmany()` must fetch if not explicitely " \
+        "specified."},
+    {"description", T_OBJECT, OFFSETOF(description), RO,
+        "Cursor description as defined in DBAPI-2.0."},
+    {"lastrowid", T_LONG, OFFSETOF(lastoid), RO,
+        "The ``oid`` of the last row inserted by the cursor."},
+    /* DBAPI-2.0 extensions */
+    {"rownumber", T_LONG, OFFSETOF(row), RO,
+        "The current row position."},
+    {"connection", T_OBJECT, OFFSETOF(conn), RO, 
+        "The connection where the cursor comes from."},
+#ifdef PSYCOPG_EXTENSIONS
+    {"name", T_STRING, OFFSETOF(name), RO},
+    {"statusmessage", T_OBJECT, OFFSETOF(pgstatus), RO,
+        "The return message of the last command."},
+    {"query", T_OBJECT, OFFSETOF(query), RO,
+        "The last query text sent to the backend."},
+    {"row_factory", T_OBJECT, OFFSETOF(tuple_factory), 0},
+    {"tzinfo_factory", T_OBJECT, OFFSETOF(tzinfo_factory), 0},
+    {"typecaster", T_OBJECT, OFFSETOF(caster), RO},
+    {"string_types", T_OBJECT, OFFSETOF(string_types), 0},
+    {"binary_types", T_OBJECT, OFFSETOF(binary_types), 0},
+#endif
+    {NULL}
+};
+
+/* initialization and finalization methods */
+
+static int
+cursor_setup(cursorObject *self, connectionObject *conn, char *name)
+{
+    Dprintf("cursor_setup: init cursor object at %p", self);
+    Dprintf("cursor_setup:     parameters: name = %s, conn = %p", name, conn);
+    
+    if (name) {
+        self->name = PyMem_Malloc(strlen(name)+1);
+        if (self->name == NULL) return 1;
+        strncpy(self->name, name, strlen(name)+1);
+    }
+
+    /* FIXME: why does this raise an excpetion on the _next_ line of code?
+    if (PyObject_IsInstance((PyObject*)conn,
+                             (PyObject *)&connectionType) == 0) {
+        PyErr_SetString(PyExc_TypeError,
+            "argument 1 must be subclass of psycopg2._psycopg.connection");
+        return 1;
+    } */
+    self->conn = conn;
+    Py_INCREF((PyObject*)self->conn);
+    
+    self->closed = 0;
+    self->mark = conn->mark;
+    self->pgres = NULL; 
+    self->notuples = 1;
+    self->arraysize = 1;
+    self->rowcount = -1;
+    self->lastoid = InvalidOid;
+    
+    self->casts = NULL;
+    self->notice = NULL;
+    
+    self->string_types = NULL;
+    self->binary_types = NULL;
+    
+    self->description = Py_None;
+    Py_INCREF(Py_None);
+    self->pgstatus = Py_None;
+    Py_INCREF(Py_None);
+    self->tuple_factory = Py_None;
+    Py_INCREF(Py_None);
+    self->query = Py_None;
+    Py_INCREF(Py_None);
+    
+    /* default tzinfo factory */
+    self->tzinfo_factory = pyPsycopgTzFixedOffsetTimezone;
+    Py_INCREF(self->tzinfo_factory);
+    
+    Dprintf("cursor_setup: good cursor object at %p, refcnt = %d",
+            self, ((PyObject *)self)->ob_refcnt);
+    return 0;
+}
+
+static void
+cursor_dealloc(PyObject* obj)
+{
+    cursorObject *self = (cursorObject *)obj;
+
+    if (self->name) PyMem_Free(self->name);
+    
+    Py_XDECREF((PyObject*)self->conn);
+    Py_XDECREF(self->casts);
+    Py_XDECREF(self->description);
+    Py_XDECREF(self->pgstatus);
+    Py_XDECREF(self->tuple_factory);
+    Py_XDECREF(self->tzinfo_factory);
+    Py_XDECREF(self->query);
+
+    IFCLEARPGRES(self->pgres);
+    
+    Dprintf("cursor_dealloc: deleted cursor object at %p, refcnt = %d",
+            obj, obj->ob_refcnt);
+
+    obj->ob_type->tp_free(obj);
+}
+
+static int
+cursor_init(PyObject *obj, PyObject *args, PyObject *kwds)
+{
+    char *name = NULL;
+    PyObject *conn;
+    
+    if (!PyArg_ParseTuple(args, "O|s", &conn, &name))
+        return -1;
+
+    return cursor_setup((cursorObject *)obj, (connectionObject *)conn, name);
+}
+
+static PyObject *
+cursor_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    return type->tp_alloc(type, 0);
+}
+
+static void
+cursor_del(PyObject* self)
+{
+    PyObject_Del(self);
+}
+
+static PyObject *
+cursor_repr(cursorObject *self)
+{
+    return PyString_FromFormat(
+        "<cursor object at %p; closed: %d>", self, self->closed);
+}
+
+
+/* object type */
+
+#define cursorType_doc \
+"A database cursor."
+
+PyTypeObject cursorType = {
+    PyObject_HEAD_INIT(NULL)
+    0,
+    "psycopg2._psycopg.cursor",
+    sizeof(cursorObject),
+    0,
+    cursor_dealloc, /*tp_dealloc*/
+    0,          /*tp_print*/  
+    0,          /*tp_getattr*/
+    0,          /*tp_setattr*/
+    0,          /*tp_compare*/
+    (reprfunc)cursor_repr, /*tp_repr*/
+    0,          /*tp_as_number*/
+    0,          /*tp_as_sequence*/
+    0,          /*tp_as_mapping*/
+    0,          /*tp_hash */
+
+    0,          /*tp_call*/
+    (reprfunc)cursor_repr, /*tp_str*/
+    0,          /*tp_getattro*/
+    0,          /*tp_setattro*/
+    0,          /*tp_as_buffer*/
+
+    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_ITER, /*tp_flags*/
+    cursorType_doc, /*tp_doc*/
+    
+    0,          /*tp_traverse*/
+    0,          /*tp_clear*/
+
+    0,          /*tp_richcompare*/
+    0,          /*tp_weaklistoffset*/
+
+    cursor_iter, /*tp_iter*/
+    cursor_next, /*tp_iternext*/
+
+    /* Attribute descriptor and subclassing stuff */
+
+    cursorObject_methods, /*tp_methods*/
+    cursorObject_members, /*tp_members*/
+    0,          /*tp_getset*/
+    0,          /*tp_base*/
+    0,          /*tp_dict*/
+    
+    0,          /*tp_descr_get*/
+    0,          /*tp_descr_set*/
+    0,          /*tp_dictoffset*/
+    
+    cursor_init, /*tp_init*/
+    0, /*tp_alloc  Will be set to PyType_GenericAlloc in module init*/
+    cursor_new, /*tp_new*/
+    (freefunc)cursor_del, /*tp_free  Low-level free-memory routine */
+    0,          /*tp_is_gc For PyObject_IS_GC */
+    0,          /*tp_bases*/
+    0,          /*tp_mro method resolution order */
+    0,          /*tp_cache*/
+    0,          /*tp_subclasses*/
+    0           /*tp_weaklist*/
+};
diff --git a/psycopg2/psycopg/microprotocols.c b/psycopg2/psycopg/microprotocols.c
new file mode 100644 (file)
index 0000000..73abbfc
--- /dev/null
@@ -0,0 +1,161 @@
+/* microprotocols.c - minimalist and non-validating protocols implementation
+ *
+ * Copyright (C) 2003-2004 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <Python.h>
+#include <structmember.h>
+
+#define PSYCOPG_MODULE
+#include "psycopg/config.h"
+#include "psycopg/python.h"
+#include "psycopg/psycopg.h"
+#include "psycopg/cursor.h"
+#include "psycopg/connection.h"
+#include "psycopg/microprotocols.h"
+#include "psycopg/microprotocols_proto.h"
+
+
+/** the adapters registry **/
+
+PyObject *psyco_adapters;
+
+/* microprotocols_init - initialize the adapters dictionary */
+
+int
+microprotocols_init(PyObject *dict)
+{
+    /* create adapters dictionary and put it in module namespace */
+    if ((psyco_adapters = PyDict_New()) == NULL) {
+        return -1;
+    }                         
+
+    PyDict_SetItemString(dict, "adapters", psyco_adapters);
+    
+    return 0;
+}
+
+
+/* microprotocols_add - add a reverse type-caster to the dictionary */
+
+int
+microprotocols_add(PyTypeObject *type, PyObject *proto, PyObject *cast)
+{
+    if (proto == NULL) proto = (PyObject*)&isqlquoteType;
+
+    Dprintf("microprotocols_add: cast %p for (%s, ?)", cast, type->tp_name);
+
+    PyDict_SetItem(psyco_adapters,
+                   Py_BuildValue("(OO)", (PyObject*)type, proto),
+                   cast);
+    return 0;
+}
+
+/* microprotocols_adapt - adapt an object to the built-in protocol */
+
+PyObject *
+microprotocols_adapt(PyObject *obj, PyObject *proto, PyObject *alt)
+{
+    PyObject *adapter, *key;
+
+    /* we don't check for exact type conformance as specified in PEP 246
+       because the ISQLQuote type is abstract and there is no way to get a
+       quotable object to be its instance */
+
+    Dprintf("microprotocols_adapt: trying to adapt %s", obj->ob_type->tp_name);
+    
+    /* look for an adapter in the registry */
+    key = Py_BuildValue("(OO)", (PyObject*)obj->ob_type, proto);
+    adapter = PyDict_GetItem(psyco_adapters, key);
+    Py_DECREF(key);
+    if (adapter) {
+        PyObject *adapted = PyObject_CallFunctionObjArgs(adapter, obj, NULL);
+        return adapted;
+    }
+
+    /* try to have the protocol adapt this object*/
+    if (PyObject_HasAttrString(proto, "__adapt__")) {
+        PyObject *adapted = PyObject_CallMethod(proto, "__adapt__", "O", obj);
+        if (adapted && adapted != Py_None) return adapted;
+        Py_XDECREF(adapted);
+        if (PyErr_Occurred() && !PyErr_ExceptionMatches(PyExc_TypeError))
+            return NULL;
+    }
+
+    /* and finally try to have the object adapt itself */   
+    if (PyObject_HasAttrString(obj, "__conform__")) {
+        PyObject *adapted = PyObject_CallMethod(obj, "__conform__","O", proto);
+        if (adapted && adapted != Py_None) return adapted;
+        Py_XDECREF(adapted);
+        if (PyErr_Occurred() && !PyErr_ExceptionMatches(PyExc_TypeError))
+            return NULL;
+    }
+    
+    /* else set the right exception and return NULL */
+    psyco_set_error(ProgrammingError, NULL, "can't adapt", NULL, NULL);
+    return NULL;
+}
+
+/* microprotocol_getquoted - utility function that adapt and call getquoted */
+
+PyObject *
+microprotocol_getquoted(PyObject *obj, connectionObject *conn)
+{
+    PyObject *res = NULL;
+    PyObject *tmp = microprotocols_adapt(
+        obj, (PyObject*)&isqlquoteType, NULL);
+    
+    if (tmp != NULL) {
+        Dprintf("microprotocol_getquoted: adapted to %s",
+                tmp->ob_type->tp_name);
+
+        /* if requested prepare the object passing it the connection */
+        if (PyObject_HasAttrString(tmp, "prepare") && conn) {
+            res = PyObject_CallMethod(tmp, "prepare", "O", (PyObject*)conn);
+            if (res == NULL) {
+                Py_DECREF(tmp);
+                return NULL;
+            }
+            else {
+                Py_DECREF(res);
+            }
+        }
+
+        /* call the getquoted method on tmp (that should exist because we
+           adapted to the right protocol) */
+        res = PyObject_CallMethod(tmp, "getquoted", NULL);
+        Py_DECREF(tmp);
+    }
+
+    /* we return res with one extra reference, the caller shall free it */
+    return res;
+}
+
+
+/** module-level functions **/
+
+PyObject *
+psyco_microprotocols_adapt(cursorObject *self, PyObject *args)
+{
+    PyObject *obj, *alt = NULL;
+    PyObject *proto = (PyObject*)&isqlquoteType;
+
+    if (!PyArg_ParseTuple(args, "O|OO", &obj, &proto, &alt)) return NULL;
+    return microprotocols_adapt(obj, proto, alt);
+}
diff --git a/psycopg2/psycopg/microprotocols.h b/psycopg2/psycopg/microprotocols.h
new file mode 100644 (file)
index 0000000..5501a7c
--- /dev/null
@@ -0,0 +1,60 @@
+/* microprotocols.c - definitions for minimalist and non-validating protocols
+ *
+ * Copyright (C) 2003-2004 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PSYCOPG_MICROPROTOCOLS_H
+#define PSYCOPG_MICROPROTOCOLS_H 1
+
+#include <Python.h>
+#include "psycopg/connection.h"
+#include "psycopg/cursor.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** adapters registry **/
+
+extern PyObject *psyco_adapters;
+
+/** the names of the three mandatory methods **/
+
+#define MICROPROTOCOLS_GETQUOTED_NAME "getquoted"
+#define MICROPROTOCOLS_GETSTRING_NAME "getstring"
+#define MICROPROTOCOLS_GETBINARY_NAME "getbinary"
+
+/** exported functions **/
+
+/* used by module.c to init the microprotocols system */
+extern int microprotocols_init(PyObject *dict);
+extern int microprotocols_add(
+    PyTypeObject *type, PyObject *proto, PyObject *cast);
+    
+extern PyObject *microprotocols_adapt(
+    PyObject *obj, PyObject *proto, PyObject *alt);
+extern PyObject *microprotocol_getquoted(
+    PyObject *obj, connectionObject *conn);
+    
+extern PyObject *
+    psyco_microprotocols_adapt(cursorObject *self, PyObject *args);   
+#define psyco_microprotocols_adapt_doc \
+    "adapt(obj, protocol, alternate) -> object -- adapt obj to given protocol"
+    
+#endif /* !defined(PSYCOPG_MICROPROTOCOLS_H) */
diff --git a/psycopg2/psycopg/microprotocols_proto.c b/psycopg2/psycopg/microprotocols_proto.c
new file mode 100644 (file)
index 0000000..72c3a7e
--- /dev/null
@@ -0,0 +1,216 @@
+/* microprotocol_proto.c - psycopg protocols
+ *
+ * Copyright (C) 2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <Python.h>
+#include <structmember.h>
+#include <stringobject.h>
+
+#include <string.h>
+
+#define PSYCOPG_MODULE
+#include "psycopg/config.h"
+#include "psycopg/python.h"
+#include "psycopg/psycopg.h"
+#include "psycopg/microprotocols_proto.h"
+
+
+/** void protocol implementation **/
+
+
+/* getquoted - return quoted representation for object */
+
+#define psyco_isqlquote_getquoted_doc \
+"getquoted() -- return SQL-quoted representation of this object"
+
+static PyObject *
+psyco_isqlquote_getquoted(isqlquoteObject *self, PyObject *args)
+{
+    if (!PyArg_ParseTuple(args, "")) return NULL;
+    
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+/* getbinary - return quoted representation for object */
+
+#define psyco_isqlquote_getbinary_doc \
+"getbinary() -- return SQL-quoted binary representation of this object"
+
+static PyObject *
+psyco_isqlquote_getbinary(isqlquoteObject *self, PyObject *args)
+{
+    if (!PyArg_ParseTuple(args, "")) return NULL;
+    
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+/* getbuffer - return quoted representation for object */
+
+#define psyco_isqlquote_getbuffer_doc \
+"getbuffer() -- return this object"
+
+static PyObject *
+psyco_isqlquote_getbuffer(isqlquoteObject *self, PyObject *args)
+{
+    if (!PyArg_ParseTuple(args, "")) return NULL;
+    
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+\f
+
+/** the ISQLQuote object **/
+
+
+/* object method list */
+
+static struct PyMethodDef isqlquoteObject_methods[] = {
+    {"getquoted", (PyCFunction)psyco_isqlquote_getquoted,
+     METH_VARARGS, psyco_isqlquote_getquoted_doc},
+    {"getbinary", (PyCFunction)psyco_isqlquote_getbinary,
+     METH_VARARGS, psyco_isqlquote_getbinary_doc},
+    {"getbuffer", (PyCFunction)psyco_isqlquote_getbuffer,
+     METH_VARARGS, psyco_isqlquote_getbuffer_doc},
+    /*    {"prepare", (PyCFunction)psyco_isqlquote_prepare,
+          METH_VARARGS, psyco_isqlquote_prepare_doc}, */
+    {NULL}
+};
+
+/* object member list */
+
+static struct PyMemberDef isqlquoteObject_members[] = {
+    /* DBAPI-2.0 extensions (exception objects) */
+    {"_wrapped", T_OBJECT, offsetof(isqlquoteObject, wrapped), RO},
+    {NULL}
+};
+
+/* initialization and finalization methods */
+
+static int
+isqlquote_setup(isqlquoteObject *self, PyObject *wrapped)
+{
+    self->wrapped = wrapped;
+    Py_INCREF(wrapped);
+
+    return 0;
+}
+
+static void
+isqlquote_dealloc(PyObject* obj)
+{
+    isqlquoteObject *self = (isqlquoteObject *)obj;
+    
+    Py_XDECREF(self->wrapped);
+    
+    obj->ob_type->tp_free(obj);
+}
+
+static int
+isqlquote_init(PyObject *obj, PyObject *args, PyObject *kwds)
+{
+    PyObject *wrapped = NULL;
+
+    if (!PyArg_ParseTuple(args, "O", &wrapped))
+        return -1;
+
+    return isqlquote_setup((isqlquoteObject *)obj, wrapped);
+}
+
+static PyObject *
+isqlquote_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    return type->tp_alloc(type, 0);
+}
+
+static void
+isqlquote_del(PyObject* self)
+{
+    PyObject_Del(self);
+}
+
+
+/* object type */
+
+#define isqlquoteType_doc \
+"Abstract ISQLQuote protocol\n\n" \
+"An object conform to this protocol should expose a ``getquoted()`` method\n" \
+"returning the SQL representation of the object.\n\n"
+
+PyTypeObject isqlquoteType = {
+    PyObject_HEAD_INIT(NULL)
+    0,
+    "psycopg2._psycopg.ISQLQuote",
+    sizeof(isqlquoteObject),
+    0,
+    isqlquote_dealloc, /*tp_dealloc*/
+    0,          /*tp_print*/ 
+    0,          /*tp_getattr*/
+    0,          /*tp_setattr*/
+    0,          /*tp_compare*/
+    0,          /*tp_repr*/
+    0,          /*tp_as_number*/
+    0,          /*tp_as_sequence*/
+    0,          /*tp_as_mapping*/
+    0,          /*tp_hash */
+
+    0,          /*tp_call*/
+    0,          /*tp_str*/
+    0,          /*tp_getattro*/
+    0,          /*tp_setattro*/
+    0,          /*tp_as_buffer*/
+
+    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /*tp_flags*/
+    isqlquoteType_doc, /*tp_doc*/
+    
+    0,          /*tp_traverse*/
+    0,          /*tp_clear*/
+
+    0,          /*tp_richcompare*/
+    0,          /*tp_weaklistoffset*/
+
+    0,          /*tp_iter*/
+    0,          /*tp_iternext*/
+
+    /* Attribute descriptor and subclassing stuff */
+
+    isqlquoteObject_methods, /*tp_methods*/
+    isqlquoteObject_members, /*tp_members*/
+    0,          /*tp_getset*/
+    0,          /*tp_base*/
+    0,          /*tp_dict*/
+    
+    0,          /*tp_descr_get*/
+    0,          /*tp_descr_set*/
+    0,          /*tp_dictoffset*/
+    
+    isqlquote_init, /*tp_init*/
+    0, /*tp_alloc  will be set to PyType_GenericAlloc in module init*/
+    isqlquote_new, /*tp_new*/
+    (freefunc)isqlquote_del, /*tp_free  Low-level free-memory routine */
+    0,          /*tp_is_gc For PyObject_IS_GC */
+    0,          /*tp_bases*/
+    0,          /*tp_mro method resolution order */
+    0,          /*tp_cache*/
+    0,          /*tp_subclasses*/
+    0           /*tp_weaklist*/
+};
diff --git a/psycopg2/psycopg/microprotocols_proto.h b/psycopg2/psycopg/microprotocols_proto.h
new file mode 100644 (file)
index 0000000..c671264
--- /dev/null
@@ -0,0 +1,45 @@
+/* microporotocols_proto.h - definiton for psycopg's protocols
+ *
+ * Copyright (C) 2004 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PSYCOPG_ISQLQUOTE_H
+#define PSYCOPG_ISQLQUOTE_H 1
+
+#include <Python.h>
+#include <libpq-fe.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+    
+extern PyTypeObject isqlquoteType;
+
+typedef struct {
+    PyObject HEAD;
+
+    PyObject *wrapped;
+    
+} isqlquoteObject;
+    
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined(PSYCOPG_ISQLQUOTE_H) */
diff --git a/psycopg2/psycopg/pgtypes.h b/psycopg2/psycopg/pgtypes.h
new file mode 100644 (file)
index 0000000..1fdbda9
--- /dev/null
@@ -0,0 +1,65 @@
+#define BOOLOID 16
+#define BYTEAOID 17
+#define CHAROID 18
+#define NAMEOID 19
+#define INT8OID 20
+#define INT2OID 21
+#define INT2VECTOROID 22
+#define INT4OID 23
+#define REGPROCOID 24
+#define TEXTOID 25
+#define OIDOID 26
+#define TIDOID 27
+#define XIDOID 28
+#define CIDOID 29
+#define OIDVECTOROID 30
+#define PG_TYPE_RELTYPE_OID 71
+#define PG_ATTRIBUTE_RELTYPE_OID 75
+#define PG_PROC_RELTYPE_OID 81
+#define PG_CLASS_RELTYPE_OID 83
+#define POINTOID 600
+#define LSEGOID 601
+#define PATHOID 602
+#define BOXOID 603
+#define POLYGONOID 604
+#define LINEOID 628
+#define FLOAT4OID 700
+#define FLOAT8OID 701
+#define ABSTIMEOID 702
+#define RELTIMEOID 703
+#define TINTERVALOID 704
+#define UNKNOWNOID 705
+#define CIRCLEOID 718
+#define CASHOID 790
+#define MACADDROID 829
+#define INETOID 869
+#define CIDROID 650
+#define INT4ARRAYOID 1007
+#define ACLITEMOID 1033
+#define BPCHAROID 1042
+#define VARCHAROID 1043
+#define DATEOID 1082
+#define TIMEOID 1083
+#define TIMESTAMPOID 1114
+#define TIMESTAMPTZOID 1184
+#define INTERVALOID 1186
+#define TIMETZOID 1266
+#define BITOID 1560
+#define VARBITOID 1562
+#define NUMERICOID 1700
+#define REFCURSOROID 1790
+#define REGPROCEDUREOID 2202
+#define REGOPEROID 2203
+#define REGOPERATOROID 2204
+#define REGCLASSOID 2205
+#define REGTYPEOID 2206
+#define RECORDOID 2249
+#define CSTRINGOID 2275
+#define ANYOID 2276
+#define ANYARRAYOID 2277
+#define VOIDOID 2278
+#define TRIGGEROID 2279
+#define LANGUAGE_HANDLEROID 2280
+#define INTERNALOID 2281
+#define OPAQUEOID 2282
+#define ANYELEMENTOID 2283
diff --git a/psycopg2/psycopg/pgversion.h b/psycopg2/psycopg/pgversion.h
new file mode 100644 (file)
index 0000000..f874a9a
--- /dev/null
@@ -0,0 +1,2 @@
+#define PG_VERSION_MAJOR 7
+#define PG_VERSION_MINOR 4
diff --git a/psycopg2/psycopg/pqpath.c b/psycopg2/psycopg/pqpath.c
new file mode 100644 (file)
index 0000000..1ebb569
--- /dev/null
@@ -0,0 +1,883 @@
+/* pqpath.c - single path into libpq
+ *
+ * Copyright (C) 2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/* IMPORTANT NOTE: no function in this file do its own connection locking
+   except for pg_execute and pq_fetch (that are somehow high-level. This means
+   that all the othe functions should be called while holding a lock to the
+   connection.
+*/
+
+#include <Python.h>
+#include <string.h>
+
+#define PSYCOPG_MODULE
+#include "psycopg/config.h"
+#include "psycopg/python.h"
+#include "psycopg/psycopg.h"
+#include "psycopg/pqpath.h"
+#include "psycopg/connection.h"
+#include "psycopg/cursor.h"
+#include "psycopg/typecast.h"
+#include "psycopg/pgtypes.h"
+#include "psycopg/pgversion.h"
+
+/* pq_raise - raise a python exception of the right kind
+
+   This function should be called while holding the GIL. */
+
+void
+pq_raise(connectionObject *conn, cursorObject *curs, PyObject *exc, char *msg)
+{
+    PyObject *pgc = (PyObject*)curs;
+    
+    char *err = NULL;
+    char *err2 = NULL;
+    char *code = NULL;
+    char *buf = NULL;
+    
+    if ((conn == NULL && curs == NULL) || (curs != NULL && conn == NULL)) {
+        PyErr_SetString(Error, "psycopg went psycotic and raised a null error");
+        return;
+    }
+    
+    if (curs && curs->pgres) {
+        err = PQresultErrorMessage(curs->pgres);
+#ifdef HAVE_PQPROTOCOL3
+        if (err != NULL && conn->protocol == 3) {
+            code = PQresultErrorField(curs->pgres, PG_DIAG_SQLSTATE);
+        }
+#endif
+    }
+    if (err == NULL)
+        err = PQerrorMessage(conn->pgconn);
+
+    /* if the is no error message we probably called pq_raise without reason:
+       we need to set an exception anyway because the caller will probably
+       raise and a meaningful message is better than an empty one */
+    if (err == NULL) {
+        PyErr_SetString(Error, "psycopg went psycotic without error set");
+        return;
+    }
+    
+    /* if exc is NULL, analyze the message and try to deduce the right
+       exception kind (only if we have a pgres, obviously) */
+    if (exc == NULL) {
+        if (curs && curs->pgres) {
+            if (conn->protocol == 3) {
+#ifdef HAVE_PQPROTOCOL3
+                char *pgstate =
+                    PQresultErrorField(curs->pgres, PG_DIAG_SQLSTATE);
+                if (pgstate != NULL && !strncmp(pgstate, "23", 2))
+                    exc = IntegrityError;
+                else
+                    exc = ProgrammingError;
+#endif
+            }
+        }
+    }
+    
+    /* if exc is still NULL psycopg was not built with HAVE_PQPROTOCOL3 or the
+       connection is using protocol 2: in both cases we default to comparing
+       error messages */
+    if (exc == NULL) {
+        if (!strncmp(err, "ERROR:  Cannot insert a duplicate key", 37)
+            || !strncmp(err, "ERROR:  ExecAppend: Fail to add null", 36)
+            || strstr(err, "referential integrity violation"))
+            exc = IntegrityError;
+        else
+            exc = ProgrammingError;
+    }
+    
+    /* try to remove the initial "ERROR: " part from the postgresql error */
+    if (err && strlen(err) > 8) err2 = &(err[8]);
+    else err2 = err;
+
+    /* if msg is not NULL, add it to the error message, after a '\n' */
+    if (msg && code) {
+        int len = strlen(code) + strlen(err) + strlen(msg) + 5;
+        if ((buf = PyMem_Malloc(len))) {
+            snprintf(buf, len, "[%s] %s\n%s", code, err2, msg);
+            psyco_set_error(exc, pgc, buf, err, code);
+        }
+    }
+    else if (msg) {
+        int len = strlen(err) + strlen(msg) + 2;
+        if ((buf = PyMem_Malloc(len))) {
+            snprintf(buf, len, "%s\n%s", err2, msg);
+            psyco_set_error(exc, pgc, buf, err, code);
+        }
+    }
+    else {
+        psyco_set_error(exc, pgc, err2, err, code);        
+    }
+    
+    if (buf != NULL) PyMem_Free(buf);
+}
+
+/* pq_set_critical, pq_resolve_critical - manage critical errors
+
+   this function is invoked when a PQexec() call returns NULL, meaning a
+   critical condition like out of memory or lost connection. it save the error
+   message and mark the connection as 'wanting cleanup'.
+
+   both functions do not call any Py_*_ALLOW_THREADS macros.
+   pq_resolve_critical should be called while holding the GIL. */
+
+void
+pq_set_critical(connectionObject *conn, const char *msg)
+{
+    if (msg == NULL) 
+        msg = PQerrorMessage(conn->pgconn);
+    if (conn->critical) free(conn->critical);
+    if (msg && msg[0] != '\0') conn->critical = strdup(msg);
+    else conn->critical = NULL;
+}
+
+PyObject *
+pq_resolve_critical(connectionObject *conn, int close)
+{
+    Dprintf("pq_resolve_critical: resolving %s", conn->critical);
+    
+    if (conn->critical) {
+        char *msg = &(conn->critical[6]);
+        Dprintf("pq_resolve_critical: error = %s", msg);
+        /* we can't use pq_raise because the error has already been cleared
+           from the connection, so we just raise an OperationalError with the
+           critical message */
+        PyErr_SetString(OperationalError, msg);
+        
+        /* we don't want to destroy this connection but just close it */
+        if (close == 1) conn_close(conn);
+    }
+    return NULL;
+}
+
+/* pq_clear_async - clear the effects of a previous async query
+
+   note that this function does block because it needs to wait for the full
+   result sets of the previous query to clear them.
+
+   
+   this function does not call any Py_*_ALLOW_THREADS macros */
+
+void
+pq_clear_async(connectionObject *conn)
+{
+    PGresult *pgres;
+
+    do {
+        pgres = PQgetResult(conn->pgconn);
+        Dprintf("pq_clear_async: clearing PGresult at %p", pgres);
+        IFCLEARPGRES(pgres);
+    } while (pgres != NULL);
+}
+
+/* pq_begin - send a BEGIN WORK, if necessary
+
+   this function does not call any Py_*_ALLOW_THREADS macros */
+
+int
+pq_begin(connectionObject *conn)
+{
+    const char *query[] = {
+        NULL,
+        "BEGIN; SET TRANSACTION ISOLATION LEVEL READ COMMITTED",
+        "BEGIN; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE"};
+    
+    int pgstatus, retvalue = -1;
+    PGresult *pgres = NULL;
+
+    Dprintf("pq_begin: pgconn = %p, isolevel = %ld, status = %d",
+            conn->pgconn, conn->isolation_level, conn->status);
+
+    if (conn->isolation_level == 0 || conn->status != CONN_STATUS_READY) {
+        Dprintf("pq_begin: transaction in progress");
+        return 0;
+    }
+
+    pq_clear_async(conn);
+    pgres = PQexec(conn->pgconn, query[conn->isolation_level]);
+    if (pgres == NULL) {
+        Dprintf("pq_begin: PQexec() failed");
+        pq_set_critical(conn, NULL);
+        goto cleanup;
+    }
+
+    pgstatus = PQresultStatus(pgres);
+    if (pgstatus != PGRES_COMMAND_OK ) {
+        Dprintf("pq_begin: result is NOT OK");
+        pq_set_critical(conn, NULL);
+        goto cleanup;
+    }
+    Dprintf("pq_begin: issued '%s' command", query[conn->isolation_level]);
+
+    retvalue = 0;
+    conn->status = CONN_STATUS_BEGIN;
+
+ cleanup:
+    IFCLEARPGRES(pgres);
+    return retvalue;
+}
+
+/* pq_commit - send an END, if necessary
+
+   this function does not call any Py_*_ALLOW_THREADS macros */
+
+int
+pq_commit(connectionObject *conn)
+{
+    const char *query = "END";
+    int pgstatus, retvalue = -1;
+    PGresult *pgres = NULL;
+
+    Dprintf("pq_commit: pgconn = %p, isolevel = %ld, status = %d",
+            conn->pgconn, conn->isolation_level, conn->status);
+
+    if (conn->isolation_level == 0 || conn->status != CONN_STATUS_BEGIN) {
+        Dprintf("pq_commit: no transaction to commit");
+        return 0;
+    }
+
+    pq_clear_async(conn);
+    pgres = PQexec(conn->pgconn, query);
+    if (pgres == NULL) {
+        Dprintf("pq_commit: PQexec() failed");
+        pq_set_critical(conn, NULL);
+        goto cleanup;
+    }
+
+    pgstatus = PQresultStatus(pgres);
+    if (pgstatus != PGRES_COMMAND_OK ) {
+        Dprintf("pq_commit: result is NOT OK");
+        pq_set_critical(conn, NULL);
+        goto cleanup;
+    }
+    Dprintf("pq_commit: issued '%s' command", query);
+
+    retvalue = 0;
+    conn->status = CONN_STATUS_READY;
+
+ cleanup:
+    IFCLEARPGRES(pgres);
+    return retvalue;
+}
+
+/* pq_abort - send an ABORT, if necessary
+
+   this function does not call any Py_*_ALLOW_THREADS macros */
+
+int
+pq_abort(connectionObject *conn)
+{
+    const char *query = "ABORT";
+    int pgstatus, retvalue = -1;
+    PGresult *pgres = NULL;
+
+    Dprintf("pq_abort: pgconn = %p, isolevel = %ld, status = %d",
+            conn->pgconn, conn->isolation_level, conn->status);
+
+    if (conn->isolation_level == 0 || conn->status != CONN_STATUS_BEGIN) {
+        Dprintf("pq_abort: no transaction to abort");
+        return 0;
+    }
+
+    pq_clear_async(conn);
+    pgres = PQexec(conn->pgconn, query);
+    if (pgres == NULL) {
+        Dprintf("pq_abort: PQexec() failed");
+        pq_set_critical(conn, NULL);
+        goto cleanup;
+    }
+
+    pgstatus = PQresultStatus(pgres);
+    if (pgstatus != PGRES_COMMAND_OK ) {
+        Dprintf("pq_abort: result is NOT OK");
+        pq_set_critical(conn, NULL);
+        goto cleanup;
+    }
+    Dprintf("pq_abort: issued '%s' command", query);
+
+    retvalue = 0;
+    conn->status = CONN_STATUS_READY;
+
+ cleanup:
+    IFCLEARPGRES(pgres);
+    return retvalue;
+}
+
+/* pq_is_busy - consume input and return connection status
+   a status of 1 means that a call to pq_fetch will block, while a status of 0
+   means that there is data available to be collected. -1 means an error, the
+   exception will be set accordingly.
+
+   this fucntion locks the connection object
+   this function call Py_*_ALLOW_THREADS macros */
+
+int
+pq_is_busy(connectionObject *conn)
+{
+    PGnotify *pgn;
+    
+    Dprintf("pq_is_busy: consuming input");
+
+    Py_BEGIN_ALLOW_THREADS;
+    pthread_mutex_lock(&(conn->lock));
+
+    if (PQconsumeInput(conn->pgconn) == 0) {
+        Dprintf("pq_is_busy: PQconsumeInput() failed");
+        pthread_mutex_unlock(&(conn->lock));
+        Py_BLOCK_THREADS;
+        PyErr_SetString(OperationalError, PQerrorMessage(conn->pgconn));
+        return -1;
+    }
+
+    pthread_mutex_unlock(&(conn->lock));
+    Py_END_ALLOW_THREADS;
+    
+    /* now check for notifies */
+    while ((pgn = PQnotifies(conn->pgconn)) != NULL) {
+        PyObject *notify;
+        
+        Dprintf("curs_is_busy: got NOTIFY from pid %d, msg = %s",
+                pgn->be_pid, pgn->relname);
+
+        notify = PyTuple_New(2);
+        PyTuple_SET_ITEM(notify, 0, PyInt_FromLong((long)pgn->be_pid));
+        PyTuple_SET_ITEM(notify, 1, PyString_FromString(pgn->relname));
+        PyList_Append(conn->notifies, notify);
+        free(pgn);
+    }
+    
+    return PQisBusy(conn->pgconn);
+}
+
+/* pq_execute - execute a query, possibly asyncronously
+
+   this fucntion locks the connection object
+   this function call Py_*_ALLOW_THREADS macros */
+
+int
+pq_execute(cursorObject *curs, const char *query, int async)
+{
+    /* if the status of the connection is critical raise an exception and
+       definitely close the connection */
+    if (curs->conn->critical) {
+        pq_resolve_critical(curs->conn, 1);
+        return -1;
+    }
+
+    /* check status of connection, raise error if not OK */
+    if (PQstatus(curs->conn->pgconn) != CONNECTION_OK) {
+        Dprintf("pq_execute: connection NOT OK");
+        PyErr_SetString(OperationalError, PQerrorMessage(curs->conn->pgconn));
+        return -1;
+    }
+    Dprintf("curs_execute: pg connection at %p OK", curs->conn->pgconn);
+
+    Py_BEGIN_ALLOW_THREADS;
+    pthread_mutex_lock(&(curs->conn->lock));
+
+    pq_begin(curs->conn);
+
+    if (async == 0) {
+        IFCLEARPGRES(curs->pgres);
+        Dprintf("pq_execute: executing SYNC query:");
+        Dprintf("    %-.200s", query);
+        curs->pgres = PQexec(curs->conn->pgconn, query);
+    }
+
+    else if (async == 1) {
+        /* first of all, let see if the previous query has already ended, if
+           not what should we do? just block and discard data or execute
+           another query? */
+        pq_clear_async(curs->conn);
+        
+        Dprintf("pq_execute: executing ASYNC query:");
+        Dprintf("    %-.200s", query);
+        
+        /* then we can go on and send a new query without fear */
+        IFCLEARPGRES(curs->pgres);
+        if (PQsendQuery(curs->conn->pgconn, query) == 0) {
+            pthread_mutex_unlock(&(curs->conn->lock));
+            Py_BLOCK_THREADS;
+            PyErr_SetString(OperationalError,
+                            PQerrorMessage(curs->conn->pgconn));
+            return -1;
+        }
+        Dprintf("pq_execute: async query sent to backend");
+    }
+    
+    pthread_mutex_unlock(&(curs->conn->lock));
+    Py_END_ALLOW_THREADS;
+    
+    /* if the execute was sync, we call pq_fetch() immediately,
+       to respect the old DBAPI-2.0 compatible behaviour */
+    if (async == 0) {
+        Dprintf("pq_execute: entering syncronous DBAPI compatibility mode");
+        if (pq_fetch(curs) == -1) return -1;
+    }
+    else {
+        curs->conn->async_cursor = (PyObject*)curs;
+    }
+    
+    return 1-async;
+}
+
+
+/* pq_fetch - fetch data after a query
+
+   this fucntion locks the connection object
+   this function call Py_*_ALLOW_THREADS macros
+
+   return value:
+     -1 - some error occurred while calling libpq
+      0 - no result from the backend but no libpq errors
+      1 - result from backend (possibly data is ready)
+*/
+
+static void
+_pq_fetch_tuples(cursorObject *curs)
+{
+    int i, *dsize = NULL;
+
+    int pgnfields = PQnfields(curs->pgres);
+    int pgbintuples = PQbinaryTuples(curs->pgres);
+
+    curs->notuples = 0;
+
+    /* create the tuple for description and typecasting */
+    Py_XDECREF(curs->description);
+    Py_XDECREF(curs->casts);
+    curs->description = PyTuple_New(pgnfields);
+    curs->casts = PyTuple_New(pgnfields);
+    curs->columns = pgnfields;
+    
+    /* calculate the display size for each column (cpu intensive, can be
+       switched off at configuration time) */
+#ifdef PSYCOPG_DISPLAY_SIZE
+    dsize = (int *)PyMem_Malloc(pgnfields * sizeof(int));
+    if (dsize != NULL) {
+        int j, len;
+        for (i=0; i < pgnfields; i++) {
+            dsize[i] = -1;
+        }
+        for (j = 0; j < curs->rowcount; j++) {
+            for (i = 0; i < pgnfields; i++) {
+                len = PQgetlength(curs->pgres, j, i);
+                if (len > dsize[i]) dsize[i] = len;
+            }
+        }
+    }
+#endif
+
+    /* calculate various parameters and typecasters */
+    for (i = 0; i < pgnfields; i++) {
+        Oid ftype = PQftype(curs->pgres, i);
+        int fsize = PQfsize(curs->pgres, i);
+        int fmod =  PQfmod(curs->pgres, i);
+        
+        PyObject *dtitem = PyTuple_New(7);
+        PyObject *type = PyInt_FromLong(ftype);
+        PyObject *cast = NULL;
+        
+        PyTuple_SET_ITEM(curs->description, i, dtitem);
+        
+        /* fill the right cast function by accessing the global dictionary of
+           casting objects.  if we got no defined cast use the default
+           one */
+        if (!(cast = PyDict_GetItem(curs->casts, type))) {
+            Dprintf("_pq_fetch_tuples: cast %d not in per-cursor dict", ftype);
+            if (!(cast = PyDict_GetItem(psyco_types, type))) {
+                Dprintf("_pq_fetch_tuples: cast %d not found, using default",
+                        PQftype(curs->pgres,i));
+                cast = psyco_default_cast;
+            }
+        }
+        /* else if we got binary tuples and if we got a field that
+           is binary use the default cast
+           FIXME: what the hell am I trying to do here? This just can't work..
+        */
+        else if (pgbintuples && cast == psyco_default_binary_cast) {
+            Dprintf("_pq_fetch_tuples: Binary cursor and "
+                    "binary field: %i using default cast",
+                    PQftype(curs->pgres,i));
+            cast = psyco_default_cast;
+        }
+        Dprintf("_pq_fetch_tuples: using cast at %p (%s) for type %d",
+                cast, PyString_AS_STRING(((typecastObject*)cast)->name),
+                PQftype(curs->pgres,i));
+        Py_INCREF(cast);
+        PyTuple_SET_ITEM(curs->casts, i, cast);
+    
+
+        /* 1/ fill the other fields */
+        PyTuple_SET_ITEM(dtitem, 0,
+                         PyString_FromString(PQfname(curs->pgres, i)));
+        PyTuple_SET_ITEM(dtitem, 1, type);
+
+        /* 2/ display size is the maximum size of this field result tuples. */
+        if (dsize && dsize[i] >= 0) {
+            PyTuple_SET_ITEM(dtitem, 2, PyInt_FromLong(dsize[i]));
+        }
+        else {
+            Py_INCREF(Py_None);
+            PyTuple_SET_ITEM(dtitem, 2, Py_None);
+        }
+
+        /* 3/ size on the backend */
+        if (fmod > 0) fmod = fmod - sizeof(int);
+        if (fsize == -1) {
+            if (ftype == NUMERICOID) {
+                PyTuple_SET_ITEM(dtitem, 3,
+                                 PyInt_FromLong((fmod >> 16) & 0xFFFF));
+            }
+            else { /* If variable length record, return maximum size */
+                PyTuple_SET_ITEM(dtitem, 3, PyInt_FromLong(fmod));
+            }
+        }
+        else {
+            PyTuple_SET_ITEM(dtitem, 3, PyInt_FromLong(fsize));
+        }
+
+        /* 4,5/ scale and precision */
+        if (ftype == NUMERICOID) {
+            PyTuple_SET_ITEM(dtitem, 4, PyInt_FromLong((fmod >> 16) & 0xFFFF));
+            PyTuple_SET_ITEM(dtitem, 5, PyInt_FromLong((fmod & 0xFFFF) - 4));
+        }
+        else {
+            Py_INCREF(Py_None);
+            PyTuple_SET_ITEM(dtitem, 4, Py_None);
+            Py_INCREF(Py_None);
+            PyTuple_SET_ITEM(dtitem, 5, Py_None);
+        }
+
+        /* 6/ FIXME: null_ok??? */
+        Py_INCREF(Py_None);
+        PyTuple_SET_ITEM(dtitem, 6, Py_None);
+    }
+    
+    if (dsize) PyMem_Free(dsize);
+}
+
+#ifdef HAVE_PQPROTOCOL3
+static int
+_pq_copy_in_v3(cursorObject *curs)
+{
+    /* COPY FROM implementation when protocol 3 is available: this function
+       uses the new PQputCopyData() and can detect errors and set the correct
+       exception */
+    PyObject *o;
+    int length = 0, error = 0;
+    
+    while (1) {
+        o = PyObject_CallMethod(curs->copyfile, "read", "i", curs->copysize);
+        if (!o || !PyString_Check(o) || (length = PyString_Size(o)) == -1) {
+            error = 1;
+        }
+        if (length == 0 || error == 1) break;
+        
+        Py_BEGIN_ALLOW_THREADS;
+        if (PQputCopyData(curs->conn->pgconn,
+                          PyString_AS_STRING(o), length) == -1) {
+            error = 2;
+        }
+        Py_END_ALLOW_THREADS;
+
+        if (error == 2) break;
+        
+        Py_DECREF(o);
+    }
+    
+    Py_XDECREF(o);
+    
+    if (error == 0 || error == 2)
+        /* 0 means that the copy went well, 2 that there was an error on the
+           backend: in both cases we'll get the error message from the
+           PQresult */
+        PQputCopyEnd(curs->conn->pgconn, NULL);
+    else
+        PQputCopyEnd(curs->conn->pgconn, "error during .read() call");
+
+    /* and finally we grab the operation result from the backend */
+    IFCLEARPGRES(curs->pgres);
+    while ((curs->pgres = PQgetResult(curs->conn->pgconn)) != NULL) {
+        if (PQresultStatus(curs->pgres) == PGRES_FATAL_ERROR)
+            pq_raise(curs->conn, curs, NULL, NULL);
+        IFCLEARPGRES(curs->pgres);
+    }
+
+    return 1;
+}
+#endif
+static int
+_pq_copy_in(cursorObject *curs)
+{
+    /* COPY FROM implementation when protocol 3 is not available: this
+       function can't fail but the backend will send an ERROR notice that will
+       be catched by our notice collector */
+    PyObject *o;
+
+    while (1) {
+        o = PyObject_CallMethod(curs->copyfile, "readline", NULL);
+        if (!o || o == Py_None || PyString_GET_SIZE(o) == 0) break;
+        if (PQputline(curs->conn->pgconn, PyString_AS_STRING(o)) != 0) {
+            Py_DECREF(o);
+            return -1;
+        }
+        Py_DECREF(o);
+    }
+    Py_XDECREF(o);
+    PQputline(curs->conn->pgconn, "\\.\n");
+    PQendcopy(curs->conn->pgconn);
+
+    /* if for some reason we're using a protocol 3 libpq to connect to a
+       protocol 2 backend we still need to cycle on the result set */
+    IFCLEARPGRES(curs->pgres);
+    while ((curs->pgres = PQgetResult(curs->conn->pgconn)) != NULL) {
+        if (PQresultStatus(curs->pgres) == PGRES_FATAL_ERROR)
+            pq_raise(curs->conn, curs, NULL, NULL);
+        IFCLEARPGRES(curs->pgres);
+    }
+
+    return 1;
+}
+
+#ifdef HAVE_PQPROTOCOL3
+static int
+_pq_copy_out_v3(cursorObject *curs)
+{
+    char *buffer;
+    int len;
+    
+    while (1) {
+        Py_BEGIN_ALLOW_THREADS;
+        len = PQgetCopyData(curs->conn->pgconn, &buffer, 0);
+        Py_END_ALLOW_THREADS;
+            
+        if (len > 0 && buffer) {
+            PyObject_CallMethod(curs->copyfile, "write", "s#", buffer, len);
+            PQfreemem(buffer);
+        }
+        /* we break on len == 0 but note that that should *not* happen,
+           because we are not doing an async call (if it happens blame
+           postgresql authors :/) */
+        else if (len <= 0) break;
+    }
+    
+    if (len == -2) {
+        pq_raise(curs->conn, NULL, NULL, NULL);
+        return -1;
+    }
+
+    /* and finally we grab the operation result from the backend */
+    IFCLEARPGRES(curs->pgres);
+    while ((curs->pgres = PQgetResult(curs->conn->pgconn)) != NULL) {
+        if (PQresultStatus(curs->pgres) == PGRES_FATAL_ERROR)
+            pq_raise(curs->conn, curs, NULL, NULL);
+        IFCLEARPGRES(curs->pgres);
+    }
+    return 1;
+}
+#endif
+
+static int
+_pq_copy_out(cursorObject *curs)
+{
+    char buffer[4096];
+    int status, len;
+
+    while (1) {
+        Py_BEGIN_ALLOW_THREADS;
+        status = PQgetline(curs->conn->pgconn, buffer, 4096);
+        Py_END_ALLOW_THREADS;
+        if (status == 0) {
+            if (buffer[0] == '\\' && buffer[1] == '.') break;
+
+            len = strlen(buffer);
+            buffer[len++] = '\n';
+        }
+        else if (status == 1) {
+            len = 4096-1;
+        }
+        else {
+            return -1;
+        }
+        
+        PyObject_CallMethod(curs->copyfile, "write", "s#", buffer, len);
+    }
+
+    status = 1;
+    if (PQendcopy(curs->conn->pgconn) != 0)
+        status = -1;
+    
+    /* if for some reason we're using a protocol 3 libpq to connect to a
+       protocol 2 backend we still need to cycle on the result set */
+    IFCLEARPGRES(curs->pgres);
+    while ((curs->pgres = PQgetResult(curs->conn->pgconn)) != NULL) {
+        if (PQresultStatus(curs->pgres) == PGRES_FATAL_ERROR)
+            pq_raise(curs->conn, curs, NULL, NULL);
+        IFCLEARPGRES(curs->pgres);
+    }
+
+    return status;
+}
+
+int
+pq_fetch(cursorObject *curs)
+{
+    int pgstatus, ex = -1;
+
+    /* even if we fail, we remove any information about the previous query */
+    curs_reset(curs);
+    
+    /* we check the result from the previous execute; if the result is not
+       already there, we need to consume some input and go to sleep until we
+       get something edible to eat */
+    if (!curs->pgres) {
+        
+        Dprintf("pq_fetch: no data: entering polling loop");
+        
+        while (pq_is_busy(curs->conn) > 0) {
+            fd_set rfds;
+            struct timeval tv;
+            int sval, sock;
+
+            Py_BEGIN_ALLOW_THREADS;
+            pthread_mutex_lock(&(curs->conn->lock));
+
+            sock = PQsocket(curs->conn->pgconn);
+            FD_ZERO(&rfds);
+            FD_SET(sock, &rfds);
+
+            /* set a default timeout of 5 seconds
+               TODO: make use of the timeout, maybe allowing the user to
+               make a non-blocking (timeouted) call to fetchXXX */
+            tv.tv_sec = 5;
+            tv.tv_usec = 0;
+
+            Dprintf("pq_fetch: entering PDflush() loop");
+            while (PQflush(curs->conn->pgconn) != 0);
+            sval = select(sock+1, &rfds, NULL, NULL, &tv);
+
+            pthread_mutex_unlock(&(curs->conn->lock));
+            Py_END_ALLOW_THREADS;
+        }
+
+        Dprintf("pq_fetch: data is probably ready");
+        IFCLEARPGRES(curs->pgres);
+        curs->pgres = PQgetResult(curs->conn->pgconn);
+    }
+
+    /* check for PGRES_FATAL_ERROR result */
+    /* FIXME: I am not sure we need to check for critical error here.
+    if (curs->pgres == NULL) {
+        Dprintf("pq_fetch: got a NULL pgres, checking for critical");
+        pq_set_critical(curs->conn);
+        if (curs->conn->critical) {
+            pq_resolve_critical(curs->conn);
+            return -1;
+        }
+        else {
+            return 0;
+        }
+    }
+    */
+    
+    if (curs->pgres == NULL) return 0;
+    
+    pgstatus = PQresultStatus(curs->pgres);
+    Dprintf("pq_fetch: pgstatus = %s", PQresStatus(pgstatus));
+
+    /* backend status message */
+    Py_XDECREF(curs->pgstatus);
+    curs->pgstatus = PyString_FromString(PQcmdStatus(curs->pgres));
+
+    switch(pgstatus) {
+
+    case PGRES_COMMAND_OK:
+        Dprintf("pq_fetch: command returned OK (no tuples)");
+        curs->rowcount = atoi(PQcmdTuples(curs->pgres));
+        curs->lastoid = PQoidValue(curs->pgres);
+        CLEARPGRES(curs->pgres);
+        ex = 1;
+        break;
+
+    case PGRES_COPY_OUT:
+        Dprintf("pq_fetch: data from a COPY TO (no tuples)");
+#ifdef HAVE_PQPROTOCOL3
+        if (curs->conn->protocol == 3)
+            ex = _pq_copy_out_v3(curs);
+        else
+#endif
+            ex = _pq_copy_out(curs);
+        curs->rowcount = -1;
+        /* error caught by out glorious notice handler */
+        if (PyErr_Occurred()) ex = -1;
+        IFCLEARPGRES(curs->pgres);
+        break;
+        
+    case PGRES_COPY_IN:
+        Dprintf("pq_fetch: data from a COPY FROM (no tuples)");
+#ifdef HAVE_PQPROTOCOL3
+        if (curs->conn->protocol == 3)        
+            ex = _pq_copy_in_v3(curs);
+        else
+#endif
+            ex = _pq_copy_in(curs);
+        curs->rowcount = -1;
+        /* error caught by out glorious notice handler */
+        if (PyErr_Occurred()) ex = -1;
+        IFCLEARPGRES(curs->pgres);
+        break;
+        
+    case PGRES_TUPLES_OK:
+        Dprintf("pq_fetch: data from a SELECT (got tuples)");
+        curs->rowcount = PQntuples(curs->pgres);
+        _pq_fetch_tuples(curs); ex = 0;
+        /* don't clear curs->pgres, because it contains the results! */
+        break;
+        
+    default:
+        Dprintf("pq_fetch: uh-oh, something FAILED");
+        pq_raise(curs->conn, curs, NULL, NULL);
+        IFCLEARPGRES(curs->pgres);
+        ex = -1;
+        break;
+    }
+
+    Dprintf("pq_fetch: fetching done; check for critical errors");
+    
+    /* error checking, close the connection if necessary (some critical errors
+       are not really critical, like a COPY FROM error: if that's the case we
+       raise the exception but we avoid to close the connection) */
+    if (curs->conn->critical) {
+        if (ex == -1) {
+            pq_resolve_critical(curs->conn, 1);
+        }
+        else {
+            pq_resolve_critical(curs->conn, 0);
+        }
+        return -1;
+    }
+    
+    return ex;
+}
diff --git a/psycopg2/psycopg/pqpath.h b/psycopg2/psycopg/pqpath.h
new file mode 100644 (file)
index 0000000..64d113e
--- /dev/null
@@ -0,0 +1,41 @@
+/* pqpath.h - definitions for pqpath.c
+ *
+ * Copyright (C) 2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PSYCOPG_PQPATH_H
+#define PSYCOPG_PQPATH_H 1
+
+#include "psycopg/cursor.h"
+#include "psycopg/connection.h"
+
+/* macros to clean the pg result */
+#define IFCLEARPGRES(pgres)  if (pgres) {PQclear(pgres); pgres = NULL;}
+#define CLEARPGRES(pgres)    PQclear(pgres); pgres = NULL
+
+/* exported functions */
+extern int pq_fetch(cursorObject *curs);
+extern int pq_execute(cursorObject *curs, const char *query, int async);
+extern int pq_begin(connectionObject *conn);
+extern int pq_commit(connectionObject *conn);
+extern int pq_abort(connectionObject *conn);
+extern int pq_is_busy(connectionObject *conn);
+extern void pq_set_critical(connectionObject *conn, const char *msg);
+
+#endif /* !defined(PSYCOPG_PQPATH_H) */
diff --git a/psycopg2/psycopg/psycopg.h b/psycopg2/psycopg/psycopg.h
new file mode 100644 (file)
index 0000000..a689ea4
--- /dev/null
@@ -0,0 +1,142 @@
+/* psycopg.h - definitions for the psycopg python module 
+ *
+ * Copyright (C) 2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PSYCOPG_H
+#define PSYCOPG_H 1
+
+#include <Python.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* DBAPI compliance parameters */
+#define APILEVEL "2.0"
+#define THREADSAFETY 2
+#define PARAMSTYLE "pyformat"
+    
+/* C API functions */
+#define psyco_errors_fill_NUM 0
+#define psyco_errors_fill_RETURN void
+#define psyco_errors_fill_PROTO (PyObject *dict)   
+#define psyco_errors_set_NUM 1
+#define psyco_errors_set_RETURN void
+#define psyco_errors_set_PROTO (PyObject *type)
+    
+/* Total number of C API pointers */
+#define PSYCOPG_API_pointers 2
+    
+#ifdef PSYCOPG_MODULE
+    /** This section is used when compiling psycopgmodule.c & co. **/
+extern psyco_errors_fill_RETURN psyco_errors_fill psyco_errors_fill_PROTO;
+extern psyco_errors_set_RETURN psyco_errors_set psyco_errors_set_PROTO;
+
+/* global excpetions */
+extern PyObject *Error, *Warning, *InterfaceError, *DatabaseError,
+    *InternalError, *OperationalError, *ProgrammingError,
+    *IntegrityError, *DataError, *NotSupportedError;
+
+/* python versions and compatibility stuff */
+#ifndef PyMODINIT_FUNC
+#define PyMODINIT_FUNC void
+#endif
+    
+#else
+    /** This section is used in modules that use psycopg's C API **/
+
+static void **PSYCOPG_API;
+
+#define psyco_errors_fill \
+ (*(psyco_errors_fill_RETURN (*)psyco_errors_fill_PROTO) \
+  PSYCOPG_API[psyco_errors_fill_NUM])
+#define psyco_errors_set \
+ (*(psyco_errors_set_RETURN (*)psyco_errors_set_PROTO) \
+  PSYCOPG_API[psyco_errors_set_NUM])
+    
+/* Return -1 and set exception on error, 0 on success. */
+static int
+import_psycopg(void)
+{
+    PyObject *module = PyImport_ImportModule("psycopg");
+
+    if (module != NULL) {
+        PyObject *c_api_object = PyObject_GetAttrString(module, "_C_API");
+        if (c_api_object == NULL) return -1;
+        if (PyCObject_Check(c_api_object))
+            PSYCOPG_API = (void **)PyCObject_AsVoidPtr(c_api_object);
+        Py_DECREF(c_api_object);
+    }
+    return 0;
+}
+
+#endif
+
+/* postgresql<->python encoding map */
+extern PyObject *psycoEncodings;
+    
+typedef struct {
+    char *pgenc;
+    char *pyenc;
+} encodingPair;
+
+/* the Decimal type, used by the DECIMAL typecaster */    
+extern PyObject *decimalType;
+
+/* some utility functions */
+extern void psyco_set_error(PyObject *exc, PyObject *curs,  char *msg, 
+                             char *pgerror, char *pgcode);
+                                  
+/* Exceptions docstrings */
+#define Error_doc \
+"Base class for error exceptions."
+
+#define Warning_doc \
+"A database warning."
+
+#define InterfaceError_doc \
+"Error related to the database interface."
+
+#define DatabaseError_doc \
+"Error related to the database engine."
+
+#define InternalError_doc \
+"The database encountered an internal error."
+
+#define OperationalError_doc \
+"Error related to database operation (disconnect, memory allocation etc)."
+
+#define ProgrammingError_doc \
+"Error related to database programming (SQL error, table not found etc)."
+
+#define IntegrityError_doc \
+"Error related to database integrity."
+
+#define DataError_doc \
+"Error related to problems with the processed data."
+
+#define NotSupportedError_doc \
+"A not supported datbase API was called."
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined(PSYCOPG_H) */
diff --git a/psycopg2/psycopg/psycopgmodule.c b/psycopg2/psycopg/psycopgmodule.c
new file mode 100644 (file)
index 0000000..426fb27
--- /dev/null
@@ -0,0 +1,672 @@
+/* psycopgmodule.c - psycopg module (will import other C classes)
+ *
+ * Copyright (C) 2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <Python.h>
+
+#define PSYCOPG_MODULE
+#include "psycopg/config.h"
+#include "psycopg/python.h"
+#include "psycopg/psycopg.h"
+#include "psycopg/connection.h"
+#include "psycopg/cursor.h"
+#include "psycopg/typecast.h"
+#include "psycopg/microprotocols.h"
+#include "psycopg/microprotocols_proto.h"
+
+#include "psycopg/adapter_qstring.h"
+#include "psycopg/adapter_binary.h"
+#include "psycopg/adapter_pboolean.h"
+#include "psycopg/adapter_asis.h"
+#include "psycopg/adapter_list.h"
+#include "psycopg/typecast_binary.h"
+
+#ifdef HAVE_MXDATETIME
+#include <mxDateTime.h>
+#include "psycopg/adapter_mxdatetime.h"
+mxDateTimeModule_APIObject *mxDateTimeP = NULL;
+#endif
+
+/* some module-level variables, like the datetime module */
+#ifdef HAVE_PYDATETIME
+#include <datetime.h>
+#include "psycopg/adapter_datetime.h"
+PyObject *pyDateTimeModuleP = NULL;
+PyObject *pyDateTypeP = NULL;
+PyObject *pyTimeTypeP = NULL;
+PyObject *pyDateTimeTypeP = NULL;
+PyObject *pyDeltaTypeP = NULL;
+#endif
+
+/* pointers to the psycopg.tz classes */
+PyObject *pyPsycopgTzModule = NULL;
+PyObject *pyPsycopgTzLOCAL = NULL;
+PyObject *pyPsycopgTzFixedOffsetTimezone = NULL;
+
+PyObject *psycoEncodings = NULL;
+PyObject *decimalType = NULL;
+
+/** connect module-level function **/
+#define psyco_connect_doc \
+"connect(dsn, ...) -- Create a new database connection.\n\n"               \
+"This function supports two different but equivalent sets of arguments.\n" \
+"A single data source name or ``dsn`` string can be used to specify the\n" \
+"connection parameters, as follows::\n\n"                                  \
+"    psycopg2.connect(\"dbname=xxx user=xxx ...\")\n\n"   \
+"If ``dsn`` is not provided it is possible to pass the parameters as\n"    \
+"keyword arguments; e.g.::\n\n"                                            \
+"    psycopg2.connect(database='xxx', user='xxx', ...)\n\n"                \
+"The full list of available parameters is:\n\n"                            \
+"- ``dbname`` -- database name (only in 'dsn')\n"                          \
+"- ``database`` -- database name (only as keyword argument)\n"             \
+"- ``host`` -- host address (defaults to UNIX socket if not provided)\n"   \
+"- ``port`` -- port number (defaults to 5432 if not provided)\n"           \
+"- ``user`` -- user name used to authenticate\n"                           \
+"- ``password`` -- password used to authenticate\n"                        \
+"- ``sslmode`` -- SSL mode (see PostgreSQL documentation)\n\n"             \
+"If the ``connection_factory`` keyword argument is not provided this\n"    \
+"function always return an instance of the `connection` class.\n"          \
+"Else the given sub-class of `extensions.connection` will be used to\n"    \
+"instantiate the connection object.\n\n"                                   \
+":return: New database connection\n"                                         \
+":rtype: `extensions.connection`"
+
+static int
+_psyco_connect_fill_dsn(char *dsn, char *kw, char *v, int i)
+{
+    strcpy(&dsn[i], kw); i += strlen(kw);
+    strcpy(&dsn[i], v); i += strlen(v);
+    return i;
+}
+
+static void
+_psyco_connect_fill_exc(connectionObject *conn)
+{
+    /* fill the connection object with the exceptions */
+    conn->exc_Error = Error;
+    Py_INCREF(Error);
+    conn->exc_Warning = Warning;
+    Py_INCREF(Warning);
+    conn->exc_InterfaceError = InterfaceError;
+    Py_INCREF(InterfaceError);
+    conn->exc_DatabaseError = DatabaseError;
+    Py_INCREF(DatabaseError);
+    conn->exc_InternalError = InternalError;
+    Py_INCREF(InternalError);
+    conn->exc_ProgrammingError = ProgrammingError;
+    Py_INCREF(ProgrammingError);
+    conn->exc_IntegrityError = IntegrityError;
+    Py_INCREF(IntegrityError);
+    conn->exc_DataError = DataError;
+    Py_INCREF(DataError);
+    conn->exc_NotSupportedError = NotSupportedError;
+    Py_INCREF(NotSupportedError);
+    conn->exc_OperationalError = OperationalError;
+    Py_INCREF(OperationalError);
+}
+
+static PyObject *
+psyco_connect(PyObject *self, PyObject *args, PyObject *keywds)
+{
+    PyObject *conn, *factory = NULL;
+    PyObject *pyport = NULL;
+    
+    int idsn=-1, iport=-1;
+    char *dsn=NULL, *database=NULL, *user=NULL, *password=NULL;
+    char *host=NULL, *sslmode=NULL;
+    char port[16];
+    
+    static char *kwlist[] = {"dsn", "database", "host", "port",
+                             "user", "password", "sslmode",
+                             "connection_factory", NULL};
+    
+    if (!PyArg_ParseTupleAndKeywords(args, keywds, "|sssOsssO", kwlist,
+                                     &dsn, &database, &host, &pyport,
+                                     &user, &password, &sslmode, &factory)) {
+        return NULL;
+    }
+
+    if (pyport && PyString_Check(pyport)) {
+       PyObject *pyint = PyInt_FromString(PyString_AsString(pyport), NULL, 10);
+       if (!pyint) return NULL;
+       iport = PyInt_AsLong(pyint);
+    }
+    else if (pyport && PyInt_Check(pyport)) {
+       iport = PyInt_AsLong(pyport);
+    }
+    else if (pyport != NULL) {
+       PyErr_SetString(PyExc_TypeError, "port must be a string or int");
+       return NULL;
+    }
+
+    if (iport > 0)
+      PyOS_snprintf(port, 16, "%d", iport);
+
+    if (dsn == NULL) {
+        int l = 45;  /* len("dbname= user= password= host= port= sslmode=\0") */
+
+        if (database) l += strlen(database);
+        if (host) l += strlen(host);
+        if (iport > 0) l += strlen(port);
+        if (user) l += strlen(user);
+        if (password) l += strlen(password);
+        if (sslmode) l += strlen(sslmode);
+        
+        dsn = malloc(l*sizeof(char));
+        if (dsn == NULL) {
+            PyErr_SetString(InterfaceError, "dynamic dsn allocation failed");
+            return NULL;
+        }
+
+        idsn = 0;
+        if (database)
+            idsn = _psyco_connect_fill_dsn(dsn, " dbname=", database, idsn);
+        if (host)
+            idsn = _psyco_connect_fill_dsn(dsn, " host=", host, idsn);
+        if (iport > 0)
+            idsn = _psyco_connect_fill_dsn(dsn, " port=", port, idsn);
+        if (user)
+            idsn = _psyco_connect_fill_dsn(dsn, " user=", user, idsn);
+        if (password)
+            idsn = _psyco_connect_fill_dsn(dsn, " password=", password, idsn);
+        if (sslmode)
+            idsn = _psyco_connect_fill_dsn(dsn, " sslmode=", sslmode, idsn);
+        
+        if (idsn > 0) {
+            dsn[idsn] = '\0';
+            memmove(dsn, &dsn[1], idsn);
+        }
+        else {
+            free(dsn);
+            PyErr_SetString(InterfaceError, "missing dsn and no parameters");
+            return NULL;
+        }
+    }
+
+    Dprintf("psyco_connect: dsn = '%s'", dsn);
+
+    /* allocate connection, fill with errors and return it */
+    if (factory == NULL) factory = (PyObject *)&connectionType;
+    conn = PyObject_CallFunction(factory, "s", dsn);
+    if (conn) _psyco_connect_fill_exc((connectionObject*)conn);
+    
+    return conn;
+}
+
+/** type registration **/
+#define psyco_register_type_doc \
+"register_type(obj) -> None -- register obj with psycopg type system\n\n" \
+":Parameters:\n" \
+"  * `obj`: A type adapter created by `new_type()`"
+
+#define typecast_from_python_doc \
+"new_type(oids, name, adapter) -> new type object\n\n" \
+"Create a new binding object. The object can be used with the\n" \
+"`register_type()` function to bind PostgreSQL objects to python objects.\n\n" \
+":Parameters:\n" \
+"  * `oids`: Tuple of ``oid`` of the PostgreSQL types to convert.\n" \
+"  * `name`: Name for the new type\n" \
+"  * `adapter`: Callable to perform type conversion.\n" \
+"    It must have the signature ``fun(value, cur)`` where ``value`` is\n" \
+"    the string representation returned by PostgreSQL (`None` if ``NULL``)\n" \
+"    and ``cur`` is the cursor from which data are read."
+
+static PyObject *
+psyco_register_type(PyObject *self, PyObject *args)
+{
+    PyObject *type;
+
+    if (!PyArg_ParseTuple(args, "O!", &typecastType, &type)) {
+        return NULL;
+    }
+
+    typecast_add(type, 0);
+    
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+
+/* default adapters */
+
+static void
+psyco_adapters_init(PyObject *mod)
+{
+    PyObject *call;
+    
+    microprotocols_add(&PyFloat_Type, NULL, (PyObject*)&asisType);
+    microprotocols_add(&PyInt_Type, NULL, (PyObject*)&asisType);
+    microprotocols_add(&PyLong_Type, NULL, (PyObject*)&asisType);
+    
+    microprotocols_add(&PyString_Type, NULL, (PyObject*)&qstringType);
+    microprotocols_add(&PyUnicode_Type, NULL, (PyObject*)&qstringType);
+    microprotocols_add(&PyBuffer_Type, NULL, (PyObject*)&binaryType);
+    microprotocols_add(&PyList_Type, NULL, (PyObject*)&listType);
+                       
+#ifdef HAVE_MXDATETIME
+    /* the module has already been initialized, so we can obtain the callable
+       objects directly from its dictionary :) */
+    call = PyMapping_GetItemString(mod, "TimestampFromMx");
+    microprotocols_add(mxDateTimeP->DateTime_Type, NULL, call);
+    call = PyMapping_GetItemString(mod, "TimeFromMx");
+    microprotocols_add(mxDateTimeP->DateTimeDelta_Type, NULL, call);
+#endif
+
+#ifdef HAVE_PYDATETIME
+    /* as above, we use the callable objects from the psycopg module */
+    call = PyMapping_GetItemString(mod, "DateFromPy");
+    microprotocols_add((PyTypeObject*)pyDateTypeP, NULL, call);
+    call = PyMapping_GetItemString(mod, "TimeFromPy");
+    microprotocols_add((PyTypeObject*)pyTimeTypeP, NULL, call);
+    call = PyMapping_GetItemString(mod, "TimestampFromPy");
+    microprotocols_add((PyTypeObject*)pyDateTimeTypeP, NULL, call);
+    call = PyMapping_GetItemString(mod, "IntervalFromPy");
+    microprotocols_add((PyTypeObject*)pyDeltaTypeP, NULL, call);
+#endif
+    
+#ifdef HAVE_PYBOOL
+    microprotocols_add(&PyBool_Type, NULL, (PyObject*)&pbooleanType);
+#endif
+
+#ifdef HAVE_DECIMAL
+    microprotocols_add((PyTypeObject*)decimalType, NULL, (PyObject*)&asisType);
+#endif
+}
+
+/* psyco_encodings_fill
+   
+   Fill the module's postgresql<->python encoding table */
+
+static encodingPair encodings[] = {
+    {"SQL_ASCII",    "ascii"},
+    {"LATIN1",       "latin_1"},
+    {"UNICODE",      "utf_8"},
+    {"UTF8",         "utf_8"},
+    
+    /* some compatibility stuff */
+    {"LATIN-1",      "latin_1"},
+    
+    {NULL, NULL}
+};
+static void psyco_encodings_fill(PyObject *dict)
+{
+    encodingPair *enc;
+
+    for (enc = encodings; enc->pgenc != NULL; enc++) {
+        PyObject *value = PyString_FromString(enc->pyenc);
+        PyDict_SetItemString(dict, enc->pgenc, value);
+        Py_DECREF(value);
+    }
+}
+
+/* psyco_errors_init, psyco_errors_fill (callable from C)
+
+   Initialize the module's exceptions and after that a dictionary with a full
+   set of exceptions. */
+
+PyObject *Error, *Warning, *InterfaceError, *DatabaseError,
+    *InternalError, *OperationalError, *ProgrammingError,
+    *IntegrityError, *DataError, *NotSupportedError;
+
+/* mapping between exception names and their PyObject */
+static struct {
+    char *name;
+    PyObject **exc;
+    PyObject **base;
+    char *docstr;
+} exctable[] = {
+    { "psycopg2.Error", &Error, 0, Error_doc },
+    { "psycopg2.Warning", &Warning, 0, Warning_doc },
+    { "psycopg2.InterfaceError", &InterfaceError, &Error, InterfaceError_doc },
+    { "psycopg2.DatabaseError", &DatabaseError, &Error, DatabaseError_doc },
+    { "psycopg2.InternalError", &InternalError, &DatabaseError, InternalError_doc },
+    { "psycopg2.OperationalError", &OperationalError, &DatabaseError, 
+        OperationalError_doc },
+    { "psycopg2.ProgrammingError", &ProgrammingError, &DatabaseError, 
+        ProgrammingError_doc },
+    { "psycopg2.IntegrityError", &IntegrityError, &DatabaseError, 
+        IntegrityError_doc },
+    { "psycopg2.DataError", &DataError, &DatabaseError, DataError_doc },
+    { "psycopg2.NotSupportedError", &NotSupportedError, &DatabaseError, 
+        NotSupportedError_doc },
+    {NULL}  /* Sentinel */
+};
+
+static void
+psyco_errors_init(void)
+{
+    /* the names of the exceptions here reflect the oranization of the
+       psycopg2 module and not the fact the the original error objects
+       live in _psycopg */
+       
+    int i;
+    PyObject *dict;
+    PyObject *base;
+    PyObject *str;
+
+    for (i=0; exctable[i].name; i++) {
+        dict = PyDict_New();
+
+        if (exctable[i].docstr) {
+            str = PyString_FromString(exctable[i].docstr);
+            PyDict_SetItemString(dict, "__doc__", str);
+        }
+
+        if (exctable[i].base == 0)
+            base = PyExc_StandardError;
+        else
+            base = *exctable[i].base;
+
+        *exctable[i].exc = PyErr_NewException(exctable[i].name, base, dict);
+    }
+}
+
+void
+psyco_errors_fill(PyObject *dict)
+{
+    PyDict_SetItemString(dict, "Error", Error);
+    PyDict_SetItemString(dict, "Warning", Warning);
+    PyDict_SetItemString(dict, "InterfaceError", InterfaceError);
+    PyDict_SetItemString(dict, "DatabaseError", DatabaseError);
+    PyDict_SetItemString(dict, "InternalError", InternalError);
+    PyDict_SetItemString(dict, "OperationalError", OperationalError);
+    PyDict_SetItemString(dict, "ProgrammingError", ProgrammingError);
+    PyDict_SetItemString(dict, "IntegrityError", IntegrityError);
+    PyDict_SetItemString(dict, "DataError", DataError);
+    PyDict_SetItemString(dict, "NotSupportedError", NotSupportedError);    
+}
+
+void
+psyco_errors_set(PyObject *type)
+{
+    PyObject_SetAttrString(type, "Error", Error);
+    PyObject_SetAttrString(type, "Warning", Warning);
+    PyObject_SetAttrString(type, "InterfaceError", InterfaceError);
+    PyObject_SetAttrString(type, "DatabaseError", DatabaseError);
+    PyObject_SetAttrString(type, "InternalError", InternalError);
+    PyObject_SetAttrString(type, "OperationalError", OperationalError);
+    PyObject_SetAttrString(type, "ProgrammingError", ProgrammingError);
+    PyObject_SetAttrString(type, "IntegrityError", IntegrityError);
+    PyObject_SetAttrString(type, "DataError", DataError);
+    PyObject_SetAttrString(type, "NotSupportedError", NotSupportedError);
+}
+
+/* psyco_error_new
+  
+   Create a new error of the given type with extra attributes. */
+   
+void
+psyco_set_error(PyObject *exc, PyObject *curs, char *msg, 
+                 char *pgerror, char *pgcode)
+{
+    PyObject *t;
+    
+    PyObject *err = PyObject_CallFunction(exc, "s", msg);
+  
+    if (err) {
+        if (pgerror) {
+            t = PyString_FromString(pgerror);
+        }
+        else {
+            t = Py_None ; Py_INCREF(t);
+        }
+        PyObject_SetAttrString(err, "pgerror", t);
+        Py_DECREF(t);
+
+        if (pgcode) {
+            t = PyString_FromString(pgcode);
+        }
+        else {
+            t = Py_None ; Py_INCREF(t);
+        }
+        PyObject_SetAttrString(err, "pgcode", t);
+        Py_DECREF(t);
+        
+        if (curs)
+            PyObject_SetAttrString(err, "cursor", curs);
+        else
+            PyObject_SetAttrString(err, "cursor", Py_None);
+
+        PyErr_SetObject(exc, err);
+       Py_DECREF(err);
+    }
+} 
+
+/* psyco_decimal_init
+
+   Initialize the module's pointer to the decimal type. */
+
+void
+psyco_decimal_init(void)
+{
+#ifdef HAVE_DECIMAL
+    PyObject *decimal = PyImport_ImportModule("decimal");
+    if (decimal) {
+        decimalType = PyObject_GetAttrString(decimal, "Decimal");
+    }
+    else {
+        PyErr_Clear();
+        decimalType = (PyObject *)&PyFloat_Type;
+        Py_INCREF(decimalType);
+    }
+#endif
+}
+
+
+/** method table and module initialization **/
+
+static PyMethodDef psycopgMethods[] = {
+    {"connect",  (PyCFunction)psyco_connect,
+     METH_VARARGS|METH_KEYWORDS, psyco_connect_doc},
+    {"adapt",  (PyCFunction)psyco_microprotocols_adapt,
+     METH_VARARGS, psyco_microprotocols_adapt_doc},
+
+    {"register_type", (PyCFunction)psyco_register_type,
+     METH_VARARGS, psyco_register_type_doc},
+    {"new_type", (PyCFunction)typecast_from_python,
+     METH_VARARGS|METH_KEYWORDS, typecast_from_python_doc},
+
+    {"AsIs",  (PyCFunction)psyco_AsIs,
+     METH_VARARGS, psyco_AsIs_doc},
+    {"QuotedString",  (PyCFunction)psyco_QuotedString,
+     METH_VARARGS, psyco_QuotedString_doc},
+    {"Boolean",  (PyCFunction)psyco_Boolean,
+     METH_VARARGS, psyco_Boolean_doc},
+    {"Binary",  (PyCFunction)psyco_Binary,
+     METH_VARARGS, psyco_Binary_doc},
+    {"Date",  (PyCFunction)psyco_Date,
+     METH_VARARGS, psyco_Date_doc},
+    {"Time",  (PyCFunction)psyco_Time,
+     METH_VARARGS, psyco_Time_doc},
+    {"Timestamp",  (PyCFunction)psyco_Timestamp,
+     METH_VARARGS, psyco_Timestamp_doc},
+    {"DateFromTicks",  (PyCFunction)psyco_DateFromTicks,
+     METH_VARARGS, psyco_DateFromTicks_doc},
+    {"TimeFromTicks",  (PyCFunction)psyco_TimeFromTicks,
+     METH_VARARGS, psyco_TimeFromTicks_doc},
+    {"TimestampFromTicks",  (PyCFunction)psyco_TimestampFromTicks,
+     METH_VARARGS, psyco_TimestampFromTicks_doc},
+    {"List",  (PyCFunction)psyco_List,
+     METH_VARARGS, psyco_List_doc},
+    
+#ifdef HAVE_MXDATETIME
+    {"DateFromMx",  (PyCFunction)psyco_DateFromMx,
+     METH_VARARGS, psyco_DateFromMx_doc},
+    {"TimeFromMx",  (PyCFunction)psyco_TimeFromMx,
+     METH_VARARGS, psyco_TimeFromMx_doc},
+    {"TimestampFromMx",  (PyCFunction)psyco_TimestampFromMx,
+     METH_VARARGS, psyco_TimestampFromMx_doc},
+    {"IntervalFromMx",  (PyCFunction)psyco_IntervalFromMx,
+     METH_VARARGS, psyco_IntervalFromMx_doc}, 
+#endif
+
+#ifdef HAVE_PYDATETIME
+    {"DateFromPy",  (PyCFunction)psyco_DateFromPy,
+     METH_VARARGS, psyco_DateFromPy_doc},
+    {"TimeFromPy",  (PyCFunction)psyco_TimeFromPy,
+     METH_VARARGS, psyco_TimeFromPy_doc},
+    {"TimestampFromPy",  (PyCFunction)psyco_TimestampFromPy,
+     METH_VARARGS, psyco_TimestampFromPy_doc},
+    {"IntervalFromPy",  (PyCFunction)psyco_IntervalFromPy,
+     METH_VARARGS, psyco_IntervalFromPy_doc},     
+#endif
+
+    {NULL, NULL, 0, NULL}        /* Sentinel */
+};
+
+PyMODINIT_FUNC
+init_psycopg(void)
+{
+    static void *PSYCOPG_API[PSYCOPG_API_pointers];
+    
+    PyObject *module, *dict;
+    PyObject *c_api_object;
+
+    Dprintf("initpsycopg: initializing psycopg %s", PSYCOPG_VERSION);
+
+    /* initialize all the new types and then the module */
+    connectionType.ob_type = &PyType_Type;
+    cursorType.ob_type     = &PyType_Type;
+    typecastType.ob_type   = &PyType_Type;
+    qstringType.ob_type    = &PyType_Type;
+    binaryType.ob_type     = &PyType_Type;
+    isqlquoteType.ob_type  = &PyType_Type;
+    asisType.ob_type       = &PyType_Type;
+    listType.ob_type       = &PyType_Type;
+    chunkType.ob_type      = &PyType_Type;
+    
+    if (PyType_Ready(&connectionType) == -1) return;
+    if (PyType_Ready(&cursorType) == -1) return;
+    if (PyType_Ready(&typecastType) == -1) return;
+    if (PyType_Ready(&qstringType) == -1) return;
+    if (PyType_Ready(&binaryType) == -1) return;
+    if (PyType_Ready(&isqlquoteType) == -1) return;
+    if (PyType_Ready(&asisType) == -1) return;
+    if (PyType_Ready(&listType) == -1) return;
+    if (PyType_Ready(&chunkType) == -1) return;
+    
+#ifdef HAVE_PYBOOL
+    pbooleanType.ob_type   = &PyType_Type;
+    if (PyType_Ready(&pbooleanType) == -1) return;
+#endif
+    
+    /* import mx.DateTime module, if necessary */
+#ifdef HAVE_MXDATETIME
+    mxdatetimeType.ob_type = &PyType_Type;
+    if (PyType_Ready(&mxdatetimeType) == -1) return;
+    if (mxDateTime_ImportModuleAndAPI() != 0) {
+        Dprintf("initpsycopg: why marc hide mx.DateTime again?!"); 
+        PyErr_SetString(PyExc_ImportError, "can't import mx.DateTime module");
+        return;
+    }
+    mxDateTimeP = &mxDateTime;
+#endif
+
+    /* import python builtin datetime module, if available */
+#ifdef HAVE_PYDATETIME
+    pyDateTimeModuleP = PyImport_ImportModule("datetime");
+    if (pyDateTimeModuleP == NULL) {
+        Dprintf("initpsycopg: can't import datetime module"); 
+        PyErr_SetString(PyExc_ImportError, "can't import datetime module");
+        return;
+    }
+    pydatetimeType.ob_type = &PyType_Type;
+    if (PyType_Ready(&pydatetimeType) == -1) return;
+
+    /* now we define the datetime types, this is crazy because python should
+       be doing that, not us! */
+    pyDateTypeP = PyObject_GetAttrString(pyDateTimeModuleP, "date");
+    pyTimeTypeP = PyObject_GetAttrString(pyDateTimeModuleP, "time");
+    pyDateTimeTypeP = PyObject_GetAttrString(pyDateTimeModuleP, "datetime");
+    pyDeltaTypeP = PyObject_GetAttrString(pyDateTimeModuleP, "timedelta");
+#endif    
+
+    /* import psycopg2.tz anyway (TODO: replace with C-level module?) */
+    pyPsycopgTzModule = PyImport_ImportModule("psycopg2.tz");
+    if (pyPsycopgTzModule == NULL) {
+        Dprintf("initpsycopg: can't import psycopg2.tz module"); 
+        PyErr_SetString(PyExc_ImportError, "can't import psycopg2.tz module");
+        return;        
+    }
+    pyPsycopgTzLOCAL = 
+        PyObject_GetAttrString(pyPsycopgTzModule, "LOCAL"); 
+    pyPsycopgTzFixedOffsetTimezone = 
+        PyObject_GetAttrString(pyPsycopgTzModule, "FixedOffsetTimezone");
+        
+    /* initialize the module and grab module's dictionary */
+    module = Py_InitModule("_psycopg", psycopgMethods);
+    dict = PyModule_GetDict(module);
+
+    /* initialize all the module's exported functions */
+    /* PyBoxer_API[PyBoxer_Fake_NUM] = (void *)PyBoxer_Fake; */
+
+    /* Create a CObject containing the API pointer array's address */
+    c_api_object = PyCObject_FromVoidPtr((void *)PSYCOPG_API, NULL);
+    if (c_api_object != NULL)
+        PyModule_AddObject(module, "_C_API", c_api_object);
+
+    /* other mixed initializations of module-level variables */
+    psycoEncodings = PyDict_New();
+    psyco_encodings_fill(psycoEncodings);
+    psyco_decimal_init();
+    
+    /* set some module's parameters */
+    PyModule_AddStringConstant(module, "__version__", PSYCOPG_VERSION);
+    PyModule_AddStringConstant(module, "__doc__", "psycopg PostgreSQL driver");
+    PyModule_AddObject(module, "apilevel", PyString_FromString(APILEVEL));
+    PyModule_AddObject(module, "threadsafety", PyInt_FromLong(THREADSAFETY));
+    PyModule_AddObject(module, "paramstyle", PyString_FromString(PARAMSTYLE));
+    
+    /* put new types in module dictionary */
+    PyModule_AddObject(module, "connection", (PyObject*)&connectionType);
+    PyModule_AddObject(module, "cursor", (PyObject*)&cursorType);
+    PyModule_AddObject(module, "ISQLQuote", (PyObject*)&isqlquoteType);
+    
+    /* encodings dictionary in module dictionary */
+    PyModule_AddObject(module, "encodings", psycoEncodings);
+    
+    /* initialize default set of typecasters */
+    typecast_init(dict);
+
+    /* initialize microprotocols layer */
+    microprotocols_init(dict);
+    psyco_adapters_init(dict);
+    
+    /* create a standard set of exceptions and add them to the module's dict */
+    psyco_errors_init();
+    psyco_errors_fill(dict);
+    
+    /* Solve win32 build issue about non-constant initializer element */
+    cursorType.tp_alloc = PyType_GenericAlloc;
+    binaryType.tp_alloc = PyType_GenericAlloc;
+    isqlquoteType.tp_alloc = PyType_GenericAlloc;
+    pbooleanType.tp_alloc = PyType_GenericAlloc;
+    connectionType.tp_alloc = PyType_GenericAlloc;
+    asisType.tp_alloc = PyType_GenericAlloc;
+    qstringType.tp_alloc = PyType_GenericAlloc;
+    listType.tp_alloc = PyType_GenericAlloc;
+    chunkType.tp_alloc = PyType_GenericAlloc;
+    
+#ifdef HAVE_PYDATETIME
+    pydatetimeType.tp_alloc = PyType_GenericAlloc;
+#endif
+    
+    Dprintf("initpsycopg: module initialization complete");
+}
diff --git a/psycopg2/psycopg/python.h b/psycopg2/psycopg/python.h
new file mode 100644 (file)
index 0000000..1c2b96d
--- /dev/null
@@ -0,0 +1,43 @@
+/* python.h - python version compatibility stuff
+ *
+ * Copyright (C) 2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PSYCOPG_PYTHON_H
+#define PSYCOPG_PYTHON_H 1
+
+#include <Python.h>
+#include <structmember.h>
+
+/* python < 2.2 does not have PyMemeberDef */
+#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION < 2
+#define PyMemberDef memberlist 
+#endif
+
+/* PyObject_TypeCheck introduced in 2.2 */
+#ifndef PyObject_TypeCheck
+#define PyObject_TypeCheck(o, t) ((o)->ob_type == (t))
+#endif
+
+/* python 2.2 does not have freefunc (it has destructor instead) */
+#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION < 3
+#define freefunc destructor
+#endif
+
+#endif /* !defined(PSYCOPG_PYTHON_H) */
diff --git a/psycopg2/psycopg/typecast.c b/psycopg2/psycopg/typecast.c
new file mode 100644 (file)
index 0000000..ef91bfd
--- /dev/null
@@ -0,0 +1,563 @@
+/* typecast.c - basic utility functions related to typecasting
+ *
+ * Copyright (C) 2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <Python.h>
+#include <structmember.h>
+
+#define PSYCOPG_MODULE
+#include "psycopg/config.h"
+#include "psycopg/psycopg.h"
+#include "psycopg/python.h"
+#include "psycopg/typecast.h"
+#include "psycopg/cursor.h"
+
+/* usefull function used by some typecasters */
+
+static char *
+skip_until_space(char *s)
+{
+    while (*s && *s != ' ') s++;
+    return s;
+}
+
+static char *
+skip_until_space2(char *s, int *len)
+{
+    while (*len > 0 && *s && *s != ' ') {
+        s++; (*len)--;
+    }
+    return s;
+}
+
+static int
+typecast_parse_date(char* s, char** t, int* len,
+                     int* year, int* month, int* day)
+{
+    int acc = -1, cz = 0;
+    
+    Dprintf("typecast_parse_date: len = %d, s = %s", *len, s);
+     
+    while (cz < 3 && *len > 0 && *s) {
+        switch (*s) {
+        case '-':
+        case ' ':
+        case 'T':
+            if (cz == 0) *year = acc;
+            else if (cz == 1) *month = acc;
+            else if (cz == 2) *day = acc;
+            acc = -1; cz++;
+            break;
+        default:
+            acc = (acc == -1 ? 0 : acc*10) + ((int)*s - (int)'0');
+            break;            
+        }
+
+        s++; (*len)--;
+    }
+
+    if (acc != -1) {
+        *day = acc;
+        cz += 1;
+    }
+    if (t != NULL) *t = s;    
+
+    return cz;
+}
+
+static int
+typecast_parse_time(char* s, char** t, int* len,
+                     int* hh, int* mm, int* ss, int* us, int* tz)
+{
+    int acc = -1, cz = 0;
+    int tzs = 1, tzhh = 0, tzmm = 0;
+    int usd = 0;
+    
+    /* sets microseconds and timezone to 0 because they may be missing */
+    *us = *tz = 0;
+    
+    Dprintf("typecast_parse_time: len = %d, s = %s", *len, s);
+     
+    while (cz < 6 && *len > 0 && *s) {
+        switch (*s) {
+        case ':':
+            if (cz == 0) *hh = acc;
+            else if (cz == 1) *mm = acc;
+            else if (cz == 2) *ss = acc;
+            else if (cz == 3) *us = acc;
+            else if (cz == 4) tzhh = acc;
+            acc = -1; cz++;
+            break;
+        case '.':
+            /* we expect seconds and if we don't get them we return an error */
+            if (cz != 2) return -1;
+            *ss = acc;
+            acc = -1; cz++;
+            break;
+        case '+':
+        case '-':
+            /* seconds or microseconds here, anything else is an error */
+            if (cz < 2 || cz > 3) return -1;
+            if (*s == '-') tzs = -1;
+            if      (cz == 2) *ss = acc;
+            else if (cz == 3) *us = acc;
+            acc = -1; cz = 4;
+            break;
+        default:
+            acc = (acc == -1 ? 0 : acc*10) + ((int)*s - (int)'0');
+            if (cz == 3) usd += 1;
+            break;            
+        }
+
+        s++; (*len)--;
+    }
+
+    if (acc != -1) {
+        if (cz == 2)      { *ss = acc; cz += 1; }
+        else if (cz == 3) { *us = acc; cz += 1; }
+        else if (cz == 4) { tzhh = acc; cz += 1; }
+        else if (cz == 5)   tzmm = acc;
+    }
+    if (t != NULL) *t = s;
+    
+    *tz = tzs * tzhh*60 + tzmm;
+    
+    if (*us != 0.0) {
+        while (usd++ < 6) *us *= 10.0;
+    }
+    
+    return cz;
+}
+
+/** include casting objects **/
+#include "psycopg/typecast_basic.c"
+#include "psycopg/typecast_binary.c"
+
+#ifdef HAVE_MXDATETIME
+#include "psycopg/typecast_mxdatetime.c"
+#endif
+
+#ifdef HAVE_PYDATETIME
+#include "psycopg/typecast_datetime.c"
+#endif
+
+#include "psycopg/typecast_array.c"
+#include "psycopg/typecast_builtins.c"
+
+
+/* a list of initializers, used to make the typecasters accessible anyway */
+#ifdef HAVE_PYDATETIME
+typecastObject_initlist typecast_pydatetime[] = {
+    {"PYDATETIME", typecast_DATETIME_types, typecast_PYDATETIME_cast},
+    {"PYTIME", typecast_TIME_types, typecast_PYTIME_cast},
+    {"PYDATE", typecast_DATE_types, typecast_PYDATE_cast},
+    {"PYINTERVAL", typecast_INTERVAL_types, typecast_PYINTERVAL_cast},    
+    {NULL, NULL, NULL}
+};
+#endif
+
+/* a list of initializers, used to make the typecasters accessible anyway */
+#ifdef HAVE_MXDATETIME
+typecastObject_initlist typecast_mxdatetime[] = {
+    {"MXDATETIME", typecast_DATETIME_types, typecast_MXDATE_cast},
+    {"MXTIME", typecast_TIME_types, typecast_MXTIME_cast},
+    {"MXDATE", typecast_DATE_types, typecast_MXDATE_cast},
+    {"MXINTERVAL", typecast_INTERVAL_types, typecast_MXINTERVAL_cast},    
+    {NULL, NULL, NULL}
+};
+#endif
+
+
+/** the type dictionary and associated functions **/
+
+PyObject *psyco_types;
+PyObject *psyco_default_cast;
+PyObject *psyco_binary_types;
+PyObject *psyco_default_binary_cast;
+
+static long int typecast_default_DEFAULT[] = {0};
+static typecastObject_initlist typecast_default = {
+    "DEFAULT", typecast_default_DEFAULT, typecast_STRING_cast};
+
+
+/* typecast_init - initialize the dictionary and create default types */
+
+int
+typecast_init(PyObject *dict)
+{
+    int i;
+    
+    /* create type dictionary and put it in module namespace */
+    psyco_types = PyDict_New();
+    psyco_binary_types = PyDict_New();
+    
+    if (!psyco_types || !psyco_binary_types) {
+        Py_XDECREF(psyco_types);
+        Py_XDECREF(psyco_binary_types);
+        return -1;
+    }                         
+
+    PyDict_SetItemString(dict, "string_types", psyco_types);
+    PyDict_SetItemString(dict, "binary_types", psyco_binary_types);
+    
+    /* insert the cast types into the 'types' dictionary and register them in
+       the module dictionary */
+    for (i = 0; typecast_builtins[i].name != NULL; i++) {
+        typecastObject *t;
+
+        Dprintf("typecast_init: initializing %s", typecast_builtins[i].name);
+
+        t = (typecastObject *)typecast_from_c(&(typecast_builtins[i]), dict);
+        if (t == NULL) return -1;
+        if (typecast_add((PyObject *)t, 0) != 0) return -1;
+
+        PyDict_SetItem(dict, t->name, (PyObject *)t);
+
+        /* export binary object */
+        if (typecast_builtins[i].values == typecast_BINARY_types) {
+            psyco_default_binary_cast = (PyObject *)t;
+        }
+    }
+    
+    /* create and save a default cast object (but does not register it) */
+    psyco_default_cast = typecast_from_c(&typecast_default, dict);
+
+    /* register the date/time typecasters with their original names */
+#ifdef HAVE_MXDATETIME
+    for (i = 0; typecast_mxdatetime[i].name != NULL; i++) {
+        typecastObject *t;
+        Dprintf("typecast_init: initializing %s", typecast_mxdatetime[i].name);
+        t = (typecastObject *)typecast_from_c(&(typecast_mxdatetime[i]), dict);
+        if (t == NULL) return -1;
+        PyDict_SetItem(dict, t->name, (PyObject *)t);
+    }
+#endif
+#ifdef HAVE_PYDATETIME
+    for (i = 0; typecast_pydatetime[i].name != NULL; i++) {
+        typecastObject *t;
+        Dprintf("typecast_init: initializing %s", typecast_pydatetime[i].name);
+        t = (typecastObject *)typecast_from_c(&(typecast_pydatetime[i]), dict);
+        if (t == NULL) return -1;
+        PyDict_SetItem(dict, t->name, (PyObject *)t);
+    }
+#endif
+    
+    return 0;
+}
+
+/* typecast_add - add a type object to the dictionary */
+int
+typecast_add(PyObject *obj, int binary)
+{
+    PyObject *val;
+    int len, i;
+
+    typecastObject *type = (typecastObject *)obj;
+    
+    Dprintf("typecast_add: object at %p, values refcnt = %d",
+            obj, type->values->ob_refcnt);
+
+    len = PyTuple_Size(type->values);
+    for (i = 0; i < len; i++) {
+        val = PyTuple_GetItem(type->values, i);
+        Dprintf("typecast_add:     adding val: %ld", PyInt_AsLong(val));
+        if (binary) {
+            PyDict_SetItem(psyco_binary_types, val, obj);
+        }
+        else {
+            PyDict_SetItem(psyco_types, val, obj);
+        }
+    }
+
+    Dprintf("typecast_add:     base caster: %p", type->bcast);
+
+    return 0;
+}
+
+
+/** typecast type **/
+
+#define OFFSETOF(x) offsetof(typecastObject, x)
+
+static int
+typecast_cmp(PyObject *obj1, PyObject* obj2)
+{
+    typecastObject *self = (typecastObject*)obj1;
+    typecastObject *other = NULL;
+    PyObject *number = NULL;
+    int i, j, res = -1;
+    
+    if (PyObject_TypeCheck(obj2, &typecastType)) {
+        other = (typecastObject*)obj2;
+    }
+    else {
+        number = PyNumber_Int(obj2);
+    }
+
+    Dprintf("typecast_cmp: other = %p, number = %p", other, number);
+    
+    for (i=0; i < PyObject_Length(self->values) && res == -1; i++) {
+        long int val = PyInt_AsLong(PyTuple_GET_ITEM(self->values, i));
+        
+        if (other != NULL) {
+            for (j=0; j < PyObject_Length(other->values); j++) {
+                if (PyInt_AsLong(PyTuple_GET_ITEM(other->values, j)) == val) {
+                    res = 0; break;   
+                }
+            }
+        }
+        
+        else if (number != NULL) {
+            if (PyInt_AsLong(number) == val) {
+                res = 0; break;
+            }
+        }
+    }
+    
+    Py_XDECREF(number);
+    return res;
+}
+
+static PyObject*
+typecast_richcompare(PyObject *obj1, PyObject* obj2, int opid)
+{
+    PyObject *result = NULL;
+    int res = typecast_cmp(obj1, obj2);
+    
+    if (PyErr_Occurred()) return NULL;
+    
+    if ((opid == Py_EQ && res == 0) || (opid != Py_EQ && res != 0))
+        result = Py_True;
+    else
+        result = Py_False;
+    
+    Py_INCREF(result);
+    return result;
+}
+     
+static struct PyMemberDef typecastObject_members[] = {
+    {"name", T_OBJECT, OFFSETOF(name), RO},
+    {"values", T_OBJECT, OFFSETOF(values), RO},
+    {NULL}
+};
+    
+static void
+typecast_dealloc(PyObject *obj)
+{
+    typecastObject *self = (typecastObject*)obj;
+    
+    Py_XDECREF(self->values);
+    Py_XDECREF(self->name);
+    Py_XDECREF(self->pcast);
+
+    PyObject_Del(self);
+}
+
+static PyObject *
+typecast_call(PyObject *obj, PyObject *args, PyObject *kwargs)
+{   
+    PyObject *string, *cursor;
+    
+    if (!PyArg_ParseTuple(args, "OO", &string, &cursor)) {
+        return NULL;
+    }
+
+    return typecast_cast(obj,
+                         PyString_AsString(string), PyString_Size(string),
+                         cursor);
+}
+
+PyTypeObject typecastType = {
+    PyObject_HEAD_INIT(NULL)
+    0,
+    "psycopg2._psycopg.type",
+    sizeof(typecastObject),
+    0,
+    
+    typecast_dealloc, /*tp_dealloc*/
+    0,          /*tp_print*/ 
+    0,          /*tp_getattr*/
+    0,          /*tp_setattr*/
+    typecast_cmp, /*tp_compare*/
+    0,          /*tp_repr*/
+    0,          /*tp_as_number*/
+    0,          /*tp_as_sequence*/
+    0,          /*tp_as_mapping*/
+    0,          /*tp_hash */
+
+    typecast_call, /*tp_call*/
+    0,          /*tp_str*/
+    0,          /*tp_getattro*/
+    0,          /*tp_setattro*/
+    0,          /*tp_as_buffer*/
+
+    Py_TPFLAGS_HAVE_RICHCOMPARE, /*tp_flags*/
+    "psycopg type-casting object", /*tp_doc*/
+    
+    0,          /*tp_traverse*/
+    0,          /*tp_clear*/
+
+    typecast_richcompare, /*tp_richcompare*/
+    0,          /*tp_weaklistoffset*/
+
+    0,          /*tp_iter*/
+    0,          /*tp_iternext*/
+
+    /* Attribute descriptor and subclassing stuff */
+
+    0, /*tp_methods*/
+    typecastObject_members, /*tp_members*/
+    0,          /*tp_getset*/
+    0,          /*tp_base*/
+    0,          /*tp_dict*/
+    
+    0,          /*tp_descr_get*/
+    0,          /*tp_descr_set*/
+    0,          /*tp_dictoffset*/
+    
+    0, /*tp_init*/
+    0, /*tp_alloc  will be set to PyType_GenericAlloc in module init*/
+    0, /*tp_new*/
+    0, /*tp_free  Low-level free-memory routine */
+    0,          /*tp_is_gc For PyObject_IS_GC */
+    0,          /*tp_bases*/
+    0,          /*tp_mro method resolution order */
+    0,          /*tp_cache*/
+    0,          /*tp_subclasses*/
+    0           /*tp_weaklist*/
+};
+
+static PyObject *
+typecast_new(PyObject *name, PyObject *values, PyObject *cast, PyObject *base)
+{
+    typecastObject *obj;
+
+    obj = PyObject_NEW(typecastObject, &typecastType);
+    if (obj == NULL) return NULL;
+
+    Dprintf("typecast_new: new type at = %p, refcnt = %d", obj, obj->ob_refcnt);
+             
+    Py_INCREF(values);
+    obj->values = values;
+    
+    if (name) {
+        Py_INCREF(name);
+        obj->name = name;
+    }
+    else {
+        Py_INCREF(Py_None);
+        obj->name = Py_None;
+    }
+
+    obj->pcast = NULL;
+    obj->ccast = NULL;
+    obj->bcast = base;
+
+    if (obj->bcast) Py_INCREF(obj->bcast);
+
+    /* FIXME: raise an exception when None is passed as Python caster */
+    if (cast && cast != Py_None) {
+        Py_INCREF(cast);
+        obj->pcast = cast;
+    }
+    
+    Dprintf("typecast_new: typecast object created at %p", obj);
+    
+    return (PyObject *)obj;
+}
+
+PyObject *
+typecast_from_python(PyObject *self, PyObject *args, PyObject *keywds)
+{
+    PyObject *v, *name, *cast = NULL, *base = NULL;
+
+    static char *kwlist[] = {"values", "name", "castobj", "baseobj", NULL};
+    
+    if (!PyArg_ParseTupleAndKeywords(args, keywds, "O!|O!OO", kwlist, 
+                                     &PyTuple_Type, &v,
+                                     &PyString_Type, &name,
+                                     &cast, &base)) {
+        return NULL;
+    }
+    
+    return typecast_new(name, v, cast, base);
+}
+
+PyObject *
+typecast_from_c(typecastObject_initlist *type, PyObject *dict)
+{
+    PyObject *tuple, *base = NULL;
+    typecastObject *obj;
+    int i, len = 0;
+
+    /* before doing anything else we look for the base */
+    if (type->base) {
+        /* NOTE: base is a borrowed reference! */
+        base = PyDict_GetItemString(dict, type->base);
+        if (!base) {
+            PyErr_Format(Error, "typecast base not found: %s", type->base);
+            return NULL;
+        }
+    }
+
+    while (type->values[len] != 0) len++;
+    
+    tuple = PyTuple_New(len);
+    if (!tuple) return NULL;
+    
+    for (i = 0; i < len ; i++) {
+        PyTuple_SET_ITEM(tuple, i, PyInt_FromLong(type->values[i]));
+    }
+
+        
+    obj = (typecastObject *)
+        typecast_new(PyString_FromString(type->name), tuple, NULL, base);
+    
+    if (obj) {
+        obj->ccast = type->cast;
+        obj->pcast = NULL;
+    }
+    return (PyObject *)obj;
+}
+
+PyObject *
+typecast_cast(PyObject *obj, char *str, int len, PyObject *curs)
+{
+    PyObject *old, *res = NULL;
+    typecastObject *self = (typecastObject *)obj;
+
+    /* we don't incref, the caster *can't* die at this point */
+    old = ((cursorObject*)curs)->caster;
+    ((cursorObject*)curs)->caster = obj;
+    
+    if (self->ccast) {
+        res = self->ccast(str, len, curs);
+    }
+    else if (self->pcast) {
+        res = PyObject_CallFunction(self->pcast, "s#O", str, len, curs);
+    }
+    else {
+        PyErr_SetString(Error, "internal error: no casting function found");
+    }
+
+    ((cursorObject*)curs)->caster = old;
+
+    return res;
+}
diff --git a/psycopg2/psycopg/typecast.h b/psycopg2/psycopg/typecast.h
new file mode 100644 (file)
index 0000000..ec77e5c
--- /dev/null
@@ -0,0 +1,85 @@
+/* typecast.h - definitions for typecasters
+ *
+ * Copyright (C) 2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PSYCOPG_TYPECAST_H
+#define PSYCOPG_TYPECAST_H 1
+
+#include <Python.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* type of type-casting functions (both C and Python) */
+typedef PyObject *(*typecast_function)(char *, int len, PyObject *);
+
+/** typecast type **/
+
+extern PyTypeObject typecastType;
+
+typedef struct {
+    PyObject_HEAD
+
+    PyObject *name;    /* the name of this type */
+    PyObject *values;  /* the different types this instance can match */
+
+    typecast_function  ccast;  /* the C casting function */
+    PyObject          *pcast;  /* the python casting function */
+    PyObject          *bcast;  /* base cast, used by array typecasters */
+} typecastObject;
+
+/* the initialization values are stored here */
+
+typedef struct {
+    char *name;
+    long int *values;
+    typecast_function cast;
+
+    /* base is the base typecaster for arrays */
+    char *base;
+} typecastObject_initlist;
+
+/* the type dictionary, much faster to access it globally */
+extern PyObject *psyco_types;
+extern PyObject *psyco_binary_types;
+    
+/* the default casting objects, used when no other objects are available */
+extern PyObject *psyco_default_cast;
+extern PyObject *psyco_default_binary_cast;
+
+/** exported functions **/
+
+/* used by module.c to init the type system and register types */
+extern int typecast_init(PyObject *dict);
+extern int typecast_add(PyObject *obj, int binary);
+
+/* the C callable typecastObject creator function */
+extern PyObject *typecast_from_c(typecastObject_initlist *type, PyObject *d);
+
+/* the python callable typecast creator function */
+extern PyObject *typecast_from_python(
+    PyObject *self, PyObject *args, PyObject *keywds);
+
+/* the function used to dispatch typecasting calls */
+extern PyObject *typecast_cast(
+    PyObject *self, char *str, int len, PyObject *curs);
+    
+#endif /* !defined(PSYCOPG_TYPECAST_H) */
diff --git a/psycopg2/psycopg/typecast_array.c b/psycopg2/psycopg/typecast_array.c
new file mode 100644 (file)
index 0000000..7dcb3a3
--- /dev/null
@@ -0,0 +1,258 @@
+/* typecast_array.c - array typecasters
+ *
+ * Copyright (C) 2005 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of the psycopg module.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#define MAX_DIMENSIONS 16
+
+/** typecast_array_cleanup - remove the horrible [...]= stuff **/
+
+static int
+typecast_array_cleanup(char **str, int *len)
+{
+    int i, depth = 1;
+    
+    if ((*str)[0] != '[') return -1;
+    
+    for (i=1 ; depth > 0 && i < *len ; i++) {
+        if ((*str)[i] == '[')
+            depth += 1;
+        else if ((*str)[i] == ']')
+            depth -= 1;
+    }
+    if ((*str)[i] != '=') return -1;
+    
+    *str = &((*str)[i+1]);
+    *len = *len - i - 1;
+    return 0;
+}
+
+/** typecast_array_scan - scan a string looking for array items **/
+
+#define ASCAN_ERROR -1
+#define ASCAN_EOF    0
+#define ASCAN_BEGIN  1
+#define ASCAN_END    2
+#define ASCAN_TOKEN  3
+#define ASCAN_QUOTED 4
+
+static int
+typecast_array_tokenize(char *str, int strlength,
+                        int *pos, char** token, int *length)
+{
+    /* FORTRAN glory */
+    int i, j, q, b, l, res;
+
+    Dprintf("typecast_array_tokenize: '%s', %d/%d",
+            &str[*pos], *pos, strlength);
+
+    /* we always get called with pos pointing at the start of a token, so a
+       fast check is enough for ASCAN_EOF, ASCAN_BEGIN and ASCAN_END */
+    if (*pos == strlength) {
+        return ASCAN_EOF;
+    }
+    else if (str[*pos] == '{') {
+        *pos += 1;
+        return ASCAN_BEGIN;
+    }
+    else if (str[*pos] == '}') {
+        *pos += 1;
+        if (str[*pos] == ',')
+            *pos += 1;
+        return ASCAN_END;
+    }
+
+    /* now we start looking for the first unquoted ',' or '}', the only two
+       tokens that can limit an array element */
+    q = 0; /* if q is odd we're inside quotes */
+    b = 0; /* if b is 1 we just encountered a backslash */
+    res = ASCAN_TOKEN;
+    
+    for (i = *pos ; i < strlength ; i++) {
+        switch (str[i]) {
+        case '"':
+            if (b == 0)
+                q += 1;
+            else
+                b = 0;
+            break;
+
+        case '\\':
+            res = ASCAN_QUOTED;
+            if (b == 0)
+                b = 1;
+            else
+                /* we're backslashing a backslash */
+                b = 0;
+            break;
+
+        case '}':
+        case ',':
+            if (b == 0 && ((q&1) == 0))
+                goto tokenize;
+            break;
+
+        default:
+            /* reset the backslash counter */
+            b = 0;
+            break;
+        }
+    }
+
+ tokenize:
+    /* remove initial quoting character and calculate raw length */
+    l = i - *pos;
+    if (str[*pos] == '"') {
+        *pos += 1;
+        l -= 2;
+    }
+
+    if (res == ASCAN_QUOTED) { 
+        char *buffer = PyMem_Malloc(l+1);
+        if (buffer == NULL) return ASCAN_ERROR;
+
+        *token = buffer;
+        
+        for (j = *pos; j < *pos+l; j++) {
+            if (str[j] != '\\'
+                || (j > *pos && str[j-1] == '\\'))
+                *(buffer++) = str[j];
+        }
+        
+        *buffer = '\0';
+        *length = buffer - *token;
+    }
+    else {
+        *token = &str[*pos];
+        *length = l;
+    }
+
+    *pos = i;
+    
+    /* skip the comma and set position to the start of next token */
+    if (str[i] == ',') *pos += 1;
+
+    return res;
+}
+
+static int
+typecast_array_scan(char *str, int strlength,
+                    PyObject *curs, PyObject *base, PyObject *array)
+{
+    int state, length = 0, pos = 0;
+    char *token;
+
+    PyObject *stack[MAX_DIMENSIONS];
+    int stack_index = 0;
+    
+    while (1) {
+        token = NULL;
+        state = typecast_array_tokenize(str, strlength, &pos, &token, &length);
+        Dprintf("typecast_array_scan: state = %d, length = %d, token = '%s'",
+                state, length, token);
+        if (state == ASCAN_TOKEN || state == ASCAN_QUOTED) {
+            PyObject *obj = typecast_cast(base, token, length, curs);
+
+            /* before anything else we free the memory */
+            if (state == ASCAN_QUOTED) PyMem_Free(token);
+            if (obj == NULL) return 0;
+
+            PyList_Append(array, obj);
+            Py_DECREF(obj);
+        }
+
+        else if (state == ASCAN_BEGIN) {
+            PyObject *sub = PyList_New(0);            
+            if (sub == NULL) return 0;
+
+            PyList_Append(array, sub);
+            Py_DECREF(sub);
+
+            if (stack_index == MAX_DIMENSIONS)
+                return 0;
+
+            stack[stack_index++] = array;
+            array = sub;
+        }
+        
+        else if (state == ASCAN_ERROR) {
+            return 0;
+        }
+
+        else if (state == ASCAN_END) {
+            if (--stack_index < 0)
+                return 0;
+            array = stack[stack_index];
+        }
+
+        else if (state ==  ASCAN_EOF)
+            break;
+    }
+
+    return 1;
+}
+
+
+/** GENERIC - a generic typecaster that can be used when no special actions
+    have to be taken on the single items **/
+   
+static PyObject *
+typecast_GENERIC_ARRAY_cast(char *str, int len, PyObject *curs)
+{
+    PyObject *obj = NULL;
+    PyObject *base = ((typecastObject*)((cursorObject*)curs)->caster)->bcast;
+   
+    Dprintf("typecast_GENERIC_ARRAY_cast: str = '%s', len = %d", str, len);
+
+    if (str == NULL) {Py_INCREF(Py_None); return Py_None;}
+    if (str[0] == '[')
+        typecast_array_cleanup(&str, &len);
+    if (str[0] != '{') {
+        PyErr_SetString(Error, "array does not start with '{'");
+        return NULL;
+    }
+
+    Dprintf("typecast_GENERIC_ARRAY_cast: str = '%s', len = %d", str, len);
+    
+    obj = PyList_New(0);
+
+    /* scan the array skipping the first level of {} */
+    if (typecast_array_scan(&str[1], len-2, curs, base, obj) == 0) {
+        Py_DECREF(obj);
+        obj = NULL;
+    }
+    
+    return obj;
+}
+
+/** almost all the basic array typecasters are derived from GENERIC **/
+
+#define typecast_LONGINTEGERARRAY_cast typecast_GENERIC_ARRAY_cast
+#define typecast_INTEGERARRAY_cast typecast_GENERIC_ARRAY_cast
+#define typecast_FLOATARRAY_cast typecast_GENERIC_ARRAY_cast
+#define typecast_DECIMALARRAY_cast typecast_GENERIC_ARRAY_cast
+#define typecast_STRINGARRAY_cast typecast_GENERIC_ARRAY_cast
+#define typecast_UNICODEARRAY_cast typecast_GENERIC_ARRAY_cast
+#define typecast_BOOLEANARRAY_cast typecast_GENERIC_ARRAY_cast
+#define typecast_DATETIMEARRAY_cast typecast_GENERIC_ARRAY_cast
+#define typecast_DATEARRAY_cast typecast_GENERIC_ARRAY_cast
+#define typecast_TIMEARRAY_cast typecast_GENERIC_ARRAY_cast
+#define typecast_INTERVALARRAY_cast typecast_GENERIC_ARRAY_cast
+#define typecast_BINARYARRAY_cast typecast_GENERIC_ARRAY_cast
+#define typecast_ROWIDARRAY_cast typecast_GENERIC_ARRAY_cast
diff --git a/psycopg2/psycopg/typecast_basic.c b/psycopg2/psycopg/typecast_basic.c
new file mode 100644 (file)
index 0000000..e9ac7f4
--- /dev/null
@@ -0,0 +1,141 @@
+/* pgcasts_basic.c - basic typecasting functions to python types
+ *
+ * Copyright (C) 2001-2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of the psycopg module.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+/** INTEGER - cast normal integers (4 bytes) to python int **/
+
+static PyObject *
+typecast_INTEGER_cast(char *s, int len, PyObject *curs)
+{
+    char buffer[12];
+    
+    if (s == NULL) {Py_INCREF(Py_None); return Py_None;}
+    if (s[len] != '\0') {
+        strncpy(buffer, s, len); buffer[len] = '\0';
+        s = buffer;
+    }
+    return PyInt_FromString(s, NULL, 0);
+}
+
+/** LONGINTEGER - cast long integers (8 bytes) to python long **/
+
+static PyObject *
+typecast_LONGINTEGER_cast(char *s, int len, PyObject *curs)
+{
+    char buffer[24];
+    
+    if (s == NULL) {Py_INCREF(Py_None); return Py_None;}
+    if (s[len] != '\0') {
+        strncpy(buffer, s, len); buffer[len] = '\0';
+        s = buffer;
+    }
+    return PyLong_FromString(s, NULL, 0);
+}
+
+/** FLOAT - cast floating point numbers to python float **/
+
+static PyObject *
+typecast_FLOAT_cast(char *s, int len, PyObject *curs)
+{
+    PyObject *str = NULL, *flo = NULL;
+    char *pend;
+    
+    if (s == NULL) {Py_INCREF(Py_None); return Py_None;}
+    str = PyString_FromStringAndSize(s, len);
+    flo = PyFloat_FromString(str, &pend);
+    Py_DECREF(str);
+    return flo;
+}
+
+/** STRING - cast strings of any type to python string **/
+
+static PyObject *
+typecast_STRING_cast(char *s, int len, PyObject *curs)
+{
+    if (s == NULL) {Py_INCREF(Py_None); return Py_None;}
+    return PyString_FromStringAndSize(s, len);
+}
+
+/** UNICODE - cast strings of any type to a python unicode object **/
+
+static PyObject *
+typecast_UNICODE_cast(char *s, int len, PyObject *curs)
+{
+    PyObject *enc;
+
+    if (s == NULL) {Py_INCREF(Py_None); return Py_None;}
+
+    enc = PyDict_GetItemString(psycoEncodings,
+                               ((cursorObject*)curs)->conn->encoding);
+    if (enc) {
+        return PyUnicode_Decode(s, len, PyString_AsString(enc), NULL);
+    }
+    else {
+       PyErr_Format(InterfaceError,
+                    "can't decode into unicode string from %s",
+                    ((cursorObject*)curs)->conn->encoding);
+       return NULL; 
+    }
+}
+
+/** BOOLEAN - cast boolean value into right python object **/
+
+static PyObject *
+typecast_BOOLEAN_cast(char *s, int len, PyObject *curs)
+{
+    PyObject *res;
+
+    if (s == NULL) {Py_INCREF(Py_None); return Py_None;}
+
+    if (s[0] == 't')
+        res = Py_True;
+    else
+        res = Py_False;
+
+    Py_INCREF(res);
+    return res;
+}
+
+/** DECIMAL - cast any kind of number into a Python Decimal object **/
+
+#ifdef HAVE_DECIMAL
+static PyObject *
+typecast_DECIMAL_cast(char *s, int len, PyObject *curs)
+{
+    PyObject *res = NULL;
+    char *buffer;
+    
+    if (s == NULL) {Py_INCREF(Py_None); return Py_None;}
+
+    if ((buffer = PyMem_Malloc(len+1)) == NULL)
+        PyErr_NoMemory();
+    strncpy(buffer, s, len); buffer[len] = '\0';
+    res = PyObject_CallFunction(decimalType, "s", buffer);
+    PyMem_Free(buffer);
+
+    return res;
+}
+#else
+#define typecast_DECIMAL_cast  typecast_FLOAT_cast
+#endif
+     
+/* some needed aliases */
+#define typecast_NUMBER_cast   typecast_FLOAT_cast
+#define typecast_ROWID_cast    typecast_INTEGER_cast
diff --git a/psycopg2/psycopg/typecast_binary.c b/psycopg2/psycopg/typecast_binary.c
new file mode 100644 (file)
index 0000000..d490bc7
--- /dev/null
@@ -0,0 +1,191 @@
+/* typecast_binary.c - binary typecasting functions to python types
+ *
+ * Copyright (C) 2001-2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of the psycopg module.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "typecast_binary.h"
+
+#include <libpq-fe.h>
+#include <stdlib.h>
+
+
+/* Python object holding a memory chunk. The memory is deallocated when
+   the object is destroyed. This type is used to let users directly access
+   memory chunks holding unescaped binary data through the buffer interface.
+ */
+
+static void
+chunk_dealloc(chunkObject *self)
+{
+    Dprintf("chunk_dealloc: deallocating memory at %p, size %d",
+            self->base, self->len);
+    free(self->base);
+    self->ob_type->tp_free((PyObject *) self);
+}
+
+static PyObject *
+chunk_repr(chunkObject *self)
+{
+    return PyString_FromFormat("<memory chunk at %p size %d>",
+                               self->base, self->len);
+}
+
+static int
+chunk_getreadbuffer(chunkObject *self, int segment, void **ptr)
+{
+    if (segment != 0)
+    {
+        PyErr_SetString(PyExc_SystemError,
+                        "acessing non-existant buffer segment");
+        return -1;
+    }
+    *ptr = self->base;
+    return self->len;
+}
+
+static int
+chunk_getsegcount(chunkObject *self, int *lenp)
+{
+    if (lenp != NULL)
+        *lenp = self->len;
+    return 1;
+}
+
+static PyBufferProcs chunk_as_buffer =
+{
+    (getreadbufferproc) chunk_getreadbuffer,
+    (getwritebufferproc) NULL,
+    (getsegcountproc) chunk_getsegcount,
+    (getcharbufferproc) NULL
+};
+
+#define chunk_doc "memory chunk"
+
+PyTypeObject chunkType = {
+    PyObject_HEAD_INIT(NULL)
+    0,                          /* ob_size */
+    "psycopg2._psycopg.chunk",   /* tp_name */
+    sizeof(chunkObject),        /* tp_basicsize */
+    0,                          /* tp_itemsize */
+    (destructor) chunk_dealloc, /* tp_dealloc*/
+    0,                          /* tp_print */
+    0,                          /* tp_getattr */
+    0,                          /* tp_setattr */
+    0,                          /* tp_compare */
+    (reprfunc) chunk_repr,      /* tp_repr */
+    0,                          /* tp_as_number */
+    0,                          /* tp_as_sequence */
+    0,                          /* tp_as_mapping */
+    0,                          /* tp_hash */
+    0,                          /* tp_call */
+    0,                          /* tp_str */
+    0,                          /* tp_getattro */
+    0,                          /* tp_setattro */
+    &chunk_as_buffer,           /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
+    chunk_doc                   /* tp_doc */
+};
+
+/* the function typecast_BINARY_cast_unescape is used when libpq does not
+   provide PQunescapeBytea: it convert all the \xxx octal sequences to the
+   proper byte value */
+
+#ifdef PSYCOPG_OWN_QUOTING
+static unsigned char *
+typecast_BINARY_cast_unescape(unsigned char *str, size_t *to_length)
+{
+    char *dstptr, *dststr;
+    int len, i;
+
+    len = strlen(str);
+    dststr = (char*)calloc(len, sizeof(char));
+    dstptr = dststr;
+
+    if (dststr == NULL) return NULL;
+
+    Py_BEGIN_ALLOW_THREADS;
+   
+    for (i = 0; i < len; i++) {
+        if (str[i] == '\\') {
+            if ( ++i < len) {
+                if (str[i] == '\\') {
+                    *dstptr = '\\';
+                }
+                else {
+                    *dstptr = 0;
+                    *dstptr |= (str[i++] & 7) << 6;
+                    *dstptr |= (str[i++] & 7) << 3;
+                    *dstptr |= (str[i] & 7);
+                }
+            }
+        }
+        else {
+            *dstptr = str[i];
+        }
+        dstptr++;
+    }
+    
+    Py_END_ALLOW_THREADS;
+
+    *to_length = (size_t)(dstptr-dststr);
+    
+    return dststr;
+}
+
+#define PQunescapeBytea typecast_BINARY_cast_unescape
+#endif
+    
+static PyObject *
+typecast_BINARY_cast(char *s, int l, PyObject *curs)
+{
+    chunkObject *chunk;
+    PyObject *res;
+    char *str, *buffer = NULL;
+    size_t len;
+
+    if (s == NULL) {Py_INCREF(Py_None); return Py_None;}
+
+    /* PQunescapeBytea absolutely wants a 0-terminated string and we don't
+       want to copy the whole buffer, right? Wrong, but there isn't any other
+       way <g> */
+    if (s[l] != '\0') {
+        if ((buffer = PyMem_Malloc(l+1)) == NULL)
+            PyErr_NoMemory();
+        strncpy(buffer, s, l);
+        buffer[l] = '\0';
+        s = buffer;
+    }
+    str = (char*)PQunescapeBytea((unsigned char*)s, &len);
+    Dprintf("typecast_BINARY_cast: unescaped %d bytes", len);
+    if (buffer) PyMem_Free(buffer);
+
+    chunk = (chunkObject *) PyObject_New(chunkObject, &chunkType);
+    if (chunk == NULL) return NULL;
+    
+    chunk->base = str;
+    chunk->len = len;
+    if ((res = PyBuffer_FromObject((PyObject *)chunk, 0, len)) == NULL)
+        return NULL;
+
+    /* PyBuffer_FromObject() created a new reference. Release our reference so
+       that the memory can be freed once the buffer is garbage collected. */
+    Py_DECREF(chunk);
+
+    return res;
+}
diff --git a/psycopg2/psycopg/typecast_binary.h b/psycopg2/psycopg/typecast_binary.h
new file mode 100644 (file)
index 0000000..cf985bb
--- /dev/null
@@ -0,0 +1,47 @@
+/* typecast_binary.h - definitions for binary typecaster
+ *
+ * Copyright (C) 2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of psycopg.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PSYCOPG_TYPECAST_BINARY_H
+#define PSYCOPG_TYPECAST_BINARY_H 1
+
+#include <Python.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** chunk type **/
+
+extern PyTypeObject chunkType;
+
+typedef struct {
+    PyObject_HEAD
+
+    void *base;     /* Pointer to the memory chunk. */
+    int len;        /* Size in bytes of the memory chunk. */
+
+} chunkObject;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !defined(PSYCOPG_TYPECAST_BINARY_H) */
diff --git a/psycopg2/psycopg/typecast_builtins.c b/psycopg2/psycopg/typecast_builtins.c
new file mode 100644 (file)
index 0000000..0fc109d
--- /dev/null
@@ -0,0 +1,60 @@
+static long int typecast_NUMBER_types[] = {20, 23, 21, 701, 700, 1700, 0};
+static long int typecast_LONGINTEGER_types[] = {20, 0};
+static long int typecast_INTEGER_types[] = {23, 21, 0};
+static long int typecast_FLOAT_types[] = {701, 700, 0};
+static long int typecast_DECIMAL_types[] = {1700, 0};
+static long int typecast_UNICODE_types[] = {19, 18, 25, 1042, 1043, 0};
+static long int typecast_STRING_types[] = {19, 18, 25, 1042, 1043, 0};
+static long int typecast_BOOLEAN_types[] = {16, 0};
+static long int typecast_DATETIME_types[] = {1114, 1184, 704, 1186, 0};
+static long int typecast_TIME_types[] = {1083, 1266, 0};
+static long int typecast_DATE_types[] = {1082, 0};
+static long int typecast_INTERVAL_types[] = {704, 1186, 0};
+static long int typecast_BINARY_types[] = {17, 0};
+static long int typecast_ROWID_types[] = {26, 0};
+static long int typecast_LONGINTEGERARRAY_types[] = {1016, 0};
+static long int typecast_INTEGERARRAY_types[] = {1005, 1006, 1007, 0};
+static long int typecast_FLOATARRAY_types[] = {1017, 1021, 1022, 0};
+static long int typecast_DECIMALARRAY_types[] = {1231, 0};
+static long int typecast_UNICODEARRAY_types[] = {1002, 1003, 1009, 1014, 1015, 0};
+static long int typecast_STRINGARRAY_types[] = {1002, 1003, 1009, 1014, 1015, 0};
+static long int typecast_BOOLEANARRAY_types[] = {1000, 0};
+static long int typecast_DATETIMEARRAY_types[] = {1115, 1185, 0};
+static long int typecast_TIMEARRAY_types[] = {1183, 1270, 0};
+static long int typecast_DATEARRAY_types[] = {1182, 0};
+static long int typecast_INTERVALARRAY_types[] = {1187, 0};
+static long int typecast_BINARYARRAY_types[] = {1001, 0};
+static long int typecast_ROWIDARRAY_types[] = {1028, 1013, 0};
+
+
+typecastObject_initlist typecast_builtins[] = {
+  {"NUMBER", typecast_NUMBER_types, typecast_NUMBER_cast, NULL},
+  {"LONGINTEGER", typecast_LONGINTEGER_types, typecast_LONGINTEGER_cast, NULL},
+  {"INTEGER", typecast_INTEGER_types, typecast_INTEGER_cast, NULL},
+  {"FLOAT", typecast_FLOAT_types, typecast_FLOAT_cast, NULL},
+  {"DECIMAL", typecast_DECIMAL_types, typecast_DECIMAL_cast, NULL},
+  {"UNICODE", typecast_UNICODE_types, typecast_UNICODE_cast, NULL},
+  {"STRING", typecast_STRING_types, typecast_STRING_cast, NULL},
+  {"BOOLEAN", typecast_BOOLEAN_types, typecast_BOOLEAN_cast, NULL},
+  {"DATETIME", typecast_DATETIME_types, typecast_DATETIME_cast, NULL},
+  {"TIME", typecast_TIME_types, typecast_TIME_cast, NULL},
+  {"DATE", typecast_DATE_types, typecast_DATE_cast, NULL},
+  {"INTERVAL", typecast_INTERVAL_types, typecast_INTERVAL_cast, NULL},
+  {"BINARY", typecast_BINARY_types, typecast_BINARY_cast, NULL},
+  {"ROWID", typecast_ROWID_types, typecast_ROWID_cast, NULL},
+  {"LONGINTEGERARRAY", typecast_LONGINTEGERARRAY_types, typecast_LONGINTEGERARRAY_cast, "LONGINTEGER"},
+  {"INTEGERARRAY", typecast_INTEGERARRAY_types, typecast_INTEGERARRAY_cast, "INTEGER"},
+  {"FLOATARRAY", typecast_FLOATARRAY_types, typecast_FLOATARRAY_cast, "FLOAT"},
+  {"DECIMALARRAY", typecast_DECIMALARRAY_types, typecast_DECIMALARRAY_cast, "DECIMAL"},
+  {"UNICODEARRAY", typecast_UNICODEARRAY_types, typecast_UNICODEARRAY_cast, "UNICODE"},
+  {"STRINGARRAY", typecast_STRINGARRAY_types, typecast_STRINGARRAY_cast, "STRING"},
+  {"BOOLEANARRAY", typecast_BOOLEANARRAY_types, typecast_BOOLEANARRAY_cast, "BOOLEAN"},
+  {"DATETIMEARRAY", typecast_DATETIMEARRAY_types, typecast_DATETIMEARRAY_cast, "DATETIME"},
+  {"TIMEARRAY", typecast_TIMEARRAY_types, typecast_TIMEARRAY_cast, "TIME"},
+  {"DATEARRAY", typecast_DATEARRAY_types, typecast_DATEARRAY_cast, "DATE"},
+  {"INTERVALARRAY", typecast_INTERVALARRAY_types, typecast_INTERVALARRAY_cast, "INTERVAL"},
+  {"BINARYARRAY", typecast_BINARYARRAY_types, typecast_BINARYARRAY_cast, "BINARY"},
+  {"ROWIDARRAY", typecast_ROWIDARRAY_types, typecast_ROWIDARRAY_cast, "ROWID"},
+    {NULL, NULL, NULL, NULL}
+};
+
diff --git a/psycopg2/psycopg/typecast_datetime.c b/psycopg2/psycopg/typecast_datetime.c
new file mode 100644 (file)
index 0000000..3a09f07
--- /dev/null
@@ -0,0 +1,279 @@
+/* typecast_datetime.c - date and time typecasting functions to python types
+ *
+ * Copyright (C) 2001-2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of the psycopg module.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <math.h>
+#include "datetime.h"
+
+
+/* the pointer to the datetime module API is initialized by the module init
+   code, we just need to grab it */
+extern PyObject* pyDateTimeModuleP;
+extern PyObject *pyDateTypeP;
+extern PyObject *pyTimeTypeP;
+extern PyObject *pyDateTimeTypeP;
+extern PyObject *pyDeltaTypeP;
+
+/** DATE - cast a date into a date python object **/
+
+static PyObject *
+typecast_PYDATE_cast(char *str, int len, PyObject *curs)
+{
+    PyObject* obj = NULL;
+    int n, y=0, m=0, d=0;
+     
+    if (str == NULL) {Py_INCREF(Py_None); return Py_None;}
+    
+    if (!strcmp(str, "infinity") || !strcmp(str, "-infinity")) {
+        if (str[0] == '-') {
+            obj = PyObject_GetAttrString(pyDateTypeP, "min");
+        }
+        else {
+            obj = PyObject_GetAttrString(pyDateTypeP, "max");
+        }
+    }
+
+    else {
+        n = typecast_parse_date(str, NULL, &len, &y, &m, &d);
+        Dprintf("typecast_PYDATE_cast: "
+                "n = %d, len = %d, y = %d, m = %d, d = %d",
+                 n, len, y, m, d);
+        if (n != 3) {
+            PyErr_SetString(DataError, "unable to parse date");
+        }
+        else {
+            obj = PyObject_CallFunction(pyDateTypeP, "iii", y, m, d);
+        }
+    }
+    return obj;
+}
+
+/** DATETIME - cast a timestamp into a datetime python object **/
+
+static PyObject *
+typecast_PYDATETIME_cast(char *str, int len, PyObject *curs)
+{
+    PyObject* obj = NULL;
+    int n, y=0, m=0, d=0;
+    int hh=0, mm=0, ss=0, us=0, tz=0;
+    char *tp = NULL;
+    
+    if (str == NULL) {Py_INCREF(Py_None); return Py_None;}
+    
+    /* check for infinity */
+    if (!strcmp(str, "infinity") || !strcmp(str, "-infinity")) {
+        if (str[0] == '-') {
+            obj = PyObject_GetAttrString(pyDateTimeTypeP, "min");
+        }
+        else {
+            obj = PyObject_GetAttrString(pyDateTimeTypeP, "max");
+        }
+    }
+
+    else {
+        Dprintf("typecast_PYDATETIME_cast: s = %s", str);
+        n = typecast_parse_date(str, &tp, &len, &y, &m, &d);
+        Dprintf("typecast_PYDATE_cast: tp = %p "
+                "n = %d, len = %d, y = %d, m = %d, d = %d",
+                 tp, n, len, y, m, d);        
+        if (n != 3) {
+            PyErr_SetString(DataError, "unable to parse date");
+        }
+        
+        if (len > 0) {
+            n = typecast_parse_time(tp, NULL, &len, &hh, &mm, &ss, &us, &tz);
+            Dprintf("typecast_PYDATETIME_cast: n = %d, len = %d, "
+                "hh = %d, mm = %d, ss = %d, us = %d, tz = %d",
+                n, len, hh, mm, ss, us, tz);
+            if (n < 3 || n > 5) {
+                PyErr_SetString(DataError, "unable to parse time");
+            }
+        }
+        
+        if (ss > 59) {
+            mm += 1;
+            ss -= 60;
+        }
+        
+        if (n == 5 && ((cursorObject*)curs)->tzinfo_factory != Py_None) {
+            /* we have a time zone, calculate minutes and create
+               appropriate tzinfo object calling the factory */
+            PyObject *tzinfo;
+            Dprintf("typecast_PYDATETIME_cast: UTC offset = %dm", tz);
+            tzinfo = PyObject_CallFunction(
+                ((cursorObject*)curs)->tzinfo_factory, "i", tz);
+            obj = PyObject_CallFunction(pyDateTimeTypeP, "iiiiiiiO",
+                 y, m, d, hh, mm, ss, us, tzinfo);
+            Dprintf("typecast_PYDATETIME_cast: tzinfo: %p, refcnt = %d",
+                    tzinfo, tzinfo->ob_refcnt);
+            Py_XDECREF(tzinfo);
+        }
+        else {
+            obj = PyObject_CallFunction(pyDateTimeTypeP, "iiiiiii",
+                 y, m, d, hh, mm, ss, us);
+        }
+    }
+    return obj;
+}
+
+/** TIME - parse time into a time object **/
+
+static PyObject *
+typecast_PYTIME_cast(char *str, int len, PyObject *curs)
+{
+    PyObject* obj = NULL;
+    int n, hh=0, mm=0, ss=0, us=0, tz=0;
+    
+    if (str == NULL) {Py_INCREF(Py_None); return Py_None;}
+        
+    n = typecast_parse_time(str, NULL, &len, &hh, &mm, &ss, &us, &tz);
+    Dprintf("typecast_PYTIME_cast: n = %d, len = %d, "
+            "hh = %d, mm = %d, ss = %d, us = %d, tz = %d",
+            n, len, hh, mm, ss, us, tz);
+                
+    if (n < 3 || n > 5) {
+        PyErr_SetString(DataError, "unable to parse time");
+    }
+    else {
+        if (ss > 59) {
+            mm += 1;
+            ss -= 60;
+        }
+        obj = PyObject_CallFunction(pyTimeTypeP, "iiii", hh, mm, ss, us);
+    }
+    return obj;          
+}
+
+/** INTERVAL - parse an interval into a timedelta object **/
+
+static PyObject *
+typecast_PYINTERVAL_cast(char *str, int len, PyObject *curs)
+{
+    long years = 0, months = 0, days = 0;
+    double hours = 0.0, minutes = 0.0, seconds = 0.0, hundredths = 0.0;
+    double v = 0.0, sign = 1.0, denominator = 1.0;
+    int part = 0, sec;
+    double micro;
+
+    if (str == NULL) {Py_INCREF(Py_None); return Py_None;}
+
+    Dprintf("typecast_PYINTERVAL_cast: s = %s", str);
+    
+    while (len-- > 0 && *str) {
+        switch (*str) {
+
+        case '-':
+            sign = -1.0;
+            break;
+
+        case '0': case '1': case '2': case '3': case '4':
+        case '5': case '6': case '7': case '8': case '9':
+            v = v*10 + (double)*str - (double)'0';
+            if (part == 6){
+                denominator *= 10;
+            }
+            break;
+
+        case 'y':
+            if (part == 0) {
+                years = (long)(v*sign);
+                str = skip_until_space2(str, &len);
+                v = 0.0; sign = 1.0; part = 1;
+            }
+            break;
+
+        case 'm':
+            if (part <= 1) {
+                months = (long)(v*sign);
+                str = skip_until_space2(str, &len);
+                v = 0.0; sign = 1.0; part = 2;
+            }
+            break;
+
+        case 'd':
+            if (part <= 2) {
+                days = (long)(v*sign);
+                str = skip_until_space2(str, &len);
+                v = 0.0; sign = 1.0; part = 3;
+            }
+            break;
+
+        case ':':
+            if (part <= 3) {
+                hours = v;
+                v = 0.0; part = 4;
+            }
+            else if (part == 4) {
+                minutes = v;
+                v = 0.0; part = 5;
+            }
+            break;
+
+        case '.':
+            if (part == 5) {
+                seconds = v;
+                v = 0.0; part = 6;
+            }
+            break;   
+
+        default:
+            break;
+        }
+        
+        str++;
+    }
+
+    /* manage last value, be it minutes or seconds or hundredths of a second */
+    if (part == 4) {
+        minutes = v;
+    }
+    else if (part == 5) {
+        seconds = v;
+    }
+    else if (part == 6) {
+        hundredths = v;
+        hundredths = hundredths/denominator;
+    }
+    
+    /* calculates seconds */
+    if (sign < 0.0) {
+        seconds = - (hundredths + seconds + minutes*60 + hours*3600);
+    }
+    else {
+        seconds += hundredths + minutes*60 + hours*3600;
+    }
+
+    /* calculates days */ 
+    days += years*365 + months*30;
+
+    micro = (seconds - floor(seconds)) * 1000000.0;
+    sec = (int)floor(seconds);
+    return PyObject_CallFunction(pyDeltaTypeP, "iii",
+                                 days, sec, (int)round(micro));
+}
+
+/* psycopg defaults to using python datetime types */
+
+#ifdef PSYCOPG_DEFAULT_PYDATETIME 
+#define typecast_DATE_cast typecast_PYDATE_cast
+#define typecast_TIME_cast typecast_PYTIME_cast
+#define typecast_INTERVAL_cast typecast_PYINTERVAL_cast
+#define typecast_DATETIME_cast typecast_PYDATETIME_cast
+#endif
diff --git a/psycopg2/psycopg/typecast_mxdatetime.c b/psycopg2/psycopg/typecast_mxdatetime.c
new file mode 100644 (file)
index 0000000..52b1ce7
--- /dev/null
@@ -0,0 +1,231 @@
+/* typecast_mxdatetime.c - date and time typecasting functions to mx types
+ *
+ * Copyright (C) 2001-2003 Federico Di Gregorio <fog@debian.org>
+ *
+ * This file is part of the psycopg module.
+ *
+ * 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
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "mxDateTime.h"
+
+/* the pointer to the mxDateTime API is initialized by the module init code,
+   we just need to grab it */
+extern mxDateTimeModule_APIObject *mxDateTimeP;
+
+/** DATE - cast a date into mx.DateTime python object **/
+
+static PyObject *
+typecast_MXDATE_cast(char *str, int len, PyObject *curs)
+{
+    int n, y=0, m=0, d=0;
+    int hh=0, mm=0, ss=0, us=0, tz=0;
+    char *tp = NULL;
+    
+    if (str == NULL) {Py_INCREF(Py_None); return Py_None;}
+    Dprintf("typecast_MXDATE_cast: s = %s", str);
+    
+    /* check for infinity */
+    if (!strcmp(str, "infinity") || !strcmp(str, "-infinity")) {
+        if (str[0] == '-') {
+            return mxDateTimeP->DateTime_FromDateAndTime(-999998,1,1, 0,0,0);
+        }
+        else {
+            return mxDateTimeP->DateTime_FromDateAndTime(999999,12,31, 0,0,0);
+        }
+    }
+    
+    n = typecast_parse_date(str, &tp, &len, &y, &m, &d);
+    Dprintf("typecast_MXDATE_cast: tp = %p n = %d, len = %d, "
+             "y = %d, m = %d, d = %d", tp, n, len, y, m, d);        
+    if (n != 3) {
+        PyErr_SetString(DataError, "unable to parse date");
+    }
+    
+    if (len > 0) {
+        n = typecast_parse_time(tp, NULL, &len, &hh, &mm, &ss, &us, &tz);
+        Dprintf("typecast_MXDATE_cast: n = %d, len = %d, "
+            "hh = %d, mm = %d, ss = %d, us = %d, tz = %d",
+            n, len, hh, mm, ss, us, tz);
+        if (n < 3 || n > 5) {
+            PyErr_SetString(DataError, "unable to parse time");
+        }
+    }    
+    
+    Dprintf("typecast_MXDATE_cast: fractionary seconds: %lf",
+        (double)ss + (double)us/(double)1000000.0);
+    return mxDateTimeP->DateTime_FromDateAndTime(y, m, d, hh, mm,
+        (double)ss + (double)us/(double)1000000.0);
+}
+
+/** TIME - parse time into an mx.DateTime object **/
+
+static PyObject *
+typecast_MXTIME_cast(char *str, int len, PyObject *curs)
+{
+    int n, hh=0, mm=0, ss=0, us=0, tz=0;
+
+    if (str == NULL) {Py_INCREF(Py_None); return Py_None;}
+    
+    Dprintf("typecast_MXTIME_cast: s = %s", str);
+    
+    n = typecast_parse_time(str, NULL, &len, &hh, &mm, &ss, &us, &tz);
+    Dprintf("typecast_MXTIME_cast: time parsed, %d components", n);
+    Dprintf("typecast_MXTIME_cast: hh = %d, mm = %d, ss = %d, us = %d",
+             hh, mm, ss, us);
+    
+    if (n < 3 || n > 5) {
+        PyErr_SetString(DataError, "unable to parse time");
+        return NULL;
+    }
+
+    Dprintf("typecast_MXTIME_cast: fractionary seconds: %lf",
+        (double)ss + (double)us/(double)1000000.0);
+    return mxDateTimeP->DateTimeDelta_FromTime(hh, mm,
+        (double)ss + (double)us/(double)1000000.0);
+}
+
+/** INTERVAL - parse an interval into an mx.DateTimeDelta **/
+
+static PyObject *
+typecast_MXINTERVAL_cast(char *str, int len, PyObject *curs)
+{
+    long years = 0, months = 0, days = 0, denominator = 1;
+    double hours = 0.0, minutes = 0.0, seconds = 0.0, hundredths = 0.0;
+    double v = 0.0, sign = 1.0;
+    int part = 0;
+
+    if (str == NULL) {Py_INCREF(Py_None); return Py_None;}
+    
+    Dprintf("typecast_MXINTERVAL_cast: s = %s", str);
+    
+    while (*str) {
+        switch (*str) {
+
+        case '-':
+            sign = -1.0;
+            break;
+
+        case '0': case '1': case '2': case '3': case '4':
+        case '5': case '6': case '7': case '8': case '9':
+            v = v*10 + (double)*str - (double)'0';
+            Dprintf("typecast_MXINTERVAL_cast: v = %f", v);
+            if (part == 6){
+                denominator *= 10;
+                Dprintf("typecast_MXINTERVAL_cast: denominator = %ld",
+                        denominator);
+            }
+            break;
+
+        case 'y':
+            if (part == 0) {
+                years = (long)(v*sign);
+                str = skip_until_space(str);
+                Dprintf("typecast_MXINTERVAL_cast: years = %ld, rest = %s",
+                        years, str);
+                v = 0.0; sign = 1.0; part = 1;
+            }
+            break;
+
+        case 'm':
+            if (part <= 1) {
+                months = (long)(v*sign);
+                str = skip_until_space(str);
+                Dprintf("typecast_MXINTERVAL_cast: months = %ld, rest = %s",
+                        months, str);
+                v = 0.0; sign = 1.0; part = 2;
+            }
+            break;
+
+        case 'd':
+            if (part <= 2) {
+                days = (long)(v*sign);
+                str = skip_until_space(str);
+                Dprintf("typecast_MXINTERVAL_cast: days = %ld, rest = %s",
+                        days, str);
+                v = 0.0; sign = 1.0; part = 3;
+            }
+            break;
+
+        case ':':
+            if (part <= 3) {
+                hours = v;
+                Dprintf("typecast_MXINTERVAL_cast: hours = %f", hours);
+                v = 0.0; part = 4;
+            }
+            else if (part == 4) {
+                minutes = v;
+                Dprintf("typecast_MXINTERVAL_cast: minutes = %f", minutes);
+                v = 0.0; part = 5;
+            }
+            break;
+
+        case '.':
+            if (part == 5) {
+                seconds = v;
+                Dprintf("typecast_MXINTERVAL_cast: seconds = %f", seconds);
+                v = 0.0; part = 6;
+            }
+            break;   
+
+        default:
+            break;
+        }
+        
+        str++;
+    }
+
+    /* manage last value, be it minutes or seconds or hundredths of a second */
+    if (part == 4) {
+        minutes = v;
+        Dprintf("typecast_MXINTERVAL_cast: minutes = %f", minutes);
+    }
+    else if (part == 5) {
+        seconds = v;
+        Dprintf("typecast_MXINTERVAL_cast: seconds = %f", seconds);
+    }
+    else if (part == 6) {
+        hundredths = v;
+        Dprintf("typecast_MXINTERVAL_cast: hundredths = %f", hundredths);
+        hundredths = hundredths/denominator;
+        Dprintf("typecast_MXINTERVAL_cast: fractions = %.20f", hundredths);
+    }
+    
+    /* calculates seconds */
+    if (sign < 0.0) {
+        seconds = - (hundredths + seconds + minutes*60 + hours*3600);
+    }
+    else {
+        seconds += hundredths + minutes*60 + hours*3600;
+    }
+
+    /* calculates days */
+    days += years*365 + months*30;
+    
+    Dprintf("typecast_MXINTERVAL_cast: days = %ld, seconds = %f",
+            days, seconds);
+    return mxDateTimeP->DateTimeDelta_FromDaysAndSeconds(days, seconds);
+}
+
+/* psycopg defaults to using mx types */
+
+#ifdef PSYCOPG_DEFAULT_MXDATETIME 
+#define typecast_DATE_cast typecast_MXDATE_cast
+#define typecast_TIME_cast typecast_MXTIME_cast
+#define typecast_INTERVAL_cast typecast_MXINTERVAL_cast
+#define typecast_DATETIME_cast typecast_MXDATE_cast
+#endif
+
diff --git a/psycopg2/scripts/buildtypes.py b/psycopg2/scripts/buildtypes.py
new file mode 100644 (file)
index 0000000..197272f
--- /dev/null
@@ -0,0 +1,124 @@
+# -*- python -*-
+#
+# Copyright (C) 2001-2003 Federico Di Gregorio <fog@debian.org>
+#
+# This file is part of the psycopg module.
+#
+# 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
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# this a little script that analyze a file with (TYPE, NUMBER) tuples
+# and write out C code ready for inclusion in psycopg. the generated
+# code defines the DBAPITypeObject fundamental types and warns for
+# undefined types.
+
+import sys, os, string, copy
+from string import split, join, strip
+
+
+# here is the list of the foundamental types we want to import from
+# postgresql header files
+
+basic_types = (['NUMBER', ['INT8', 'INT4', 'INT2', 'FLOAT8', 'FLOAT4',
+                           'NUMERIC']],
+               ['LONGINTEGER', ['INT8']],
+               ['INTEGER', ['INT4', 'INT2']],
+               ['FLOAT', ['FLOAT8', 'FLOAT4']],
+               ['DECIMAL', ['NUMERIC']],
+               ['UNICODE', ['NAME', 'CHAR', 'TEXT', 'BPCHAR',
+                            'VARCHAR']],
+               ['STRING', ['NAME', 'CHAR', 'TEXT', 'BPCHAR',
+                           'VARCHAR']],
+               ['BOOLEAN', ['BOOL']],
+               ['DATETIME', ['TIMESTAMP', 'TIMESTAMPTZ', 
+                             'TINTERVAL', 'INTERVAL']],
+               ['TIME', ['TIME', 'TIMETZ']],
+               ['DATE', ['DATE']],
+               ['INTERVAL', ['TINTERVAL', 'INTERVAL']],
+               ['BINARY', ['BYTEA']],
+               ['ROWID', ['OID']])
+
+# unfortunately we don't have a nice way to extract array information
+# from postgresql headers; we'll have to do it hard-coding :/
+array_types = (['LONGINTEGER', [1016]],
+               ['INTEGER', [1005, 1006, 1007]],
+               ['FLOAT', [1017, 1021, 1022]],
+               ['DECIMAL', [1231]],
+               ['UNICODE', [1002, 1003, 1009, 1014, 1015]],
+               ['STRING', [1002, 1003, 1009, 1014, 1015]],
+               ['BOOLEAN', [1000]],
+               ['DATETIME', [1115, 1185]],
+               ['TIME', [1183, 1270]],
+               ['DATE', [1182]],
+               ['INTERVAL', [1187]],
+               ['BINARY', [1001]],
+               ['ROWID', [1028, 1013]])
+
+# this is the header used to compile the data in the C module
+HEADER = """
+typecastObject_initlist typecast_builtins[] = {
+"""
+
+# then comes the footer
+FOOTER = """    {NULL, NULL, NULL, NULL}\n};\n"""
+
+
+# usefull error reporting function
+def error(msg):
+    """Report an error on stderr."""
+    sys.stderr.write(msg+'\n')
+    
+
+# read couples from stdin and build list
+read_types = []
+for l in sys.stdin.readlines():
+    oid, val = split(l)
+    read_types.append((strip(oid)[:-3], strip(val)))
+
+# look for the wanted types in the read touples
+found_types = {}
+
+for t in basic_types:
+    k = t[0]
+    found_types[k] = []
+    for v in t[1]:
+        found = filter(lambda x, y=v: x[0] == y, read_types)
+        if len(found) == 0:
+            error(v+': value not found')
+        elif len(found) > 1:
+            error(v+': too many values')
+        else:
+            found_types[k].append(int(found[0][1]))
+
+# now outputs to stdout the right C-style definitions
+stypes = "" ; sstruct = ""
+for t in basic_types:
+    k = t[0]
+    s = str(found_types[k])
+    s = '{' + s[1:-1] + ', 0}'
+    stypes = stypes + ('static long int typecast_%s_types[] = %s;\n' % (k, s))
+    sstruct += ('  {"%s", typecast_%s_types, typecast_%s_cast, NULL},\n'
+                % (k, k, k))
+for t in array_types:
+    kt = t[0]
+    ka = t[0]+'ARRAY'
+    s = str(t[1])
+    s = '{' + s[1:-1] + ', 0}'
+    stypes = stypes + ('static long int typecast_%s_types[] = %s;\n' % (ka, s))
+    sstruct += ('  {"%s", typecast_%s_types, typecast_%s_cast, "%s"},\n'
+                % (ka, ka, ka, kt))
+sstruct = HEADER + sstruct + FOOTER
+
+print stypes
+print sstruct
diff --git a/psycopg2/scripts/ext2html.py b/psycopg2/scripts/ext2html.py
new file mode 100755 (executable)
index 0000000..f7c95d8
--- /dev/null
@@ -0,0 +1,169 @@
+#!/usr/bin/env python\r
+\r
+# Author: Daniele Varrazzo\r
+# Contact: daniele dot varrazzo at gmail dot com\r
+# Revision: $Revision: 711 $\r
+# Date: $Date$\r
+# Copyright: This module has been placed in the public domain.\r
+\r
+"""\r
+A minimal front end to the Docutils Publisher, producing HTML.\r
+\r
+Output can refer to Epydoc-generated APIs through the iterpreted text role\r
+"api".\r
+"""\r
+\r
+import types\r
+import sys\r
+\r
+# The url fragment where the api "index.html" resides w.r.t. the generated docs\r
+api_root = "api/"\r
+\r
+try:\r
+    import locale\r
+    locale.setlocale(locale.LC_ALL, '')\r
+except:\r
+    pass\r
+\r
+from docutils.core import publish_cmdline, default_description\r
+from docutils.parsers.rst.roles import register_canonical_role\r
+from docutils import nodes, utils\r
+\r
+# api references are searched for in these modules\r
+api_modules = [\r
+    'psycopg2',\r
+    'psycopg2._psycopg',\r
+    'psycopg2.extensions',\r
+]\r
+\r
+# name starting with a dot are looking as those objects attributes.
+searched_objects = [
+    # module_name, object_name
+    ('psycopg2.extensions', 'connection'),
+    ('psycopg2.extensions', 'cursor'),
+]
+
+# import all the referenced modules\r
+for modname in api_modules:\r
+    __import__(modname)\r
+    \r
+class EpydocTarget:
+    """Representation of an element language."""\r
+    def __init__(self, name, element):\r
+        self.name = name\r
+        \r
+        # The python object described\r
+        self.element = element\r
+    \r
+        # The base name of the page\r
+        self.page = None\r
+        \r
+        # The url fragment\r
+        self.fragment = None\r
+        \r
+    def get_url(self):\r
+        # is it a private element?\r
+        components = self.page.split('.')\r
+        if self.fragment: components.append(self.fragment)\r
+            \r
+        for component in components:\r
+            if component.startswith('_'):\r
+                private = True\r
+                break\r
+        else:\r
+            private = False\r
+            \r
+        ref = api_root + (private and "private/" or "public/") \\r
+            + self.page + "-" + self.get_type() + ".html"\r
+        if self.fragment:\r
+            ref = ref + "#" + self.fragment\r
+        \r
+        return ref\r
+\r
+    def get_type(self):\r
+        # detect the element type\r
+        if isinstance(self.element, types.TypeType):\r
+            return 'class'\r
+        elif isinstance(self.element, types.ModuleType):\r
+            return 'module'\r
+        else:\r
+            raise ValueError("Can't choose a type for '%s'." % self.name)\r
+            \r
+def filter_par(name):\r
+    """Filter parenthesis away from a name."""\r
+    if name.endswith(")"):\r
+        return name.split("(")[0]\r
+    else:\r
+        return name\r
+        \r
+def get_element_target(name):\r
+    """Return the life, the death, the miracles about a package element."""\r
+    \r
+    name = filter_par(name)\r
+    
+    if name.startswith('.'):
+        for modname, objname in searched_objects:
+            if hasattr(getattr(sys.modules[modname], objname), name[1:]):
+                name = objname + name
+                break
+        \r
+    # is the element a module?\r
+    if name in api_modules:\r
+        out = EpydocTarget(name, sys.modules[name])\r
+        out.page = name\r
+        return out\r
+        \r
+    # look for the element in some module\r
+    for modname in api_modules:\r
+        element = getattr(sys.modules[modname], name, None)\r
+        if element is not None:\r
+            \r
+            # Check if it is a function defined in a module\r
+            if isinstance(element, \r
+                    (int, types.FunctionType, types.BuiltinFunctionType)):\r
+                out = EpydocTarget(name, sys.modules[modname])\r
+                out.page = modname\r
+                out.fragment = name\r
+            else:\r
+                out = EpydocTarget(name, element)\r
+                out.page = modname + '.' + name\r
+                \r
+            return out\r
+    \r
+    # maybe a qualified name?\r
+    if '.' in name:\r
+        out = get_element_target('.'.join(name.split('.')[:-1]))\r
+        if out is not None:\r
+            out.fragment = filter_par(name.split('.')[-1])\r
+            return out\r
+                \r
+    raise ValueError("Can't find '%s' in any provided module." % name)\r
+    \r
+def api_role(role, rawtext, text, lineno, inliner,
+                       options={}, content=[]):\r
+    try:\r
+        target = get_element_target(text)\r
+    except Exception, exc:\r
+        msg = inliner.reporter.error(str(exc), line=lineno)
+        prb = inliner.problematic(rawtext, rawtext, msg)
+        return [prb], [msg]
+        \r
+    ref = target.get_url()\r
+    node2 = nodes.literal(rawtext, utils.unescape(text))
+    node = nodes.reference(rawtext, '', node2, refuri=ref,\r
+                           **options)\r
+    return [node], []
+\r
+
+register_canonical_role('api', api_role)
+\r
+# Register the 'api' role as canonical role
+from docutils.parsers.rst import roles 
+roles.DEFAULT_INTERPRETED_ROLE = 'api'
+\r
+
+description = ('Generates (X)HTML documents from standalone reStructuredText '\r
+               'sources with links to Epydoc API.  ' + default_description)\r
+\r
+
+publish_cmdline(writer_name='html', description=description)\r
diff --git a/psycopg2/scripts/makedocs.py b/psycopg2/scripts/makedocs.py
new file mode 100755 (executable)
index 0000000..dcaa940
--- /dev/null
@@ -0,0 +1,15 @@
+#!/usr/bin/env python\r
+"""Build documentation and api."""\r
+\r
+import os\r
+\r
+EPYDOC = "python c:/programmi/python23/scripts/epydoc.py"\r
+PSYCOPG = "c:/programmi/python23/lib/site-packages/psycopg2"\r
+\r
+os.system("python ext2html.py ../doc/extensions.rst > ../doc/extensions.html")\r
+os.system("%s "\r
+          "-o ../doc/api "\r
+          "--css ../doc/api-screen.css "\r
+          "--docformat restructuredtext " \r
+          "%s"\r
+    % (EPYDOC,PSYCOPG,))\r
diff --git a/psycopg2/scripts/maketypes.sh b/psycopg2/scripts/maketypes.sh
new file mode 100755 (executable)
index 0000000..ab133c1
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+SCRIPTSDIR="`dirname $0`"
+SRCDIR="`dirname $SCRIPTSDIR`/psycopg"
+
+if [ -z "$1" ] ; then
+    echo Usage: $0 '<postgresql include directory>'
+    exit 1
+fi
+
+echo -n checking for pg_type.h ...
+if [ -f "$1/catalog/pg_type.h" ] ; then
+    PGTYPE="$1/catalog/pg_type.h"
+else
+    if [ -f "$1/server/catalog/pg_type.h" ] ; then
+        PGTYPE="$1/server/catalog/pg_type.h"
+    else
+       echo
+        echo "error: can't find pg_type.h under $1"
+       exit 2
+    fi
+fi
+echo " found"
+
+PGVERSION="`sed -n -e 's/.*PG_VERSION \"\([0-9]\.[0-9]\).*\"/\1/p' $1/pg_config.h`"
+PGMAJOR="`echo $PGVERSION | cut -d. -f1`"
+PGMINOR="`echo $PGVERSION | cut -d. -f2`"
+
+echo checking for postgresql major: $PGMAJOR
+echo checking for postgresql minor: $PGMINOR
+    
+echo -n generating pgtypes.h ...
+awk '/#define .+OID/ {print "#define " $2 " " $3}' "$PGTYPE" \
+    > $SRCDIR/pgtypes.h
+echo " done"
+echo -n generating typecast_builtins.c ...
+awk '/#define .+OID/ {print $2 " " $3}' "$PGTYPE" | \
+    python $SCRIPTSDIR/buildtypes.py >$SRCDIR/typecast_builtins.c
+echo " done"
+
+
diff --git a/psycopg2/setup.cfg b/psycopg2/setup.cfg
new file mode 100644 (file)
index 0000000..9c32951
--- /dev/null
@@ -0,0 +1,46 @@
+[build_ext]
+define=PSYCOPG_EXTENSIONS,PSYCOPG_DISPLAY_SIZE,PSYCOPG_NEW_BOOLEAN,HAVE_PQFREEMEM,HAVE_PQPROTOCOL3
+# PSYCOPG_EXTENSIONS enables extensions to PEP-249 (you really want this)
+# PSYCOPG_DISPLAY_SIZE enable display size calculation (a little slower)
+# HAVE_PQFREEMEM should be defined on PostgreSQL >= 7.3
+# HAVE_PQPROTOCOL3 should be defined on PostgreSQL >= 7.4
+# PSYCOPG_DEBUG can be added to enable verbose debug information
+# PSYCOPG_OWN_QUOTING can be added, but it is deprecated (will go away in 2.1)
+# PSYCOPG_NEW_BOOLEAN to format booleans as true/false vs 't'/'f'
+
+# Set to 1 to use Python datatime objects for default date/time representation
+use_pydatetime=1
+
+# Set to 1 if you want to enable "Decimal" type on python 2.3. 
+# If the "decimal" module is found in the PYTHONPATH it will be used, else
+# fall back on the float type (this is disabled by default to be compatible
+# with old versions of psycopg 1 and pre-beta versions of psycopg 2.)
+use_decimal=0
+
+# If the build system does not find the mx.DateTime headers, try 
+# uncommenting the following line and setting its value to the right path.
+#mx_include_dir=
+
+# "pg_config" is the preferred method to locate PostgreSQL headers and
+# libraries needed to build psycopg2. If pg_config is not in the path or
+# is installed under a different name uncomment the following option and
+# set it to the pg_config full path.
+#pg_config=
+
+# If "pg_config" is not available, "include_dirs" can be used to locate 
+# postgresql headers and libraries. Some extra checks on sys.platform will
+# still be done in setup.py.
+# The next line is the default as used on psycopg author Debian laptop:
+#include_dirs=/usr/include/postgresql:/usr/include/postgresql/server
+
+# Uncomment next line on Mandrake 10.x (and comment previous ones):
+#include_dirs=/usr/include/pgsql/8.0:/usr/include/pgsql/8.0/server 
+
+# Uncomment next line on SUSE 9.3 (and comment previous ones):
+#include_dirs=/usr/include/pgsql:/usr/include/pgsql/server
+
+# If postgresql is installed somewhere weird (i.e., not in your runtime library
+# path like /usr/lib), just add the right path in "library_dirs" and any extra
+# libraries required to link in "libraries".
+#library_dirs=
+#libraries=
diff --git a/psycopg2/setup.py b/psycopg2/setup.py
new file mode 100644 (file)
index 0000000..45daed7
--- /dev/null
@@ -0,0 +1,293 @@
+# setup.py - distutils packaging
+#
+# 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.
+
+"""Python-PostgreSQL Database Adapter
+psycopg is a PostgreSQL database adapter for the Python programming
+language. This is version 2, a complete rewrite of the original code to
+provide new-style classes for connection and cursor objects and other sweet
+candies. Like the original, psycopg 2 was written with the aim of being
+very small and fast, and stable as a rock.
+psycopg is different from the other database adapter because it was
+designed for heavily multi-threaded applications that create and destroy
+lots of cursors and make a conspicuous number of concurrent INSERTs or
+UPDATEs. psycopg 2 also provide full asycronous operations for the really
+brave programmer.
+"""
+
+classifiers = """\
+Development Status :: 4 - Beta
+Intended Audience :: Developers
+License :: OSI Approved :: GNU General Public License (GPL)
+License :: OSI Approved :: Zope Public License
+Programming Language :: Python
+Programming Language :: C
+Programming Language :: SQL
+Topic :: Database
+Topic :: Database :: Front-Ends
+Topic :: Software Development
+Topic :: Software Development :: Libraries :: Python Modules
+Operating System :: Microsoft :: Windows
+Operating System :: Unix
+"""
+
+import os
+import sys
+import popen2
+from distutils.core import setup, Extension
+from distutils.errors import DistutilsFileError
+from distutils.command.build_ext import build_ext
+from distutils.sysconfig import get_python_inc
+from distutils.ccompiler import get_default_compiler
+
+PSYCOPG_VERSION = '2.0.5.1'
+version_flags   = []
+
+# to work around older distutil limitations
+if sys.version < '2.2.3':
+    from distutils.dist import DistributionMetadata
+    DistributionMetadata.classifiers = None
+    DistributionMetadata.download_url = None
+
+def get_pg_config(kind, pg_config="pg_config"):
+    p = popen2.popen3(pg_config + " --" + kind)
+    r = p[0].readline().strip()
+    if not r:
+        raise Warning(p[2].readline())
+    return r
+    
+class psycopg_build_ext(build_ext):
+    """Conditionally complement the setup.cfg options file.
+    
+    This class configures the include_dirs, libray_dirs, libraries
+    options as required by the system. Most of the configuration happens
+    in finalize_options() method.
+    
+    If you want to set up the build step for a peculiar platform, add a
+    method finalize_PLAT(), where PLAT matches your sys.platform.
+    """
+    user_options = build_ext.user_options[:]
+    user_options.extend([
+        ('use-pydatetime', None,
+         "Use Python datatime objects for date and time representation."),    
+        ('pg-config=', None,
+          "The name of the pg_config binary and/or full path to find it"),
+        ('use-decimal', None,
+         "Use Decimal type even on Python 2.3 if the module is provided."),
+    ])
+    
+    boolean_options = build_ext.boolean_options[:]
+    boolean_options.extend(('use-pydatetime', 'use-decimal'))
+    
+    DEFAULT_PG_CONFIG = "pg_config"
+    
+    def initialize_options(self):
+        build_ext.initialize_options(self)
+        self.use_pg_dll = 1
+        self.pgdir = None
+        self.pg_config = self.DEFAULT_PG_CONFIG
+        self.mx_include_dir = None
+    
+    def get_compiler(self):
+        """Return the c compiler to compile extensions.
+
+        If a compiler was not explicitely set (on the command line, for
+        example), fall back on the default compiler.
+        """
+        return self.compiler or get_default_compiler()
+
+    def get_pg_config(self, kind):
+        return get_pg_config(kind, self.pg_config)
+
+    def build_extensions(self):
+        # Linking against this library causes psycopg2 to crash 
+        # on Python >= 2.4. Maybe related to strdup calls, cfr.
+        # http://mail.python.org/pipermail/distutils-sig/2005-April/004433.html
+        if self.get_compiler().compiler_type == "mingw32" \
+            and 'msvcr71' in self.compiler.dll_libraries:
+            self.compiler.dll_libraries.remove('msvcr71')
+
+        build_ext.build_extensions(self)
+        
+    def finalize_win32(self):
+        """Finalize build system configuration on win32 platform."""
+        self.libraries.append("ws2_32")
+        self.libraries.append("advapi32")
+        if self.get_compiler() == "msvc":
+            # MSVC requires an explicit "libpq"
+            self.libraries.remove("pq")
+            self.libraries.append("libpq")
+            self.libraries.append("shfolder")
+            for path in self.library_dirs: 
+                if os.path.isfile(os.path.join(path, "ms", "libpq.lib")): 
+                    self.library_dirs.append(os.path.join(path, "ms")) 
+                    break
+    def finalize_darwin(self):
+        """Finalize build system configuration on darwin platform."""
+        self.libraries.append('ssl')
+        self.libraries.append('crypto')
+        
+    def finalize_options(self):
+        """Complete the build system configuation."""
+        build_ext.finalize_options(self)
+
+        self.include_dirs.append(".")        
+        self.libraries.append("pq")
+        
+        try:
+            self.library_dirs.append(self.get_pg_config("libdir"))
+            self.include_dirs.append(self.get_pg_config("includedir"))
+            self.include_dirs.append(self.get_pg_config("includedir-server"))
+            try:
+                # Here we take a conservative approach: we suppose that
+                # *at least* PostgreSQL 7.4 is available (this is the only
+                # 7.x series supported by psycopg 2)
+                pgversion = self.get_pg_config("version").split()[1]
+                pgmajor, pgminor, pgpatch = pgversion.split('.')
+            except:
+                pgmajor, pgminor, pgpatch = 7, 4, 0
+            define_macros.append(("PG_MAJOR_VERSION", pgmajor))
+            define_macros.append(("PG_MINOR_VERSION", pgminor))
+            define_macros.append(("PG_PATCH_VERSION", pgpatch))
+        except Warning, w:
+            if self.pg_config == self.DEFAULT_PG_CONFIG:
+                sys.stderr.write("Warning: %s" % str(w))
+            else:
+                sys.stderr.write("Error: %s" % str(w))
+                sys.exit(1)
+            
+        if hasattr(self, "finalize_" + sys.platform):
+            getattr(self, "finalize_" + sys.platform)()
+            
+# let's start with macro definitions (the ones not already in setup.cfg)
+define_macros = []
+include_dirs = []
+
+# python version
+define_macros.append(('PY_MAJOR_VERSION', str(sys.version_info[0])))
+define_macros.append(('PY_MINOR_VERSION', str(sys.version_info[1])))
+
+# some macros related to python versions and features
+if sys.version_info[0] >= 2 and sys.version_info[1] >= 3:
+    define_macros.append(('HAVE_PYBOOL','1'))
+    
+# gather information to build the extension module
+ext = [] ; data_files = []
+
+# sources
+
+sources = [
+    'psycopgmodule.c', 'pqpath.c',  'typecast.c',
+    'microprotocols.c', 'microprotocols_proto.c', 
+    'connection_type.c', 'connection_int.c', 'cursor_type.c', 'cursor_int.c',
+    'adapter_qstring.c', 'adapter_pboolean.c', 'adapter_binary.c',
+    'adapter_asis.c', 'adapter_list.c']
+
+from ConfigParser import ConfigParser
+parser = ConfigParser()
+parser.read('setup.cfg')
+
+# Choose if to use Decimal type
+use_decimal = int(parser.get('build_ext', 'use_decimal'))
+if sys.version_info[0] >= 2 and (
+    sys.version_info[1] >= 4 or (sys.version_info[1] == 3 and use_decimal)):
+    define_macros.append(('HAVE_DECIMAL','1'))
+    version_flags.append('dec')
+
+# Choose a datetime module
+have_pydatetime = False
+have_mxdatetime = False
+use_pydatetime  = int(parser.get('build_ext', 'use_pydatetime'))
+
+# check for mx package
+if parser.has_option('build_ext', 'mx_include_dir'):
+    mxincludedir = parser.get('build_ext', 'mx_include_dir')
+else:
+    mxincludedir = os.path.join(get_python_inc(plat_specific=1), "mx")
+if os.path.exists(mxincludedir):
+    include_dirs.append(mxincludedir)
+    define_macros.append(('HAVE_MXDATETIME','1'))
+    sources.append('adapter_mxdatetime.c')
+    have_mxdatetime = True
+    version_flags.append('mx')
+
+# check for python datetime package
+if os.path.exists(os.path.join(get_python_inc(plat_specific=1),"datetime.h")):
+    define_macros.append(('HAVE_PYDATETIME','1'))
+    sources.append('adapter_datetime.c')
+    have_pydatetime = True
+    version_flags.append('dt')
+    
+# now decide which package will be the default for date/time typecasts
+if have_pydatetime and use_pydatetime \
+       or have_pydatetime and not have_mxdatetime:
+    define_macros.append(('PSYCOPG_DEFAULT_PYDATETIME','1'))
+elif have_mxdatetime:
+    define_macros.append(('PSYCOPG_DEFAULT_MXDATETIME','1'))
+else:
+    def e(msg):
+        sys.stderr.write("error: " + msg + "\n")
+    e("psycopg requires a datetime module:")
+    e("    mx.DateTime module not found")
+    e("    python datetime module not found")
+    e("Note that psycopg needs the module headers and not just the module")
+    e("itself. If you installed Python or mx.DateTime from a binary package")
+    e("you probably need to install its companion -dev or -devel package.")
+    sys.exit(1)
+
+# generate a nice version string to avoid confusion when users report bugs
+for have in parser.get('build_ext', 'define').split(','):
+    if have == 'PSYCOPG_EXTENSIONS':
+        version_flags.append('ext')
+    elif have == 'HAVE_PQPROTOCOL3':
+        version_flags.append('pq3')
+if version_flags:
+    PSYCOPG_VERSION_EX = PSYCOPG_VERSION + " (%s)" % ' '.join(version_flags)
+else:
+    PSYCOPG_VERSION_EX = PSYCOPG_VERSION
+    
+if sys.platform != 'win32':
+    define_macros.append(('PSYCOPG_VERSION', '"'+PSYCOPG_VERSION_EX+'"'))
+else:
+    define_macros.append(('PSYCOPG_VERSION', '\\"'+PSYCOPG_VERSION_EX+'\\"'))
+
+# build the extension
+
+sources = map(lambda x: os.path.join('psycopg', x), sources)
+
+ext.append(Extension("psycopg2._psycopg", sources,
+                     define_macros=define_macros,
+                     include_dirs=include_dirs,
+                     undef_macros=[]))
+
+setup(name="psycopg2",
+      version=PSYCOPG_VERSION,
+      maintainer="Federico Di Gregorio",
+      maintainer_email="fog@initd.org",
+      author="Federico Di Gregorio",
+      author_email="fog@initd.org",
+      url="http://initd.org/tracker/psycopg",
+      download_url = "http://initd.org/pub/software/psycopg2",
+      license="GPL with exceptions or ZPL",
+      platforms = ["any"],
+      description=__doc__.split("\n")[0],
+      long_description="\n".join(__doc__.split("\n")[2:]),
+      classifiers=filter(None, classifiers.split("\n")),
+      data_files=data_files,
+      package_dir={'psycopg2':'lib'},
+      packages=['psycopg2'],
+      cmdclass={ 'build_ext': psycopg_build_ext },
+      ext_modules=ext)
diff --git a/psycopg2/tests/dbapi20.py b/psycopg2/tests/dbapi20.py
new file mode 100644 (file)
index 0000000..4fc8c0c
--- /dev/null
@@ -0,0 +1,850 @@
+#!/usr/bin/env python
+''' Python DB API 2.0 driver compliance unit test suite. 
+    
+    This software is Public Domain and may be used without restrictions.
+
+ "Now we have booze and barflies entering the discussion, plus rumours of
+  DBAs on drugs... and I won't tell you what flashes through my mind each
+  time I read the subject line with 'Anal Compliance' in it.  All around
+  this is turning out to be a thoroughly unwholesome unit test."
+
+    -- Ian Bicking
+'''
+
+__rcs_id__  = '$Id: dbapi20.py,v 1.10 2003/10/09 03:14:14 zenzen Exp $'
+__version__ = '$Revision: 1.10 $'[11:-2]
+__author__ = 'Stuart Bishop <zen@shangri-la.dropbear.id.au>'
+
+import unittest
+import time
+
+# $Log: dbapi20.py,v $
+# Revision 1.10  2003/10/09 03:14:14  zenzen
+# Add test for DB API 2.0 optional extension, where database exceptions
+# are exposed as attributes on the Connection object.
+#
+# Revision 1.9  2003/08/13 01:16:36  zenzen
+# Minor tweak from Stefan Fleiter
+#
+# Revision 1.8  2003/04/10 00:13:25  zenzen
+# Changes, as per suggestions by M.-A. Lemburg
+# - Add a table prefix, to ensure namespace collisions can always be avoided
+#
+# Revision 1.7  2003/02/26 23:33:37  zenzen
+# Break out DDL into helper functions, as per request by David Rushby
+#
+# Revision 1.6  2003/02/21 03:04:33  zenzen
+# Stuff from Henrik Ekelund:
+#     added test_None
+#     added test_nextset & hooks
+#
+# Revision 1.5  2003/02/17 22:08:43  zenzen
+# Implement suggestions and code from Henrik Eklund - test that cursor.arraysize
+# defaults to 1 & generic cursor.callproc test added
+#
+# Revision 1.4  2003/02/15 00:16:33  zenzen
+# Changes, as per suggestions and bug reports by M.-A. Lemburg,
+# Matthew T. Kromer, Federico Di Gregorio and Daniel Dittmar
+# - Class renamed
+# - Now a subclass of TestCase, to avoid requiring the driver stub
+#   to use multiple inheritance
+# - Reversed the polarity of buggy test in test_description
+# - Test exception heirarchy correctly
+# - self.populate is now self._populate(), so if a driver stub
+#   overrides self.ddl1 this change propogates
+# - VARCHAR columns now have a width, which will hopefully make the
+#   DDL even more portible (this will be reversed if it causes more problems)
+# - cursor.rowcount being checked after various execute and fetchXXX methods
+# - Check for fetchall and fetchmany returning empty lists after results
+#   are exhausted (already checking for empty lists if select retrieved
+#   nothing
+# - Fix bugs in test_setoutputsize_basic and test_setinputsizes
+#
+
+class DatabaseAPI20Test(unittest.TestCase):
+    ''' Test a database self.driver for DB API 2.0 compatibility.
+        This implementation tests Gadfly, but the TestCase
+        is structured so that other self.drivers can subclass this 
+        test case to ensure compiliance with the DB-API. It is 
+        expected that this TestCase may be expanded in the future
+        if ambiguities or edge conditions are discovered.
+
+        The 'Optional Extensions' are not yet being tested.
+
+        self.drivers should subclass this test, overriding setUp, tearDown,
+        self.driver, connect_args and connect_kw_args. Class specification
+        should be as follows:
+
+        import dbapi20 
+        class mytest(dbapi20.DatabaseAPI20Test):
+           [...] 
+
+        Don't 'import DatabaseAPI20Test from dbapi20', or you will
+        confuse the unit tester - just 'import dbapi20'.
+    '''
+
+    # The self.driver module. This should be the module where the 'connect'
+    # method is to be found
+    driver = None
+    connect_args = () # List of arguments to pass to connect
+    connect_kw_args = {} # Keyword arguments for connect
+    table_prefix = 'dbapi20test_' # If you need to specify a prefix for tables
+
+    ddl1 = 'create table %sbooze (name varchar(20))' % table_prefix
+    ddl2 = 'create table %sbarflys (name varchar(20))' % table_prefix
+    xddl1 = 'drop table %sbooze' % table_prefix
+    xddl2 = 'drop table %sbarflys' % table_prefix
+
+    lowerfunc = 'lower' # Name of stored procedure to convert string->lowercase
+        
+    # Some drivers may need to override these helpers, for example adding
+    # a 'commit' after the execute.
+    def executeDDL1(self,cursor):
+        cursor.execute(self.ddl1)
+
+    def executeDDL2(self,cursor):
+        cursor.execute(self.ddl2)
+
+    def setUp(self):
+        ''' self.drivers should override this method to perform required setup
+            if any is necessary, such as creating the database.
+        '''
+        pass
+
+    def tearDown(self):
+        ''' self.drivers should override this method to perform required cleanup
+            if any is necessary, such as deleting the test database.
+            The default drops the tables that may be created.
+        '''
+        con = self._connect()
+        try:
+            cur = con.cursor()
+            for ddl in (self.xddl1,self.xddl2):
+                try: 
+                    cur.execute(ddl)
+                    con.commit()
+                except self.driver.Error: 
+                    # Assume table didn't exist. Other tests will check if
+                    # execute is busted.
+                    pass
+        finally:
+            con.close()
+
+    def _connect(self):
+        try:
+            return self.driver.connect(
+                *self.connect_args,**self.connect_kw_args
+                )
+        except AttributeError:
+            self.fail("No connect method found in self.driver module")
+
+    def test_connect(self):
+        con = self._connect()
+        con.close()
+
+    def test_apilevel(self):
+        try:
+            # Must exist
+            apilevel = self.driver.apilevel
+            # Must equal 2.0
+            self.assertEqual(apilevel,'2.0')
+        except AttributeError:
+            self.fail("Driver doesn't define apilevel")
+
+    def test_threadsafety(self):
+        try:
+            # Must exist
+            threadsafety = self.driver.threadsafety
+            # Must be a valid value
+            self.failUnless(threadsafety in (0,1,2,3))
+        except AttributeError:
+            self.fail("Driver doesn't define threadsafety")
+
+    def test_paramstyle(self):
+        try:
+            # Must exist
+            paramstyle = self.driver.paramstyle
+            # Must be a valid value
+            self.failUnless(paramstyle in (
+                'qmark','numeric','named','format','pyformat'
+                ))
+        except AttributeError:
+            self.fail("Driver doesn't define paramstyle")
+
+    def test_Exceptions(self):
+        # Make sure required exceptions exist, and are in the
+        # defined heirarchy.
+        self.failUnless(issubclass(self.driver.Warning,StandardError))
+        self.failUnless(issubclass(self.driver.Error,StandardError))
+        self.failUnless(
+            issubclass(self.driver.InterfaceError,self.driver.Error)
+            )
+        self.failUnless(
+            issubclass(self.driver.DatabaseError,self.driver.Error)
+            )
+        self.failUnless(
+            issubclass(self.driver.OperationalError,self.driver.Error)
+            )
+        self.failUnless(
+            issubclass(self.driver.IntegrityError,self.driver.Error)
+            )
+        self.failUnless(
+            issubclass(self.driver.InternalError,self.driver.Error)
+            )
+        self.failUnless(
+            issubclass(self.driver.ProgrammingError,self.driver.Error)
+            )
+        self.failUnless(
+            issubclass(self.driver.NotSupportedError,self.driver.Error)
+            )
+
+    def test_ExceptionsAsConnectionAttributes(self):
+        # OPTIONAL EXTENSION
+        # Test for the optional DB API 2.0 extension, where the exceptions
+        # are exposed as attributes on the Connection object
+        # I figure this optional extension will be implemented by any
+        # driver author who is using this test suite, so it is enabled
+        # by default.
+        con = self._connect()
+        drv = self.driver
+        self.failUnless(con.Warning is drv.Warning)
+        self.failUnless(con.Error is drv.Error)
+        self.failUnless(con.InterfaceError is drv.InterfaceError)
+        self.failUnless(con.DatabaseError is drv.DatabaseError)
+        self.failUnless(con.OperationalError is drv.OperationalError)
+        self.failUnless(con.IntegrityError is drv.IntegrityError)
+        self.failUnless(con.InternalError is drv.InternalError)
+        self.failUnless(con.ProgrammingError is drv.ProgrammingError)
+        self.failUnless(con.NotSupportedError is drv.NotSupportedError)
+
+
+    def test_commit(self):
+        con = self._connect()
+        try:
+            # Commit must work, even if it doesn't do anything
+            con.commit()
+        finally:
+            con.close()
+
+    def test_rollback(self):
+        con = self._connect()
+        # If rollback is defined, it should either work or throw
+        # the documented exception
+        if hasattr(con,'rollback'):
+            try:
+                con.rollback()
+            except self.driver.NotSupportedError:
+                pass
+    
+    def test_cursor(self):
+        con = self._connect()
+        try:
+            cur = con.cursor()
+        finally:
+            con.close()
+
+    def test_cursor_isolation(self):
+        con = self._connect()
+        try:
+            # Make sure cursors created from the same connection have
+            # the documented transaction isolation level
+            cur1 = con.cursor()
+            cur2 = con.cursor()
+            self.executeDDL1(cur1)
+            cur1.execute("insert into %sbooze values ('Victoria Bitter')" % (
+                self.table_prefix
+                ))
+            cur2.execute("select name from %sbooze" % self.table_prefix)
+            booze = cur2.fetchall()
+            self.assertEqual(len(booze),1)
+            self.assertEqual(len(booze[0]),1)
+            self.assertEqual(booze[0][0],'Victoria Bitter')
+        finally:
+            con.close()
+
+    def test_description(self):
+        con = self._connect()
+        try:
+            cur = con.cursor()
+            self.executeDDL1(cur)
+            self.assertEqual(cur.description,None,
+                'cursor.description should be none after executing a '
+                'statement that can return no rows (such as DDL)'
+                )
+            cur.execute('select name from %sbooze' % self.table_prefix)
+            self.assertEqual(len(cur.description),1,
+                'cursor.description describes too many columns'
+                )
+            self.assertEqual(len(cur.description[0]),7,
+                'cursor.description[x] tuples must have 7 elements'
+                )
+            self.assertEqual(cur.description[0][0].lower(),'name',
+                'cursor.description[x][0] must return column name'
+                )
+            self.assertEqual(cur.description[0][1],self.driver.STRING,
+                'cursor.description[x][1] must return column type. Got %r'
+                    % cur.description[0][1]
+                )
+
+            # Make sure self.description gets reset
+            self.executeDDL2(cur)
+            self.assertEqual(cur.description,None,
+                'cursor.description not being set to None when executing '
+                'no-result statements (eg. DDL)'
+                )
+        finally:
+            con.close()
+
+    def test_rowcount(self):
+        con = self._connect()
+        try:
+            cur = con.cursor()
+            self.executeDDL1(cur)
+            self.assertEqual(cur.rowcount,-1,
+                'cursor.rowcount should be -1 after executing no-result '
+                'statements'
+                )
+            cur.execute("insert into %sbooze values ('Victoria Bitter')" % (
+                self.table_prefix
+                ))
+            self.failUnless(cur.rowcount in (-1,1),
+                'cursor.rowcount should == number or rows inserted, or '
+                'set to -1 after executing an insert statement'
+                )
+            cur.execute("select name from %sbooze" % self.table_prefix)
+            self.failUnless(cur.rowcount in (-1,1),
+                'cursor.rowcount should == number of rows returned, or '
+                'set to -1 after executing a select statement'
+                )
+            self.executeDDL2(cur)
+            self.assertEqual(cur.rowcount,-1,
+                'cursor.rowcount not being reset to -1 after executing '
+                'no-result statements'
+                )
+        finally:
+            con.close()
+
+    lower_func = 'lower'
+    def test_callproc(self):
+        con = self._connect()
+        try:
+            cur = con.cursor()
+            if self.lower_func and hasattr(cur,'callproc'):
+                r = cur.callproc(self.lower_func,('FOO',))
+                self.assertEqual(len(r),1)
+                self.assertEqual(r[0],'FOO')
+                r = cur.fetchall()
+                self.assertEqual(len(r),1,'callproc produced no result set')
+                self.assertEqual(len(r[0]),1,
+                    'callproc produced invalid result set'
+                    )
+                self.assertEqual(r[0][0],'foo',
+                    'callproc produced invalid results'
+                    )
+        finally:
+            con.close()
+
+    def test_close(self):
+        con = self._connect()
+        try:
+            cur = con.cursor()
+        finally:
+            con.close()
+
+        # cursor.execute should raise an Error if called after connection
+        # closed
+        self.assertRaises(self.driver.Error,self.executeDDL1,cur)
+
+        # connection.commit should raise an Error if called after connection'
+        # closed.'
+        self.assertRaises(self.driver.Error,con.commit)
+
+        # connection.close should raise an Error if called more than once
+        self.assertRaises(self.driver.Error,con.close)
+
+    def test_execute(self):
+        con = self._connect()
+        try:
+            cur = con.cursor()
+            self._paraminsert(cur)
+        finally:
+            con.close()
+
+    def _paraminsert(self,cur):
+        self.executeDDL1(cur)
+        cur.execute("insert into %sbooze values ('Victoria Bitter')" % (
+            self.table_prefix
+            ))
+        self.failUnless(cur.rowcount in (-1,1))
+
+        if self.driver.paramstyle == 'qmark':
+            cur.execute(
+                'insert into %sbooze values (?)' % self.table_prefix,
+                ("Cooper's",)
+                )
+        elif self.driver.paramstyle == 'numeric':
+            cur.execute(
+                'insert into %sbooze values (:1)' % self.table_prefix,
+                ("Cooper's",)
+                )
+        elif self.driver.paramstyle == 'named':
+            cur.execute(
+                'insert into %sbooze values (:beer)' % self.table_prefix, 
+                {'beer':"Cooper's"}
+                )
+        elif self.driver.paramstyle == 'format':
+            cur.execute(
+                'insert into %sbooze values (%%s)' % self.table_prefix,
+                ("Cooper's",)
+                )
+        elif self.driver.paramstyle == 'pyformat':
+            cur.execute(
+                'insert into %sbooze values (%%(beer)s)' % self.table_prefix,
+                {'beer':"Cooper's"}
+                )
+        else:
+            self.fail('Invalid paramstyle')
+        self.failUnless(cur.rowcount in (-1,1))
+
+        cur.execute('select name from %sbooze' % self.table_prefix)
+        res = cur.fetchall()
+        self.assertEqual(len(res),2,'cursor.fetchall returned too few rows')
+        beers = [res[0][0],res[1][0]]
+        beers.sort()
+        self.assertEqual(beers[0],"Cooper's",
+            'cursor.fetchall retrieved incorrect data, or data inserted '
+            'incorrectly'
+            )
+        self.assertEqual(beers[1],"Victoria Bitter",
+            'cursor.fetchall retrieved incorrect data, or data inserted '
+            'incorrectly'
+            )
+
+    def test_executemany(self):
+        con = self._connect()
+        try:
+            cur = con.cursor()
+            self.executeDDL1(cur)
+            largs = [ ("Cooper's",) , ("Boag's",) ]
+            margs = [ {'beer': "Cooper's"}, {'beer': "Boag's"} ]
+            if self.driver.paramstyle == 'qmark':
+                cur.executemany(
+                    'insert into %sbooze values (?)' % self.table_prefix,
+                    largs
+                    )
+            elif self.driver.paramstyle == 'numeric':
+                cur.executemany(
+                    'insert into %sbooze values (:1)' % self.table_prefix,
+                    largs
+                    )
+            elif self.driver.paramstyle == 'named':
+                cur.executemany(
+                    'insert into %sbooze values (:beer)' % self.table_prefix,
+                    margs
+                    )
+            elif self.driver.paramstyle == 'format':
+                cur.executemany(
+                    'insert into %sbooze values (%%s)' % self.table_prefix,
+                    largs
+                    )
+            elif self.driver.paramstyle == 'pyformat':
+                cur.executemany(
+                    'insert into %sbooze values (%%(beer)s)' % (
+                        self.table_prefix
+                        ),
+                    margs
+                    )
+            else:
+                self.fail('Unknown paramstyle')
+            self.failUnless(cur.rowcount in (-1,2),
+                'insert using cursor.executemany set cursor.rowcount to '
+                'incorrect value %r' % cur.rowcount
+                )
+            cur.execute('select name from %sbooze' % self.table_prefix)
+            res = cur.fetchall()
+            self.assertEqual(len(res),2,
+                'cursor.fetchall retrieved incorrect number of rows'
+                )
+            beers = [res[0][0],res[1][0]]
+            beers.sort()
+            self.assertEqual(beers[0],"Boag's",'incorrect data retrieved')
+            self.assertEqual(beers[1],"Cooper's",'incorrect data retrieved')
+        finally:
+            con.close()
+
+    def test_fetchone(self):
+        con = self._connect()
+        try:
+            cur = con.cursor()
+
+            # cursor.fetchone should raise an Error if called before
+            # executing a select-type query
+            self.assertRaises(self.driver.Error,cur.fetchone)
+
+            # cursor.fetchone should raise an Error if called after
+            # executing a query that cannnot return rows
+            self.executeDDL1(cur)
+            self.assertRaises(self.driver.Error,cur.fetchone)
+
+            cur.execute('select name from %sbooze' % self.table_prefix)
+            self.assertEqual(cur.fetchone(),None,
+                'cursor.fetchone should return None if a query retrieves '
+                'no rows'
+                )
+            self.failUnless(cur.rowcount in (-1,0))
+
+            # cursor.fetchone should raise an Error if called after
+            # executing a query that cannnot return rows
+            cur.execute("insert into %sbooze values ('Victoria Bitter')" % (
+                self.table_prefix
+                ))
+            self.assertRaises(self.driver.Error,cur.fetchone)
+
+            cur.execute('select name from %sbooze' % self.table_prefix)
+            r = cur.fetchone()
+            self.assertEqual(len(r),1,
+                'cursor.fetchone should have retrieved a single row'
+                )
+            self.assertEqual(r[0],'Victoria Bitter',
+                'cursor.fetchone retrieved incorrect data'
+                )
+            self.assertEqual(cur.fetchone(),None,
+                'cursor.fetchone should return None if no more rows available'
+                )
+            self.failUnless(cur.rowcount in (-1,1))
+        finally:
+            con.close()
+
+    samples = [
+        'Carlton Cold',
+        'Carlton Draft',
+        'Mountain Goat',
+        'Redback',
+        'Victoria Bitter',
+        'XXXX'
+        ]
+
+    def _populate(self):
+        ''' Return a list of sql commands to setup the DB for the fetch
+            tests.
+        '''
+        populate = [
+            "insert into %sbooze values ('%s')" % (self.table_prefix,s) 
+                for s in self.samples
+            ]
+        return populate
+
+    def test_fetchmany(self):
+        con = self._connect()
+        try:
+            cur = con.cursor()
+
+            # cursor.fetchmany should raise an Error if called without
+            #issuing a query
+            self.assertRaises(self.driver.Error,cur.fetchmany,4)
+
+            self.executeDDL1(cur)
+            for sql in self._populate():
+                cur.execute(sql)
+
+            cur.execute('select name from %sbooze' % self.table_prefix)
+            r = cur.fetchmany()
+            self.assertEqual(len(r),1,
+                'cursor.fetchmany retrieved incorrect number of rows, '
+                'default of arraysize is one.'
+                )
+            cur.arraysize=10
+            r = cur.fetchmany(3) # Should get 3 rows
+            self.assertEqual(len(r),3,
+                'cursor.fetchmany retrieved incorrect number of rows'
+                )
+            r = cur.fetchmany(4) # Should get 2 more
+            self.assertEqual(len(r),2,
+                'cursor.fetchmany retrieved incorrect number of rows'
+                )
+            r = cur.fetchmany(4) # Should be an empty sequence
+            self.assertEqual(len(r),0,
+                'cursor.fetchmany should return an empty sequence after '
+                'results are exhausted'
+            )
+            self.failUnless(cur.rowcount in (-1,6))
+
+            # Same as above, using cursor.arraysize
+            cur.arraysize=4
+            cur.execute('select name from %sbooze' % self.table_prefix)
+            r = cur.fetchmany() # Should get 4 rows
+            self.assertEqual(len(r),4,
+                'cursor.arraysize not being honoured by fetchmany'
+                )
+            r = cur.fetchmany() # Should get 2 more
+            self.assertEqual(len(r),2)
+            r = cur.fetchmany() # Should be an empty sequence
+            self.assertEqual(len(r),0)
+            self.failUnless(cur.rowcount in (-1,6))
+
+            cur.arraysize=6
+            cur.execute('select name from %sbooze' % self.table_prefix)
+            rows = cur.fetchmany() # Should get all rows
+            self.failUnless(cur.rowcount in (-1,6))
+            self.assertEqual(len(rows),6)
+            self.assertEqual(len(rows),6)
+            rows = [r[0] for r in rows]
+            rows.sort()
+          
+            # Make sure we get the right data back out
+            for i in range(0,6):
+                self.assertEqual(rows[i],self.samples[i],
+                    'incorrect data retrieved by cursor.fetchmany'
+                    )
+
+            rows = cur.fetchmany() # Should return an empty list
+            self.assertEqual(len(rows),0,
+                'cursor.fetchmany should return an empty sequence if '
+                'called after the whole result set has been fetched'
+                )
+            self.failUnless(cur.rowcount in (-1,6))
+
+            self.executeDDL2(cur)
+            cur.execute('select name from %sbarflys' % self.table_prefix)
+            r = cur.fetchmany() # Should get empty sequence
+            self.assertEqual(len(r),0,
+                'cursor.fetchmany should return an empty sequence if '
+                'query retrieved no rows'
+                )
+            self.failUnless(cur.rowcount in (-1,0))
+
+        finally:
+            con.close()
+
+    def test_fetchall(self):
+        con = self._connect()
+        try:
+            cur = con.cursor()
+            # cursor.fetchall should raise an Error if called
+            # without executing a query that may return rows (such
+            # as a select)
+            self.assertRaises(self.driver.Error, cur.fetchall)
+
+            self.executeDDL1(cur)
+            for sql in self._populate():
+                cur.execute(sql)
+
+            # cursor.fetchall should raise an Error if called
+            # after executing a a statement that cannot return rows
+            self.assertRaises(self.driver.Error,cur.fetchall)
+
+            cur.execute('select name from %sbooze' % self.table_prefix)
+            rows = cur.fetchall()
+            self.failUnless(cur.rowcount in (-1,len(self.samples)))
+            self.assertEqual(len(rows),len(self.samples),
+                'cursor.fetchall did not retrieve all rows'
+                )
+            rows = [r[0] for r in rows]
+            rows.sort()
+            for i in range(0,len(self.samples)):
+                self.assertEqual(rows[i],self.samples[i],
+                'cursor.fetchall retrieved incorrect rows'
+                )
+            rows = cur.fetchall()
+            self.assertEqual(
+                len(rows),0,
+                'cursor.fetchall should return an empty list if called '
+                'after the whole result set has been fetched'
+                )
+            self.failUnless(cur.rowcount in (-1,len(self.samples)))
+
+            self.executeDDL2(cur)
+            cur.execute('select name from %sbarflys' % self.table_prefix)
+            rows = cur.fetchall()
+            self.failUnless(cur.rowcount in (-1,0))
+            self.assertEqual(len(rows),0,
+                'cursor.fetchall should return an empty list if '
+                'a select query returns no rows'
+                )
+            
+        finally:
+            con.close()
+    
+    def test_mixedfetch(self):
+        con = self._connect()
+        try:
+            cur = con.cursor()
+            self.executeDDL1(cur)
+            for sql in self._populate():
+                cur.execute(sql)
+
+            cur.execute('select name from %sbooze' % self.table_prefix)
+            rows1  = cur.fetchone()
+            rows23 = cur.fetchmany(2)
+            rows4  = cur.fetchone()
+            rows56 = cur.fetchall()
+            self.failUnless(cur.rowcount in (-1,6))
+            self.assertEqual(len(rows23),2,
+                'fetchmany returned incorrect number of rows'
+                )
+            self.assertEqual(len(rows56),2,
+                'fetchall returned incorrect number of rows'
+                )
+
+            rows = [rows1[0]]
+            rows.extend([rows23[0][0],rows23[1][0]])
+            rows.append(rows4[0])
+            rows.extend([rows56[0][0],rows56[1][0]])
+            rows.sort()
+            for i in range(0,len(self.samples)):
+                self.assertEqual(rows[i],self.samples[i],
+                    'incorrect data retrieved or inserted'
+                    )
+        finally:
+            con.close()
+
+    def help_nextset_setUp(self,cur):
+        ''' Should create a procedure called deleteme
+            that returns two result sets, first the 
+           number of rows in booze then "name from booze"
+        '''
+        raise NotImplementedError,'Helper not implemented'
+        #sql="""
+        #    create procedure deleteme as
+        #    begin
+        #        select count(*) from booze
+        #        select name from booze
+        #    end
+        #"""
+        #cur.execute(sql)
+
+    def help_nextset_tearDown(self,cur):
+        'If cleaning up is needed after nextSetTest'
+        raise NotImplementedError,'Helper not implemented'
+        #cur.execute("drop procedure deleteme")
+
+    def test_nextset(self):
+        con = self._connect()
+        try:
+            cur = con.cursor()
+            if not hasattr(cur,'nextset'):
+                return
+
+            try:
+                self.executeDDL1(cur)
+                sql=self._populate()
+                for sql in self._populate():
+                    cur.execute(sql)
+
+                self.help_nextset_setUp(cur)
+
+                cur.callproc('deleteme')
+                numberofrows=cur.fetchone()
+                assert numberofrows[0]== len(self.samples)
+                assert cur.nextset()
+                names=cur.fetchall()
+                assert len(names) == len(self.samples)
+                s=cur.nextset()
+                assert s == None,'No more return sets, should return None'
+            finally:
+                self.help_nextset_tearDown(cur)
+
+        finally:
+            con.close()
+
+    def test_nextset(self):
+        raise NotImplementedError,'Drivers need to override this test'
+
+    def test_arraysize(self):
+        # Not much here - rest of the tests for this are in test_fetchmany
+        con = self._connect()
+        try:
+            cur = con.cursor()
+            self.failUnless(hasattr(cur,'arraysize'),
+                'cursor.arraysize must be defined'
+                )
+        finally:
+            con.close()
+
+    def test_setinputsizes(self):
+        con = self._connect()
+        try:
+            cur = con.cursor()
+            cur.setinputsizes( (25,) )
+            self._paraminsert(cur) # Make sure cursor still works
+        finally:
+            con.close()
+
+    def test_setoutputsize_basic(self):
+        # Basic test is to make sure setoutputsize doesn't blow up
+        con = self._connect()
+        try:
+            cur = con.cursor()
+            cur.setoutputsize(1000)
+            cur.setoutputsize(2000,0)
+            self._paraminsert(cur) # Make sure the cursor still works
+        finally:
+            con.close()
+
+    def test_setoutputsize(self):
+        # Real test for setoutputsize is driver dependant
+        raise NotImplementedError,'Driver need to override this test'
+
+    def test_None(self):
+        con = self._connect()
+        try:
+            cur = con.cursor()
+            self.executeDDL1(cur)
+            cur.execute('insert into %sbooze values (NULL)' % self.table_prefix)
+            cur.execute('select name from %sbooze' % self.table_prefix)
+            r = cur.fetchall()
+            self.assertEqual(len(r),1)
+            self.assertEqual(len(r[0]),1)
+            self.assertEqual(r[0][0],None,'NULL value not returned as None')
+        finally:
+            con.close()
+
+    def test_Date(self):
+        d1 = self.driver.Date(2002,12,25)
+        d2 = self.driver.DateFromTicks(time.mktime((2002,12,25,0,0,0,0,0,0)))
+        # Can we assume this? API doesn't specify, but it seems implied
+        # self.assertEqual(str(d1),str(d2))
+
+    def test_Time(self):
+        t1 = self.driver.Time(13,45,30)
+        t2 = self.driver.TimeFromTicks(time.mktime((2001,1,1,13,45,30,0,0,0)))
+        # Can we assume this? API doesn't specify, but it seems implied
+        # self.assertEqual(str(t1),str(t2))
+
+    def test_Timestamp(self):
+        t1 = self.driver.Timestamp(2002,12,25,13,45,30)
+        t2 = self.driver.TimestampFromTicks(
+            time.mktime((2002,12,25,13,45,30,0,0,0))
+            )
+        # Can we assume this? API doesn't specify, but it seems implied
+        # self.assertEqual(str(t1),str(t2))
+
+    def test_Binary(self):
+        b = self.driver.Binary('Something')
+        b = self.driver.Binary('')
+
+    def test_STRING(self):
+        self.failUnless(hasattr(self.driver,'STRING'),
+            'module.STRING must be defined'
+            )
+
+    def test_BINARY(self):
+        self.failUnless(hasattr(self.driver,'BINARY'),
+            'module.BINARY must be defined.'
+            )
+
+    def test_NUMBER(self):
+        self.failUnless(hasattr(self.driver,'NUMBER'),
+            'module.NUMBER must be defined.'
+            )
+
+    def test_DATETIME(self):
+        self.failUnless(hasattr(self.driver,'DATETIME'),
+            'module.DATETIME must be defined.'
+            )
+
+    def test_ROWID(self):
+        self.failUnless(hasattr(self.driver,'ROWID'),
+            'module.ROWID must be defined.'
+            )
+
diff --git a/psycopg2/tests/extras_dictcursor.py b/psycopg2/tests/extras_dictcursor.py
new file mode 100644 (file)
index 0000000..270d37f
--- /dev/null
@@ -0,0 +1,47 @@
+# extras_dictcursor - test if DictCursor extension class works
+#
+# Copyright (C) 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 psycopg2
+import psycopg2.extras
+from unittest import TestCase, TestSuite, main
+
+
+class ExtrasDictCursorTests(TestCase):
+    """Test if DictCursor extension class works."""
+
+    def setUp(self):
+        self.conn = psycopg2.connect("dbname=test")
+        curs = self.conn.cursor()
+        curs.execute("CREATE TABLE ExtrasDictCursorTests (foo text)")
+    
+    def testDictCursor(self):
+        curs = self.conn.cursor(cursor_factory=psycopg2.extras.DictCursor)
+        curs.execute("INSERT INTO ExtrasDictCursorTests VALUES ('bar')")
+        curs.execute("SELECT * FROM ExtrasDictCursorTests")
+        row = curs.fetchone()
+        self.failUnless(row['foo'] == 'bar')
+        self.failUnless(row[0] == 'bar')
+
+class ExtrasDictCursorSuite(TestSuite):
+    """Build a suite of all tests."""
+
+    def __init__(self):
+        """Build a list of tests."""
+        self.tests = [x for x in dir(ExtrasDictCursorTests)
+                                         if x.startswith('test')]
+        TestSuite.__init__(self, map(TestModule, self.tests))
+
+
+if __name__ == "__main__":
+    main()
diff --git a/psycopg2/tests/test_psycopg2_dbapi20.py b/psycopg2/tests/test_psycopg2_dbapi20.py
new file mode 100644 (file)
index 0000000..028b718
--- /dev/null
@@ -0,0 +1,35 @@
+#!/usr/bin/env python
+import dbapi20
+import unittest
+import psycopg2
+import popen2
+
+class test_Psycopg(dbapi20.DatabaseAPI20Test):
+    driver = psycopg2
+    connect_args = ()
+    connect_kw_args = {'dsn': 'dbname=dbapi20_test'}
+
+    lower_func = 'lower' # For stored procedure test
+
+    def setUp(self):
+        # Call superclass setUp In case this does something in the
+        # future
+        dbapi20.DatabaseAPI20Test.setUp(self) 
+
+        try:
+            con = self._connect()
+            con.close()
+        except:
+            cmd = "psql -c 'create database dbapi20_test' template1"
+            cout,cin = popen2.popen2(cmd)
+            cin.close()
+            cout.read()
+
+    def tearDown(self):
+        dbapi20.DatabaseAPI20Test.tearDown(self)
+
+    def test_nextset(self): pass
+    def test_setoutputsize(self): pass
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/psycopg2/tests/types_basic.py b/psycopg2/tests/types_basic.py
new file mode 100644 (file)
index 0000000..446ad15
--- /dev/null
@@ -0,0 +1,87 @@
+# types_basic.py - tests for basic types conversions
+#
+# Copyright (C) 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 sys
+try:
+    import decimal
+except:
+    pass
+import psycopg2
+from unittest import TestCase, TestSuite, main
+
+
+class TypesBasicTests(TestCase):
+    """Test presence of mandatory attributes and methods."""
+
+    def setUp(self):
+        self.conn = psycopg2.connect("dbname=test")
+
+    def execute(self, *args):
+        curs = self.conn.cursor()
+        curs.execute(*args)
+        return curs.fetchone()[0]
+    
+    def testQuoting(self):
+        s = "Quote'this\\! ''ok?''"
+        self.failUnless(self.execute("SELECT %s AS foo", (s,)) == s,
+                        "wrong quoting: " + s)
+
+    def testUnicode(self):
+        s = u"Quote'this\\! ''ok?''"
+        self.failUnless(self.execute("SELECT %s AS foo", (s,)) == s,
+                        "wrong unicode quoting: " + s)
+
+    def testNumber(self):
+        s = self.execute("SELECT %s AS foo", (1971,))
+        self.failUnless(s == 1971, "wrong integer quoting: " + str(s))
+        s = self.execute("SELECT %s AS foo", (1971L,))
+        self.failUnless(s == 1971L, "wrong integer quoting: " + str(s))
+        # Python 2.4 defaults to Decimal?
+        if sys.version_info[0] >= 2 and sys.version_info[1] >= 4:
+            s = self.execute("SELECT %s AS foo", (19.10,))
+            self.failUnless(s - decimal.Decimal("19.10") == 0,
+                            "wrong decimal quoting: " + str(s))
+        else:
+            s = self.execute("SELECT %s AS foo", (19.10,))
+            self.failUnless(abs(s - 19.10) < 0.001,
+                            "wrong float quoting: " + str(s))
+
+    def testBinary(self):
+        s = ''.join([chr(x) for x in range(256)])
+        b = psycopg2.Binary(s)
+       r = str(self.execute("SELECT %s::bytea AS foo", (b,)))
+        self.failUnless(r == s, "wrong binary quoting")
+        # test to make sure an empty Binary is converted to an empty string
+        b = psycopg2.Binary('')
+        self.assertEqual(str(b), "''")
+
+    def testArray(self):
+       s = self.execute("SELECT %s AS foo", ([[1,2],[3,4]],))
+       self.failUnless(s == [[1,2],[3,4]], "wrong array quoting " + str(s))
+       s = self.execute("SELECT %s AS foo", (['one', 'two', 'three'],))
+       self.failUnless(s == ['one', 'two', 'three'], 
+                       "wrong array quoting " + str(s))
+       
+       
+class TypesBasicSuite(TestSuite):
+    """Build a suite of all tests."""
+
+    def __init__(self):
+        """Build a list of tests."""
+        self.tests = [x for x in dir(TypesBasicTests) if x.startswith('test')]
+        TestSuite.__init__(self, map(TestModule, self.tests))
+
+
+if __name__ == "__main__":
+    main()