From 257de6ebe15d3076e19f05f93c5b3c7fae25a4d3 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 14 May 2022 10:25:53 -0400 Subject: 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 --- lib/sqlalchemy/log.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'lib/sqlalchemy/log.py') 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) -- cgit v1.2.1