mirror of
https://github.com/psycopg/psycopg2.git
synced 2025-06-21 13:33:14 +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
|
- Fixed adaptation of None in composite types (ticket #26). Bug report by
|
||||||
Karsten Hilbert.
|
Karsten Hilbert.
|
||||||
- Fixed several reference leaks in less common code paths.
|
- 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
|
What's new in psycopg 2.3.2
|
||||||
|
|
|
@ -127,6 +127,21 @@ lobject_close_locked(lobjectObject *self, char **error)
|
||||||
{
|
{
|
||||||
int retvalue;
|
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 ||
|
if (self->conn->isolation_level == ISOLATION_LEVEL_AUTOCOMMIT ||
|
||||||
self->conn->mark != self->mark ||
|
self->conn->mark != self->mark ||
|
||||||
self->fd == -1)
|
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",
|
Dprintf("_pq_tpc_command: pgconn = %p, command = %s",
|
||||||
conn->pgconn, cmd);
|
conn->pgconn, cmd);
|
||||||
|
|
||||||
|
conn->mark += 1;
|
||||||
|
|
||||||
/* convert the xid into the postgres transaction_id and quote it. */
|
/* convert the xid into the postgres transaction_id and quote it. */
|
||||||
if (!(etid = psycopg_escape_string((PyObject *)conn, tid, 0, NULL, NULL)))
|
if (!(etid = psycopg_escape_string((PyObject *)conn, tid, 0, NULL, NULL)))
|
||||||
{ goto exit; }
|
{ goto exit; }
|
||||||
|
|
|
@ -1,5 +1,28 @@
|
||||||
#!/usr/bin/env python
|
#!/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
|
import sys
|
||||||
from testconfig import dsn
|
from testconfig import dsn
|
||||||
from testutils import unittest
|
from testutils import unittest
|
||||||
|
|
|
@ -1,5 +1,27 @@
|
||||||
#!/usr/bin/env python
|
#!/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 psycopg2
|
||||||
import time
|
import time
|
||||||
import unittest
|
import unittest
|
||||||
|
|
|
@ -1,5 +1,27 @@
|
||||||
#!/usr/bin/env python
|
#!/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
|
||||||
import psycopg2.extensions
|
import psycopg2.extensions
|
||||||
import time
|
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
|
#!/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
|
from testutils import unittest, skip_if_no_pg_sleep
|
||||||
|
|
||||||
import psycopg2
|
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
|
#!/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 time
|
||||||
import threading
|
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
|
#!/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 time
|
||||||
import threading
|
import threading
|
||||||
from testutils import unittest, decorate_all_tests, skip_if_no_pg_sleep
|
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])
|
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):
|
class ConnectionTwoPhaseTests(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self._conns = []
|
self._conns = []
|
||||||
|
@ -332,7 +330,6 @@ class ConnectionTwoPhaseTests(unittest.TestCase):
|
||||||
if not conn.closed:
|
if not conn.closed:
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
|
|
||||||
def clear_test_xacts(self):
|
def clear_test_xacts(self):
|
||||||
"""Rollback all the prepared transaction in the testing db."""
|
"""Rollback all the prepared transaction in the testing db."""
|
||||||
cnn = self.connect()
|
cnn = self.connect()
|
||||||
|
@ -686,6 +683,7 @@ class ConnectionTwoPhaseTests(unittest.TestCase):
|
||||||
cnn.tpc_prepare()
|
cnn.tpc_prepare()
|
||||||
self.assertRaises(psycopg2.ProgrammingError, cnn.cancel)
|
self.assertRaises(psycopg2.ProgrammingError, cnn.cancel)
|
||||||
|
|
||||||
|
from testutils import skip_if_tpc_disabled
|
||||||
decorate_all_tests(ConnectionTwoPhaseTests, 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
|
#!/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 os
|
||||||
import string
|
import string
|
||||||
from testutils import unittest, decorate_all_tests
|
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
|
#!/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 unittest
|
||||||
import psycopg2
|
import psycopg2
|
||||||
import psycopg2.extensions
|
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
|
#!/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 math
|
||||||
import unittest
|
import unittest
|
||||||
import psycopg2
|
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
|
#!/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 unittest
|
||||||
import psycopg2
|
import psycopg2
|
||||||
import psycopg2.extensions
|
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
|
#!/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 os
|
||||||
import shutil
|
import shutil
|
||||||
import tempfile
|
import tempfile
|
||||||
|
from testutils import unittest, decorate_all_tests, skip_if_tpc_disabled
|
||||||
|
|
||||||
import psycopg2
|
import psycopg2
|
||||||
import psycopg2.extensions
|
import psycopg2.extensions
|
||||||
|
@ -31,13 +55,17 @@ def skip_if_green(f):
|
||||||
class LargeObjectMixin(object):
|
class LargeObjectMixin(object):
|
||||||
# doesn't derive from TestCase to avoid repeating tests twice.
|
# doesn't derive from TestCase to avoid repeating tests twice.
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.conn = psycopg2.connect(dsn)
|
self.conn = self.connect()
|
||||||
self.lo_oid = None
|
self.lo_oid = None
|
||||||
self.tmpdir = None
|
self.tmpdir = None
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
if self.tmpdir:
|
if self.tmpdir:
|
||||||
shutil.rmtree(self.tmpdir, ignore_errors=True)
|
shutil.rmtree(self.tmpdir, ignore_errors=True)
|
||||||
|
|
||||||
|
if self.conn.closed:
|
||||||
|
return
|
||||||
|
|
||||||
if self.lo_oid is not None:
|
if self.lo_oid is not None:
|
||||||
self.conn.rollback()
|
self.conn.rollback()
|
||||||
try:
|
try:
|
||||||
|
@ -48,6 +76,9 @@ class LargeObjectMixin(object):
|
||||||
lo.unlink()
|
lo.unlink()
|
||||||
self.conn.close()
|
self.conn.close()
|
||||||
|
|
||||||
|
def connect(self):
|
||||||
|
return psycopg2.connect(dsn)
|
||||||
|
|
||||||
|
|
||||||
class LargeObjectTests(LargeObjectMixin, unittest.TestCase):
|
class LargeObjectTests(LargeObjectMixin, unittest.TestCase):
|
||||||
def test_create(self):
|
def test_create(self):
|
||||||
|
@ -84,6 +115,11 @@ class LargeObjectTests(LargeObjectMixin, unittest.TestCase):
|
||||||
self.assertEqual(lo2.oid, lo.oid)
|
self.assertEqual(lo2.oid, lo.oid)
|
||||||
self.assertEqual(lo2.closed, True)
|
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):
|
def test_create_with_oid(self):
|
||||||
# Create and delete a large object to get an unused Oid.
|
# Create and delete a large object to get an unused Oid.
|
||||||
lo = self.conn.lobject()
|
lo = self.conn.lobject()
|
||||||
|
@ -293,6 +329,28 @@ class LargeObjectTests(LargeObjectMixin, unittest.TestCase):
|
||||||
finally:
|
finally:
|
||||||
f.close()
|
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_no_lo)
|
||||||
decorate_all_tests(LargeObjectTests, skip_if_green)
|
decorate_all_tests(LargeObjectTests, skip_if_green)
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,27 @@
|
||||||
#!/usr/bin/env python
|
#!/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
|
from testutils import unittest
|
||||||
|
|
||||||
import psycopg2
|
import psycopg2
|
||||||
|
|
|
@ -1,7 +1,30 @@
|
||||||
#!/usr/bin/env python
|
#!/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
|
||||||
import dbapi20_tpc
|
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
|
from testutils import unittest, decorate_all_tests
|
||||||
import psycopg2
|
import psycopg2
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,27 @@
|
||||||
#!/usr/bin/env python
|
#!/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
|
import sys
|
||||||
from testutils import unittest
|
from testutils import unittest
|
||||||
from testconfig import dsn
|
from testconfig import dsn
|
||||||
|
|
|
@ -1,4 +1,27 @@
|
||||||
#!/usr/bin/env python
|
#!/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
|
import threading
|
||||||
from testutils import unittest, skip_if_no_pg_sleep
|
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.
|
# 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_
|
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):
|
def skip_on_python2(f):
|
||||||
"""Skip a test on Python 3 and following."""
|
"""Skip a test on Python 3 and following."""
|
||||||
def skip_on_python2_(self):
|
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