From 7427a79e12a418a76d4660799b1c75785b5ea46d Mon Sep 17 00:00:00 2001 From: "Gregory P. Smith" Date: Thu, 22 Oct 2015 13:09:50 -0700 Subject: Issue #21709: Fix the logging module to not depend upon __file__ being set properly to get the filename of its caller from the stack. This allows it to work if run in a frozen or embedded environment where the module's .__file__ attribute does not match its code object's .co_filename. This same much simpler always correct approach has already been deployed and used widely in Python 3.4 per the issue referenced above. --- Lib/logging/__init__.py | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) (limited to 'Lib/logging') diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py index bd4afeb1aa..2c0f14f5b0 100644 --- a/Lib/logging/__init__.py +++ b/Lib/logging/__init__.py @@ -59,18 +59,6 @@ try: except NameError: _unicode = False -# -# _srcfile is used when walking the stack to check when we've got the first -# caller stack frame. -# -if hasattr(sys, 'frozen'): #support for py2exe - _srcfile = "logging%s__init__%s" % (os.sep, __file__[-4:]) -elif __file__[-4:].lower() in ['.pyc', '.pyo']: - _srcfile = __file__[:-4] + '.py' -else: - _srcfile = __file__ -_srcfile = os.path.normcase(_srcfile) - # next bit filched from 1.5.2's inspect.py def currentframe(): """Return the frame object for the caller's stack frame.""" @@ -82,6 +70,12 @@ def currentframe(): if hasattr(sys, '_getframe'): currentframe = lambda: sys._getframe(3) # done filching +# +# _srcfile is used when walking the stack to check when we've got the first +# caller stack frame. +# +_srcfile = currentframe.__code__.co_filename + # _srcfile is only used in conjunction with sys._getframe(). # To provide compatibility with older versions of Python, set _srcfile # to None if _getframe() is not available; this value will prevent -- cgit v1.2.1