mirror of
https://github.com/psycopg/psycopg2.git
synced 2025-02-07 21:00:33 +03:00
Use wrap to fix names of decorated test methods
Decorators not using wrap() prevent running the test from command line, e.g. with: python tests/__init__.py test_module.TestSuite.test_method
This commit is contained in:
parent
0c0e2a2455
commit
09629a6dbc
|
@ -25,14 +25,17 @@
|
|||
import os
|
||||
import shutil
|
||||
import tempfile
|
||||
from functools import wraps
|
||||
|
||||
import psycopg2
|
||||
import psycopg2.extensions
|
||||
from psycopg2.extensions import b
|
||||
from testconfig import dsn, green
|
||||
from testutils import unittest, decorate_all_tests, skip_if_tpc_disabled
|
||||
from testutils import skip_if_green
|
||||
|
||||
def skip_if_no_lo(f):
|
||||
@wraps(f)
|
||||
def skip_if_no_lo_(self):
|
||||
if self.conn.server_version < 80100:
|
||||
return self.skipTest("large objects only supported from PG 8.1")
|
||||
|
@ -41,14 +44,7 @@ def skip_if_no_lo(f):
|
|||
|
||||
return skip_if_no_lo_
|
||||
|
||||
def skip_if_green(f):
|
||||
def skip_if_green_(self):
|
||||
if green:
|
||||
return self.skipTest("libpq doesn't support LO in async mode")
|
||||
else:
|
||||
return f(self)
|
||||
|
||||
return skip_if_green_
|
||||
skip_lo_if_green = skip_if_green("libpq doesn't support LO in async mode")
|
||||
|
||||
|
||||
class LargeObjectMixin(object):
|
||||
|
@ -379,10 +375,11 @@ class LargeObjectTests(LargeObjectMixin, unittest.TestCase):
|
|||
|
||||
|
||||
decorate_all_tests(LargeObjectTests, skip_if_no_lo)
|
||||
decorate_all_tests(LargeObjectTests, skip_if_green)
|
||||
decorate_all_tests(LargeObjectTests, skip_lo_if_green)
|
||||
|
||||
|
||||
def skip_if_no_truncate(f):
|
||||
@wraps(f)
|
||||
def skip_if_no_truncate_(self):
|
||||
if self.conn.server_version < 80300:
|
||||
return self.skipTest(
|
||||
|
@ -434,7 +431,7 @@ class LargeObjectTruncateTests(LargeObjectMixin, unittest.TestCase):
|
|||
self.assertRaises(psycopg2.ProgrammingError, lo.truncate)
|
||||
|
||||
decorate_all_tests(LargeObjectTruncateTests, skip_if_no_lo)
|
||||
decorate_all_tests(LargeObjectTruncateTests, skip_if_green)
|
||||
decorate_all_tests(LargeObjectTruncateTests, skip_lo_if_green)
|
||||
decorate_all_tests(LargeObjectTruncateTests, skip_if_no_truncate)
|
||||
|
||||
|
||||
|
|
|
@ -26,7 +26,9 @@ try:
|
|||
import decimal
|
||||
except:
|
||||
pass
|
||||
|
||||
import sys
|
||||
from functools import wraps
|
||||
import testutils
|
||||
from testutils import unittest, decorate_all_tests
|
||||
from testconfig import dsn
|
||||
|
@ -461,6 +463,7 @@ class ByteaParserTest(unittest.TestCase):
|
|||
self.assertEqual(rv, tgt)
|
||||
|
||||
def skip_if_cant_cast(f):
|
||||
@wraps(f)
|
||||
def skip_if_cant_cast_(self, *args, **kwargs):
|
||||
if self._cast is None:
|
||||
return self.skipTest("can't test bytea parser: %s - %s"
|
||||
|
|
|
@ -18,6 +18,7 @@ import re
|
|||
import sys
|
||||
from decimal import Decimal
|
||||
from datetime import date, datetime
|
||||
from functools import wraps
|
||||
|
||||
from testutils import unittest, skip_if_no_uuid, skip_before_postgres
|
||||
from testutils import decorate_all_tests
|
||||
|
@ -124,6 +125,7 @@ class TypesExtrasTests(unittest.TestCase):
|
|||
|
||||
|
||||
def skip_if_no_hstore(f):
|
||||
@wraps(f)
|
||||
def skip_if_no_hstore_(self):
|
||||
from psycopg2.extras import HstoreAdapter
|
||||
oids = HstoreAdapter.get_oids(self.conn)
|
||||
|
@ -447,6 +449,7 @@ class HstoreTestCase(unittest.TestCase):
|
|||
|
||||
|
||||
def skip_if_no_composite(f):
|
||||
@wraps(f)
|
||||
def skip_if_no_composite_(self):
|
||||
if self.conn.server_version < 80000:
|
||||
return self.skipTest(
|
||||
|
@ -455,7 +458,6 @@ def skip_if_no_composite(f):
|
|||
|
||||
return f(self)
|
||||
|
||||
skip_if_no_composite_.__name__ = f.__name__
|
||||
return skip_if_no_composite_
|
||||
|
||||
class AdaptTypeTestCase(unittest.TestCase):
|
||||
|
@ -831,7 +833,8 @@ class AdaptTypeTestCase(unittest.TestCase):
|
|||
|
||||
|
||||
def skip_if_json_module(f):
|
||||
"""Skip a test if no Python json module is available"""
|
||||
"""Skip a test if a Python json module *is* available"""
|
||||
@wraps(f)
|
||||
def skip_if_json_module_(self):
|
||||
if psycopg2.extras.json is not None:
|
||||
return self.skipTest("json module is available")
|
||||
|
@ -842,6 +845,7 @@ def skip_if_json_module(f):
|
|||
|
||||
def skip_if_no_json_module(f):
|
||||
"""Skip a test if no Python json module is available"""
|
||||
@wraps(f)
|
||||
def skip_if_no_json_module_(self):
|
||||
if psycopg2.extras.json is None:
|
||||
return self.skipTest("json module not available")
|
||||
|
@ -852,6 +856,7 @@ def skip_if_no_json_module(f):
|
|||
|
||||
def skip_if_no_json_type(f):
|
||||
"""Skip a test if PostgreSQL json type is not available"""
|
||||
@wraps(f)
|
||||
def skip_if_no_json_type_(self):
|
||||
curs = self.conn.cursor()
|
||||
curs.execute("select oid from pg_type where typname = 'json'")
|
||||
|
@ -1242,6 +1247,7 @@ class RangeTestCase(unittest.TestCase):
|
|||
|
||||
|
||||
def skip_if_no_range(f):
|
||||
@wraps(f)
|
||||
def skip_if_no_range_(self):
|
||||
if self.conn.server_version < 90200:
|
||||
return self.skipTest(
|
||||
|
@ -1250,7 +1256,6 @@ def skip_if_no_range(f):
|
|||
|
||||
return f(self)
|
||||
|
||||
skip_if_no_range_.__name__ = f.__name__
|
||||
return skip_if_no_range_
|
||||
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
import os
|
||||
import sys
|
||||
from functools import wraps
|
||||
|
||||
try:
|
||||
import unittest2
|
||||
|
@ -43,6 +44,7 @@ else:
|
|||
|
||||
def skipIf(cond, msg):
|
||||
def skipIf_(f):
|
||||
@wraps(f)
|
||||
def skipIf__(self):
|
||||
if cond:
|
||||
warnings.warn(msg)
|
||||
|
@ -81,6 +83,7 @@ def decorate_all_tests(cls, decorator):
|
|||
|
||||
def skip_if_no_uuid(f):
|
||||
"""Decorator to skip a test if uuid is not supported by Py/PG."""
|
||||
@wraps(f)
|
||||
def skip_if_no_uuid_(self):
|
||||
try:
|
||||
import uuid
|
||||
|
@ -104,6 +107,7 @@ def skip_if_no_uuid(f):
|
|||
|
||||
def skip_if_tpc_disabled(f):
|
||||
"""Skip a test if the server has tpc support disabled."""
|
||||
@wraps(f)
|
||||
def skip_if_tpc_disabled_(self):
|
||||
from psycopg2 import ProgrammingError
|
||||
cnn = self.connect()
|
||||
|
@ -123,11 +127,11 @@ def skip_if_tpc_disabled(f):
|
|||
"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_if_no_namedtuple(f):
|
||||
@wraps(f)
|
||||
def skip_if_no_namedtuple_(self):
|
||||
try:
|
||||
from collections import namedtuple
|
||||
|
@ -136,12 +140,12 @@ def skip_if_no_namedtuple(f):
|
|||
else:
|
||||
return f(self)
|
||||
|
||||
skip_if_no_namedtuple_.__name__ = f.__name__
|
||||
return skip_if_no_namedtuple_
|
||||
|
||||
|
||||
def skip_if_no_iobase(f):
|
||||
"""Skip a test if io.TextIOBase is not available."""
|
||||
@wraps(f)
|
||||
def skip_if_no_iobase_(self):
|
||||
try:
|
||||
from io import TextIOBase
|
||||
|
@ -157,6 +161,7 @@ def skip_before_postgres(*ver):
|
|||
"""Skip a test on PostgreSQL before a certain version."""
|
||||
ver = ver + (0,) * (3 - len(ver))
|
||||
def skip_before_postgres_(f):
|
||||
@wraps(f)
|
||||
def skip_before_postgres__(self):
|
||||
if self.conn.server_version < int("%d%02d%02d" % ver):
|
||||
return self.skipTest("skipped because PostgreSQL %s"
|
||||
|
@ -171,6 +176,7 @@ def skip_after_postgres(*ver):
|
|||
"""Skip a test on PostgreSQL after (including) a certain version."""
|
||||
ver = ver + (0,) * (3 - len(ver))
|
||||
def skip_after_postgres_(f):
|
||||
@wraps(f)
|
||||
def skip_after_postgres__(self):
|
||||
if self.conn.server_version >= int("%d%02d%02d" % ver):
|
||||
return self.skipTest("skipped because PostgreSQL %s"
|
||||
|
@ -184,6 +190,7 @@ def skip_after_postgres(*ver):
|
|||
def skip_before_python(*ver):
|
||||
"""Skip a test on Python before a certain version."""
|
||||
def skip_before_python_(f):
|
||||
@wraps(f)
|
||||
def skip_before_python__(self):
|
||||
if sys.version_info[:len(ver)] < ver:
|
||||
return self.skipTest("skipped because Python %s"
|
||||
|
@ -197,6 +204,7 @@ def skip_before_python(*ver):
|
|||
def skip_from_python(*ver):
|
||||
"""Skip a test on Python after (including) a certain version."""
|
||||
def skip_from_python_(f):
|
||||
@wraps(f)
|
||||
def skip_from_python__(self):
|
||||
if sys.version_info[:len(ver)] >= ver:
|
||||
return self.skipTest("skipped because Python %s"
|
||||
|
@ -209,6 +217,7 @@ def skip_from_python(*ver):
|
|||
|
||||
def skip_if_no_superuser(f):
|
||||
"""Skip a test if the database user running the test is not a superuser"""
|
||||
@wraps(f)
|
||||
def skip_if_no_superuser_(self):
|
||||
from psycopg2 import ProgrammingError
|
||||
try:
|
||||
|
@ -222,16 +231,20 @@ def skip_if_no_superuser(f):
|
|||
|
||||
return skip_if_no_superuser_
|
||||
|
||||
def skip_copy_if_green(f):
|
||||
def skip_copy_if_green_(self):
|
||||
def skip_if_green(reason):
|
||||
def skip_if_green_(f):
|
||||
@wraps(f)
|
||||
def skip_if_green__(self):
|
||||
from testconfig import green
|
||||
if green:
|
||||
return self.skipTest("copy in async mode currently not supported")
|
||||
return self.skipTest(reason)
|
||||
else:
|
||||
return f(self)
|
||||
|
||||
return skip_copy_if_green_
|
||||
return skip_if_green__
|
||||
return skip_if_green_
|
||||
|
||||
skip_copy_if_green = skip_if_green("copy in async mode currently not supported")
|
||||
|
||||
def script_to_py3(script):
|
||||
"""Convert a script to Python3 syntax if required."""
|
||||
|
|
Loading…
Reference in New Issue
Block a user