mirror of
https://github.com/psycopg/psycopg2.git
synced 2025-02-07 12:50:32 +03:00
Merge branch 'python2' into python3
Conflicts: NEWS-2.3 tests/__init__.py tests/test_lobject.py tests/test_quote.py tests/testutils.py
This commit is contained in:
commit
79048ff19a
2
NEWS-2.3
2
NEWS-2.3
|
@ -18,6 +18,8 @@ What's new in psycopg 2.3.3
|
|||
- Fixed adaptation of None in composite types (ticket #26). Bug report by
|
||||
Karsten Hilbert.
|
||||
- Fixed several reference leaks in less common code paths.
|
||||
- Fixed segfault when a large object is closed and its connection no more
|
||||
available.
|
||||
|
||||
|
||||
What's new in psycopg 2.3.2
|
||||
|
|
|
@ -127,6 +127,21 @@ lobject_close_locked(lobjectObject *self, char **error)
|
|||
{
|
||||
int retvalue;
|
||||
|
||||
Dprintf("lobject_close_locked: conn->closed %ld", self->conn->closed);
|
||||
switch (self->conn->closed) {
|
||||
case 0:
|
||||
/* Connection is open, go ahead */
|
||||
break;
|
||||
case 1:
|
||||
/* Connection is closed, return a success */
|
||||
return 0;
|
||||
break;
|
||||
default:
|
||||
PyErr_SetString(OperationalError, "the connection is broken");
|
||||
return -1;
|
||||
break;
|
||||
}
|
||||
|
||||
if (self->conn->isolation_level == ISOLATION_LEVEL_AUTOCOMMIT ||
|
||||
self->conn->mark != self->mark ||
|
||||
self->fd == -1)
|
||||
|
|
|
@ -606,6 +606,8 @@ pq_tpc_command_locked(connectionObject *conn, const char *cmd, const char *tid,
|
|||
Dprintf("_pq_tpc_command: pgconn = %p, command = %s",
|
||||
conn->pgconn, cmd);
|
||||
|
||||
conn->mark += 1;
|
||||
|
||||
/* convert the xid into the postgres transaction_id and quote it. */
|
||||
if (!(etid = psycopg_escape_string((PyObject *)conn, tid, 0, NULL, NULL)))
|
||||
{ goto exit; }
|
||||
|
|
|
@ -1,5 +1,28 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# psycopg2 test suite
|
||||
#
|
||||
# Copyright (C) 2007-2011 Federico Di Gregorio <fog@debian.org>
|
||||
#
|
||||
# psycopg2 is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# In addition, as a special exception, the copyright holders give
|
||||
# permission to link this program with the OpenSSL library (or with
|
||||
# modified versions of OpenSSL that use the same license as OpenSSL),
|
||||
# and distribute linked combinations including the two.
|
||||
#
|
||||
# You must obey the GNU Lesser General Public License in all respects for
|
||||
# all of the code used other than OpenSSL.
|
||||
#
|
||||
# psycopg2 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 Lesser General Public
|
||||
# License for more details.
|
||||
|
||||
import os
|
||||
import sys
|
||||
from testconfig import dsn
|
||||
from testutils import unittest
|
||||
|
|
|
@ -1,5 +1,27 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# bugX000.py - test for DateTime object allocation bug
|
||||
#
|
||||
# Copyright (C) 2007-2011 Federico Di Gregorio <fog@debian.org>
|
||||
#
|
||||
# psycopg2 is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# In addition, as a special exception, the copyright holders give
|
||||
# permission to link this program with the OpenSSL library (or with
|
||||
# modified versions of OpenSSL that use the same license as OpenSSL),
|
||||
# and distribute linked combinations including the two.
|
||||
#
|
||||
# You must obey the GNU Lesser General Public License in all respects for
|
||||
# all of the code used other than OpenSSL.
|
||||
#
|
||||
# psycopg2 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 Lesser General Public
|
||||
# License for more details.
|
||||
|
||||
import psycopg2
|
||||
import time
|
||||
import unittest
|
||||
|
|
|
@ -1,5 +1,27 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# bug_gc.py - test for refcounting/GC bug
|
||||
#
|
||||
# Copyright (C) 2010-2011 Federico Di Gregorio <fog@debian.org>
|
||||
#
|
||||
# psycopg2 is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# In addition, as a special exception, the copyright holders give
|
||||
# permission to link this program with the OpenSSL library (or with
|
||||
# modified versions of OpenSSL that use the same license as OpenSSL),
|
||||
# and distribute linked combinations including the two.
|
||||
#
|
||||
# You must obey the GNU Lesser General Public License in all respects for
|
||||
# all of the code used other than OpenSSL.
|
||||
#
|
||||
# psycopg2 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 Lesser General Public
|
||||
# License for more details.
|
||||
|
||||
import psycopg2
|
||||
import psycopg2.extensions
|
||||
import time
|
||||
|
|
0
tests/extras_dictcursor.py
Normal file → Executable file
0
tests/extras_dictcursor.py
Normal file → Executable file
|
@ -1,4 +1,28 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# test_async.py - unit test for asynchronous API
|
||||
#
|
||||
# Copyright (C) 2010-2011 Jan Urbański <wulczer@wulczer.org>
|
||||
#
|
||||
# psycopg2 is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# In addition, as a special exception, the copyright holders give
|
||||
# permission to link this program with the OpenSSL library (or with
|
||||
# modified versions of OpenSSL that use the same license as OpenSSL),
|
||||
# and distribute linked combinations including the two.
|
||||
#
|
||||
# You must obey the GNU Lesser General Public License in all respects for
|
||||
# all of the code used other than OpenSSL.
|
||||
#
|
||||
# psycopg2 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 Lesser General Public
|
||||
# License for more details.
|
||||
|
||||
from testutils import unittest, skip_if_no_pg_sleep
|
||||
|
||||
import psycopg2
|
||||
|
|
23
tests/test_cancel.py
Normal file → Executable file
23
tests/test_cancel.py
Normal file → Executable file
|
@ -1,4 +1,27 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# test_cancel.py - unit test for query cancellation
|
||||
#
|
||||
# Copyright (C) 2010-2011 Jan Urbański <wulczer@wulczer.org>
|
||||
#
|
||||
# psycopg2 is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# In addition, as a special exception, the copyright holders give
|
||||
# permission to link this program with the OpenSSL library (or with
|
||||
# modified versions of OpenSSL that use the same license as OpenSSL),
|
||||
# and distribute linked combinations including the two.
|
||||
#
|
||||
# You must obey the GNU Lesser General Public License in all respects for
|
||||
# all of the code used other than OpenSSL.
|
||||
#
|
||||
# psycopg2 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 Lesser General Public
|
||||
# License for more details.
|
||||
|
||||
import time
|
||||
import threading
|
||||
|
|
48
tests/test_connection.py
Normal file → Executable file
48
tests/test_connection.py
Normal file → Executable file
|
@ -1,5 +1,27 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# test_connection.py - unit test for connection attributes
|
||||
#
|
||||
# Copyright (C) 2008-2011 James Henstridge <james@jamesh.id.au>
|
||||
#
|
||||
# psycopg2 is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# In addition, as a special exception, the copyright holders give
|
||||
# permission to link this program with the OpenSSL library (or with
|
||||
# modified versions of OpenSSL that use the same license as OpenSSL),
|
||||
# and distribute linked combinations including the two.
|
||||
#
|
||||
# You must obey the GNU Lesser General Public License in all respects for
|
||||
# all of the code used other than OpenSSL.
|
||||
#
|
||||
# psycopg2 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 Lesser General Public
|
||||
# License for more details.
|
||||
|
||||
import time
|
||||
import threading
|
||||
from testutils import unittest, decorate_all_tests, skip_if_no_pg_sleep
|
||||
|
@ -293,30 +315,6 @@ class IsolationLevelsTestCase(unittest.TestCase):
|
|||
self.assertEqual(2, cur2.fetchone()[0])
|
||||
|
||||
|
||||
def skip_if_tpc_disabled(f):
|
||||
"""Skip a test if the server has tpc support disabled."""
|
||||
def skip_if_tpc_disabled_(self):
|
||||
cnn = self.connect()
|
||||
cur = cnn.cursor()
|
||||
try:
|
||||
cur.execute("SHOW max_prepared_transactions;")
|
||||
except psycopg2.ProgrammingError:
|
||||
return self.skipTest(
|
||||
"server too old: two phase transactions not supported.")
|
||||
else:
|
||||
mtp = int(cur.fetchone()[0])
|
||||
cnn.close()
|
||||
|
||||
if not mtp:
|
||||
return self.skipTest(
|
||||
"server not configured for two phase transactions. "
|
||||
"set max_prepared_transactions to > 0 to run the test")
|
||||
return f(self)
|
||||
|
||||
skip_if_tpc_disabled_.__name__ = f.__name__
|
||||
return skip_if_tpc_disabled_
|
||||
|
||||
|
||||
class ConnectionTwoPhaseTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self._conns = []
|
||||
|
@ -332,7 +330,6 @@ class ConnectionTwoPhaseTests(unittest.TestCase):
|
|||
if not conn.closed:
|
||||
conn.close()
|
||||
|
||||
|
||||
def clear_test_xacts(self):
|
||||
"""Rollback all the prepared transaction in the testing db."""
|
||||
cnn = self.connect()
|
||||
|
@ -686,6 +683,7 @@ class ConnectionTwoPhaseTests(unittest.TestCase):
|
|||
cnn.tpc_prepare()
|
||||
self.assertRaises(psycopg2.ProgrammingError, cnn.cancel)
|
||||
|
||||
from testutils import skip_if_tpc_disabled
|
||||
decorate_all_tests(ConnectionTwoPhaseTests, skip_if_tpc_disabled)
|
||||
|
||||
|
||||
|
|
23
tests/test_copy.py
Normal file → Executable file
23
tests/test_copy.py
Normal file → Executable file
|
@ -1,4 +1,27 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# test_copy.py - unit test for COPY support
|
||||
#
|
||||
# Copyright (C) 2010-2011 Daniele Varrazzo <daniele.varrazzo@gmail.com>
|
||||
#
|
||||
# psycopg2 is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# In addition, as a special exception, the copyright holders give
|
||||
# permission to link this program with the OpenSSL library (or with
|
||||
# modified versions of OpenSSL that use the same license as OpenSSL),
|
||||
# and distribute linked combinations including the two.
|
||||
#
|
||||
# You must obey the GNU Lesser General Public License in all respects for
|
||||
# all of the code used other than OpenSSL.
|
||||
#
|
||||
# psycopg2 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 Lesser General Public
|
||||
# License for more details.
|
||||
|
||||
import os
|
||||
import string
|
||||
from testutils import unittest, decorate_all_tests
|
||||
|
|
22
tests/test_cursor.py
Normal file → Executable file
22
tests/test_cursor.py
Normal file → Executable file
|
@ -1,5 +1,27 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# test_cursor.py - unit test for cursor attributes
|
||||
#
|
||||
# Copyright (C) 2010-2011 Daniele Varrazzo <daniele.varrazzo@gmail.com>
|
||||
#
|
||||
# psycopg2 is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# In addition, as a special exception, the copyright holders give
|
||||
# permission to link this program with the OpenSSL library (or with
|
||||
# modified versions of OpenSSL that use the same license as OpenSSL),
|
||||
# and distribute linked combinations including the two.
|
||||
#
|
||||
# You must obey the GNU Lesser General Public License in all respects for
|
||||
# all of the code used other than OpenSSL.
|
||||
#
|
||||
# psycopg2 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 Lesser General Public
|
||||
# License for more details.
|
||||
|
||||
import unittest
|
||||
import psycopg2
|
||||
import psycopg2.extensions
|
||||
|
|
22
tests/test_dates.py
Normal file → Executable file
22
tests/test_dates.py
Normal file → Executable file
|
@ -1,5 +1,27 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# test_dates.py - unit test for dates handling
|
||||
#
|
||||
# Copyright (C) 2008-2011 James Henstridge <james@jamesh.id.au>
|
||||
#
|
||||
# psycopg2 is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# In addition, as a special exception, the copyright holders give
|
||||
# permission to link this program with the OpenSSL library (or with
|
||||
# modified versions of OpenSSL that use the same license as OpenSSL),
|
||||
# and distribute linked combinations including the two.
|
||||
#
|
||||
# You must obey the GNU Lesser General Public License in all respects for
|
||||
# all of the code used other than OpenSSL.
|
||||
#
|
||||
# psycopg2 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 Lesser General Public
|
||||
# License for more details.
|
||||
|
||||
import math
|
||||
import unittest
|
||||
import psycopg2
|
||||
|
|
22
tests/test_green.py
Normal file → Executable file
22
tests/test_green.py
Normal file → Executable file
|
@ -1,5 +1,27 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# test_green.py - unit test for async wait callback
|
||||
#
|
||||
# Copyright (C) 2010-2011 Daniele Varrazzo <daniele.varrazzo@gmail.com>
|
||||
#
|
||||
# psycopg2 is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# In addition, as a special exception, the copyright holders give
|
||||
# permission to link this program with the OpenSSL library (or with
|
||||
# modified versions of OpenSSL that use the same license as OpenSSL),
|
||||
# and distribute linked combinations including the two.
|
||||
#
|
||||
# You must obey the GNU Lesser General Public License in all respects for
|
||||
# all of the code used other than OpenSSL.
|
||||
#
|
||||
# psycopg2 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 Lesser General Public
|
||||
# License for more details.
|
||||
|
||||
import unittest
|
||||
import psycopg2
|
||||
import psycopg2.extensions
|
||||
|
|
60
tests/test_lobject.py
Normal file → Executable file
60
tests/test_lobject.py
Normal file → Executable file
|
@ -1,7 +1,31 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# test_lobject.py - unit test for large objects support
|
||||
#
|
||||
# Copyright (C) 2008-2011 James Henstridge <james@jamesh.id.au>
|
||||
#
|
||||
# psycopg2 is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# In addition, as a special exception, the copyright holders give
|
||||
# permission to link this program with the OpenSSL library (or with
|
||||
# modified versions of OpenSSL that use the same license as OpenSSL),
|
||||
# and distribute linked combinations including the two.
|
||||
#
|
||||
# You must obey the GNU Lesser General Public License in all respects for
|
||||
# all of the code used other than OpenSSL.
|
||||
#
|
||||
# psycopg2 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 Lesser General Public
|
||||
# License for more details.
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import tempfile
|
||||
from testutils import unittest, decorate_all_tests, skip_if_tpc_disabled
|
||||
|
||||
import psycopg2
|
||||
import psycopg2.extensions
|
||||
|
@ -31,13 +55,17 @@ def skip_if_green(f):
|
|||
class LargeObjectMixin(object):
|
||||
# doesn't derive from TestCase to avoid repeating tests twice.
|
||||
def setUp(self):
|
||||
self.conn = psycopg2.connect(dsn)
|
||||
self.conn = self.connect()
|
||||
self.lo_oid = None
|
||||
self.tmpdir = None
|
||||
|
||||
def tearDown(self):
|
||||
if self.tmpdir:
|
||||
shutil.rmtree(self.tmpdir, ignore_errors=True)
|
||||
|
||||
if self.conn.closed:
|
||||
return
|
||||
|
||||
if self.lo_oid is not None:
|
||||
self.conn.rollback()
|
||||
try:
|
||||
|
@ -48,6 +76,9 @@ class LargeObjectMixin(object):
|
|||
lo.unlink()
|
||||
self.conn.close()
|
||||
|
||||
def connect(self):
|
||||
return psycopg2.connect(dsn)
|
||||
|
||||
|
||||
class LargeObjectTests(LargeObjectMixin, unittest.TestCase):
|
||||
def test_create(self):
|
||||
|
@ -84,6 +115,11 @@ class LargeObjectTests(LargeObjectMixin, unittest.TestCase):
|
|||
self.assertEqual(lo2.oid, lo.oid)
|
||||
self.assertEqual(lo2.closed, True)
|
||||
|
||||
def test_close_connection_gone(self):
|
||||
lo = self.conn.lobject()
|
||||
self.conn.close()
|
||||
lo.close()
|
||||
|
||||
def test_create_with_oid(self):
|
||||
# Create and delete a large object to get an unused Oid.
|
||||
lo = self.conn.lobject()
|
||||
|
@ -293,6 +329,28 @@ class LargeObjectTests(LargeObjectMixin, unittest.TestCase):
|
|||
finally:
|
||||
f.close()
|
||||
|
||||
@skip_if_tpc_disabled
|
||||
def test_read_after_tpc_commit(self):
|
||||
self.conn.tpc_begin('test_lobject')
|
||||
lo = self.conn.lobject()
|
||||
self.lo_oid = lo.oid
|
||||
self.conn.tpc_commit()
|
||||
|
||||
self.assertRaises(psycopg2.ProgrammingError, lo.read, 5)
|
||||
|
||||
@skip_if_tpc_disabled
|
||||
def test_read_after_tpc_prepare(self):
|
||||
self.conn.tpc_begin('test_lobject')
|
||||
lo = self.conn.lobject()
|
||||
self.lo_oid = lo.oid
|
||||
self.conn.tpc_prepare()
|
||||
|
||||
try:
|
||||
self.assertRaises(psycopg2.ProgrammingError, lo.read, 5)
|
||||
finally:
|
||||
self.conn.tpc_commit()
|
||||
|
||||
|
||||
decorate_all_tests(LargeObjectTests, skip_if_no_lo)
|
||||
decorate_all_tests(LargeObjectTests, skip_if_green)
|
||||
|
||||
|
|
|
@ -1,4 +1,27 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# test_notify.py - unit test for async notifications
|
||||
#
|
||||
# Copyright (C) 2010-2011 Daniele Varrazzo <daniele.varrazzo@gmail.com>
|
||||
#
|
||||
# psycopg2 is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# In addition, as a special exception, the copyright holders give
|
||||
# permission to link this program with the OpenSSL library (or with
|
||||
# modified versions of OpenSSL that use the same license as OpenSSL),
|
||||
# and distribute linked combinations including the two.
|
||||
#
|
||||
# You must obey the GNU Lesser General Public License in all respects for
|
||||
# all of the code used other than OpenSSL.
|
||||
#
|
||||
# psycopg2 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 Lesser General Public
|
||||
# License for more details.
|
||||
|
||||
from testutils import unittest
|
||||
|
||||
import psycopg2
|
||||
|
|
|
@ -1,7 +1,30 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# test_psycopg2_dbapi20.py - DB API conformance test for psycopg2
|
||||
#
|
||||
# Copyright (C) 2006-2011 Federico Di Gregorio <fog@debian.org>
|
||||
#
|
||||
# psycopg2 is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# In addition, as a special exception, the copyright holders give
|
||||
# permission to link this program with the OpenSSL library (or with
|
||||
# modified versions of OpenSSL that use the same license as OpenSSL),
|
||||
# and distribute linked combinations including the two.
|
||||
#
|
||||
# You must obey the GNU Lesser General Public License in all respects for
|
||||
# all of the code used other than OpenSSL.
|
||||
#
|
||||
# psycopg2 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 Lesser General Public
|
||||
# License for more details.
|
||||
|
||||
import dbapi20
|
||||
import dbapi20_tpc
|
||||
from test_connection import skip_if_tpc_disabled
|
||||
from testutils import skip_if_tpc_disabled
|
||||
from testutils import unittest, decorate_all_tests
|
||||
import psycopg2
|
||||
|
||||
|
|
|
@ -1,4 +1,27 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# test_quote.py - unit test for strings quoting
|
||||
#
|
||||
# Copyright (C) 2007-2011 Daniele Varrazzo <daniele.varrazzo@gmail.com>
|
||||
#
|
||||
# psycopg2 is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# In addition, as a special exception, the copyright holders give
|
||||
# permission to link this program with the OpenSSL library (or with
|
||||
# modified versions of OpenSSL that use the same license as OpenSSL),
|
||||
# and distribute linked combinations including the two.
|
||||
#
|
||||
# You must obey the GNU Lesser General Public License in all respects for
|
||||
# all of the code used other than OpenSSL.
|
||||
#
|
||||
# psycopg2 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 Lesser General Public
|
||||
# License for more details.
|
||||
|
||||
import sys
|
||||
from testutils import unittest
|
||||
from testconfig import dsn
|
||||
|
|
|
@ -1,4 +1,27 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# test_transaction - unit test on transaction behaviour
|
||||
#
|
||||
# Copyright (C) 2007-2011 Federico Di Gregorio <fog@debian.org>
|
||||
#
|
||||
# psycopg2 is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# In addition, as a special exception, the copyright holders give
|
||||
# permission to link this program with the OpenSSL library (or with
|
||||
# modified versions of OpenSSL that use the same license as OpenSSL),
|
||||
# and distribute linked combinations including the two.
|
||||
#
|
||||
# You must obey the GNU Lesser General Public License in all respects for
|
||||
# all of the code used other than OpenSSL.
|
||||
#
|
||||
# psycopg2 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 Lesser General Public
|
||||
# License for more details.
|
||||
|
||||
import threading
|
||||
from testutils import unittest, skip_if_no_pg_sleep
|
||||
|
||||
|
|
|
@ -1,6 +1,25 @@
|
|||
# Utility module for psycopg2 testing.
|
||||
# testutils.py - utility module for psycopg2 testing.
|
||||
#
|
||||
# Copyright (C) 2010 Daniele Varrazzo <daniele.varrazzo@gmail.com>
|
||||
# Copyright (C) 2010-2011 Daniele Varrazzo <daniele.varrazzo@gmail.com>
|
||||
#
|
||||
# psycopg2 is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published
|
||||
# by the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# In addition, as a special exception, the copyright holders give
|
||||
# permission to link this program with the OpenSSL library (or with
|
||||
# modified versions of OpenSSL that use the same license as OpenSSL),
|
||||
# and distribute linked combinations including the two.
|
||||
#
|
||||
# You must obey the GNU Lesser General Public License in all respects for
|
||||
# all of the code used other than OpenSSL.
|
||||
#
|
||||
# psycopg2 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 Lesser General Public
|
||||
# License for more details.
|
||||
|
||||
|
||||
# Use unittest2 if available. Otherwise mock a skip facility with warnings.
|
||||
|
||||
|
@ -83,6 +102,32 @@ def skip_if_no_pg_sleep(name):
|
|||
|
||||
return skip_if_no_pg_sleep_
|
||||
|
||||
|
||||
def skip_if_tpc_disabled(f):
|
||||
"""Skip a test if the server has tpc support disabled."""
|
||||
def skip_if_tpc_disabled_(self):
|
||||
from psycopg2 import ProgrammingError
|
||||
cnn = self.connect()
|
||||
cur = cnn.cursor()
|
||||
try:
|
||||
cur.execute("SHOW max_prepared_transactions;")
|
||||
except ProgrammingError:
|
||||
return self.skipTest(
|
||||
"server too old: two phase transactions not supported.")
|
||||
else:
|
||||
mtp = int(cur.fetchone()[0])
|
||||
cnn.close()
|
||||
|
||||
if not mtp:
|
||||
return self.skipTest(
|
||||
"server not configured for two phase transactions. "
|
||||
"set max_prepared_transactions to > 0 to run the test")
|
||||
return f(self)
|
||||
|
||||
skip_if_tpc_disabled_.__name__ = f.__name__
|
||||
return skip_if_tpc_disabled_
|
||||
|
||||
|
||||
def skip_on_python2(f):
|
||||
"""Skip a test on Python 3 and following."""
|
||||
def skip_on_python2_(self):
|
||||
|
|
0
tests/types_extras.py
Normal file → Executable file
0
tests/types_extras.py
Normal file → Executable file
Loading…
Reference in New Issue
Block a user