diff options
author | Federico Di Gregorio <fog@initd.org> | 2005-04-03 06:13:24 +0000 |
---|---|---|
committer | Federico Di Gregorio <fog@initd.org> | 2005-04-03 06:13:24 +0000 |
commit | fdb68599c7bce5e5d860383f21d1ae6c8fc12c29 (patch) | |
tree | efcd045b513dcc6b6ac213aace332fbfb285e80e | |
parent | 5db776420703e392e839d7fcb833274f65b7893f (diff) | |
download | psycopg2-fdb68599c7bce5e5d860383f21d1ae6c8fc12c29.tar.gz |
psycopg1 compatibility module.
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | lib/__init__.py | 2 | ||||
-rw-r--r-- | lib/psycopg1.py | 76 | ||||
-rw-r--r-- | psycopg/psycopgmodule.c | 3 |
4 files changed, 92 insertions, 3 deletions
@@ -1,3 +1,10 @@ +2005-04-03 Federico Di Gregorio <fog@debian.org> + + * 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> * psycopg/pqpath.c (pq_is_busy): Staring from bug report from @@ -6,6 +13,13 @@ 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. diff --git a/lib/__init__.py b/lib/__init__.py index 2ac194c..0e87211 100644 --- a/lib/__init__.py +++ b/lib/__init__.py @@ -20,8 +20,6 @@ small and fast, and stable as a rock. # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # for more details. -__all__ = ['extensions', 'extras', 'tz', 'pool'] - # import the DBAPI-2.0 stuff into top-level module from _psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID diff --git a/lib/psycopg1.py b/lib/psycopg1.py new file mode 100644 index 0000000..45a1783 --- /dev/null +++ b/lib/psycopg1.py @@ -0,0 +1,76 @@ +"""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 hile porting to psycopg 2. Import as follows: + + from psycopg 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 psycopg.extensions import cursor as _2cursor +from psycopg.extensions import connection as _2connection + +from psycopg import * +del connect + + +def connect(*args, **kwargs): + """connect(dsn, ...) -> new psycopg 1.1.x compatible connection object""" + kwargs['connection_factory'] = connection + return _2psycopg.connect(*args, **kwargs) + + +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) + + +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) + return self.__build_dict(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/psycopg/psycopgmodule.c b/psycopg/psycopgmodule.c index da2109d..5601a33 100644 --- a/psycopg/psycopgmodule.c +++ b/psycopg/psycopgmodule.c @@ -102,7 +102,8 @@ psyco_connect(PyObject *self, PyObject *args, PyObject *keywds) char *host=NULL, *port=NULL, *sslmode=NULL; static char *kwlist[] = {"dsn", "database", "host", "port", - "user", "password", "sslmode", "factory", NULL}; + "user", "password", "sslmode", + "connection_factory", NULL}; if (!PyArg_ParseTupleAndKeywords(args, keywds, "|sssssssO", kwlist, &dsn, &database, &host, &port, |