diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2022-05-14 10:25:53 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2022-05-15 10:31:51 -0400 |
| commit | 257de6ebe15d3076e19f05f93c5b3c7fae25a4d3 (patch) | |
| tree | 6348bcdb7a9f38fc6a04be23ddc9ffec6c5261be /lib/sqlalchemy | |
| parent | 9f0db34563a05a7b9f6e09110d35ce0d0f36d3a9 (diff) | |
| download | sqlalchemy-257de6ebe15d3076e19f05f93c5b3c7fae25a4d3.tar.gz | |
adjust log stacklevel for py3.11.0b1; enable greenlet
Fixed issue where support for logging "stacklevel" implemented in
:ticket:`7612` required adjustment to work with recently released Python
3.11.0b1, also repairs the unit tests which tested this feature.
Install greenlet from a py311 compat patch.
re: the stacklevel thing, this is going to be very inconvenient
if we have to keep hardcoding numbers everywhere for every
new python version
Change-Id: I0c8f7293e98c0ca5cc544538284bfd1d3020cb1f
References: https://github.com/python-greenlet/greenlet/issues/288
Fixes: #8019
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/engine/base.py | 8 | ||||
| -rw-r--r-- | lib/sqlalchemy/log.py | 18 | ||||
| -rw-r--r-- | lib/sqlalchemy/testing/requirements.py | 4 | ||||
| -rw-r--r-- | lib/sqlalchemy/util/__init__.py | 1 |
4 files changed, 25 insertions, 6 deletions
diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index fe3bfa1ad..80e458e7c 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -187,8 +187,8 @@ class Connection(ConnectionEventsTarget, inspection.Inspectable["Inspector"]): if fmt: message = fmt(message) - if util.py38: - kw["stacklevel"] = 2 + if log.STACKLEVEL: + kw["stacklevel"] = 1 + log.STACKLEVEL_OFFSET self.engine.logger.info(message, *arg, **kw) @@ -198,8 +198,8 @@ class Connection(ConnectionEventsTarget, inspection.Inspectable["Inspector"]): if fmt: message = fmt(message) - if util.py38: - kw["stacklevel"] = 2 + if log.STACKLEVEL: + kw["stacklevel"] = 1 + log.STACKLEVEL_OFFSET self.engine.logger.debug(message, *arg, **kw) diff --git a/lib/sqlalchemy/log.py b/lib/sqlalchemy/log.py index d463f5b9a..f7050b93f 100644 --- a/lib/sqlalchemy/log.py +++ b/lib/sqlalchemy/log.py @@ -29,9 +29,20 @@ from typing import Type from typing import TypeVar from typing import Union +from .util import py311 from .util import py38 from .util.typing import Literal + +if py38: + STACKLEVEL = True + # needed as of py3.11.0b1 + # #8019 + STACKLEVEL_OFFSET = 2 if py311 else 1 +else: + STACKLEVEL = False + STACKLEVEL_OFFSET = 0 + _IT = TypeVar("_IT", bound="Identified") _EchoFlagType = Union[None, bool, Literal["debug"]] @@ -191,8 +202,11 @@ class InstanceLogger: selected_level = self.logger.getEffectiveLevel() if level >= selected_level: - if py38: - kwargs["stacklevel"] = kwargs.get("stacklevel", 1) + 1 + + if STACKLEVEL: + kwargs["stacklevel"] = ( + kwargs.get("stacklevel", 1) + STACKLEVEL_OFFSET + ) self.logger._log(level, msg, args, **kwargs) diff --git a/lib/sqlalchemy/testing/requirements.py b/lib/sqlalchemy/testing/requirements.py index 234f823c6..e63a3e191 100644 --- a/lib/sqlalchemy/testing/requirements.py +++ b/lib/sqlalchemy/testing/requirements.py @@ -1419,6 +1419,10 @@ class SuiteRequirements(Requirements): return exclusions.closed() @property + def asyncio(self): + return self.greenlet + + @property def greenlet(self): def go(config): try: diff --git a/lib/sqlalchemy/util/__init__.py b/lib/sqlalchemy/util/__init__.py index 6d41231d9..756b93bb4 100644 --- a/lib/sqlalchemy/util/__init__.py +++ b/lib/sqlalchemy/util/__init__.py @@ -59,6 +59,7 @@ from .compat import has_refcount_gc as has_refcount_gc from .compat import inspect_getfullargspec as inspect_getfullargspec from .compat import local_dataclass_fields as local_dataclass_fields from .compat import osx as osx +from .compat import py311 as py311 from .compat import py38 as py38 from .compat import py39 as py39 from .compat import pypy as pypy |
