diff options
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/exc.py | 9 | ||||
| -rw-r--r-- | lib/sqlalchemy/pool/base.py | 13 | ||||
| -rw-r--r-- | lib/sqlalchemy/testing/warnings.py | 42 |
3 files changed, 27 insertions, 37 deletions
diff --git a/lib/sqlalchemy/exc.py b/lib/sqlalchemy/exc.py index f5b9f6e75..8fdacbdf2 100644 --- a/lib/sqlalchemy/exc.py +++ b/lib/sqlalchemy/exc.py @@ -672,6 +672,15 @@ class NotSupportedError(DatabaseError): # Warnings +class SATestSuiteWarning(Warning): + """warning for a condition detected during tests that is non-fatal + + Currently outside of SAWarning so that we can work around tools like + Alembic doing the wrong thing with warnings. + + """ + + class SADeprecationWarning(HasDescriptionCode, DeprecationWarning): """Issued for usage of deprecated APIs.""" diff --git a/lib/sqlalchemy/pool/base.py b/lib/sqlalchemy/pool/base.py index 0512582f8..6c770e201 100644 --- a/lib/sqlalchemy/pool/base.py +++ b/lib/sqlalchemy/pool/base.py @@ -757,13 +757,14 @@ def _finalize_fairy( else: message = ( "The garbage collector is trying to clean up " - "connection %r. This feature is unsupported on async " + f"connection {dbapi_connection!r}. This feature is " + "unsupported on async " "dbapi, since no IO can be performed at this stage to " "reset the connection. Please close out all " "connections when they are no longer used, calling " "``close()`` or using a context manager to " "manage their lifetime." - ) % dbapi_connection + ) pool.logger.error(message) util.warn(message) @@ -779,6 +780,14 @@ def _finalize_fairy( if connection_record and connection_record.fairy_ref is not None: connection_record.checkin() + # give gc some help. See + # test/engine/test_pool.py::PoolEventsTest::test_checkin_event_gc[True] + # which actually started failing when pytest warnings plugin was + # turned on, due to util.warn() above + del dbapi_connection + del connection_record + del fairy + # a dictionary of the _ConnectionFairy weakrefs to _ConnectionRecord, so that # GC under pypy will call ConnectionFairy finalizers. linked directly to the diff --git a/lib/sqlalchemy/testing/warnings.py b/lib/sqlalchemy/testing/warnings.py index 1c2039602..2d65e68ec 100644 --- a/lib/sqlalchemy/testing/warnings.py +++ b/lib/sqlalchemy/testing/warnings.py @@ -4,54 +4,26 @@ # # This module is part of SQLAlchemy and is released under # the MIT License: https://www.opensource.org/licenses/mit-license.php -import warnings - from . import assertions from .. import exc as sa_exc +from ..exc import SATestSuiteWarning from ..util.langhelpers import _warnings_warn -class SATestSuiteWarning(Warning): - """warning for a condition detected during tests that is non-fatal - - Currently outside of SAWarning so that we can work around tools like - Alembic doing the wrong thing with warnings. - - """ - - def warn_test_suite(message): _warnings_warn(message, category=SATestSuiteWarning) def setup_filters(): - """Set global warning behavior for the test suite.""" - - # TODO: at this point we can use the normal pytest warnings plugin, - # if we decide the test suite can be linked to pytest only - - origin = r"^(?:test|sqlalchemy)\..*" + """hook for setting up warnings filters. - warnings.filterwarnings( - "ignore", category=sa_exc.SAPendingDeprecationWarning - ) - warnings.filterwarnings("error", category=sa_exc.SADeprecationWarning) - warnings.filterwarnings("error", category=sa_exc.SAWarning) + Note that when the pytest warnings plugin is in place, that plugin + overwrites whatever happens here. - warnings.filterwarnings("always", category=SATestSuiteWarning) + Current SQLAlchemy 2.0 default is to use pytest warnings plugin + which is configured in pyproject.toml. - warnings.filterwarnings( - "error", category=DeprecationWarning, module=origin - ) - - try: - import pytest - except ImportError: - pass - else: - warnings.filterwarnings( - "once", category=pytest.PytestDeprecationWarning, module=origin - ) + """ def assert_warnings(fn, warning_msgs, regex=False): |
