mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 11:49:12 +00:00 
			
		
		
		
	Issue #21709: Improved implementation to cover the frozen module case.
This commit is contained in:
		
							parent
							
								
									307bccc6ff
								
							
						
					
					
						commit
						194bcaf4dc
					
				
					 1 changed files with 34 additions and 28 deletions
				
			
		| 
						 | 
					@ -51,34 +51,6 @@ __date__    = "07 February 2010"
 | 
				
			||||||
#   Miscellaneous module data
 | 
					#   Miscellaneous module data
 | 
				
			||||||
#---------------------------------------------------------------------------
 | 
					#---------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# _srcfile is used when walking the stack to check when we've got the first
 | 
					 | 
				
			||||||
# caller stack frame.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
if hasattr(sys, 'frozen'):
 | 
					 | 
				
			||||||
    _srcfile = os.path.join('logging', '__init__.py')
 | 
					 | 
				
			||||||
else:
 | 
					 | 
				
			||||||
    _srcfile = __file__
 | 
					 | 
				
			||||||
_srcfile = os.path.normcase(_srcfile)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if hasattr(sys, '_getframe'):
 | 
					 | 
				
			||||||
    currentframe = lambda: sys._getframe(3)
 | 
					 | 
				
			||||||
else: #pragma: no cover
 | 
					 | 
				
			||||||
    def currentframe():
 | 
					 | 
				
			||||||
        """Return the frame object for the caller's stack frame."""
 | 
					 | 
				
			||||||
        try:
 | 
					 | 
				
			||||||
            raise Exception
 | 
					 | 
				
			||||||
        except Exception:
 | 
					 | 
				
			||||||
            return sys.exc_info()[2].tb_frame.f_back
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# _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
 | 
					 | 
				
			||||||
# findCaller() from being called.
 | 
					 | 
				
			||||||
#if not hasattr(sys, "_getframe"):
 | 
					 | 
				
			||||||
#    _srcfile = None
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#_startTime is used as the base when calculating the relative time of events
 | 
					#_startTime is used as the base when calculating the relative time of events
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
| 
						 | 
					@ -172,6 +144,40 @@ def addLevelName(level, levelName):
 | 
				
			||||||
    finally:
 | 
					    finally:
 | 
				
			||||||
        _releaseLock()
 | 
					        _releaseLock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if hasattr(sys, '_getframe'):
 | 
				
			||||||
 | 
					    currentframe = lambda: sys._getframe(3)
 | 
				
			||||||
 | 
					else: #pragma: no cover
 | 
				
			||||||
 | 
					    def currentframe():
 | 
				
			||||||
 | 
					        """Return the frame object for the caller's stack frame."""
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            raise Exception
 | 
				
			||||||
 | 
					        except Exception:
 | 
				
			||||||
 | 
					            return sys.exc_info()[2].tb_frame.f_back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# _srcfile is used when walking the stack to check when we've got the first
 | 
				
			||||||
 | 
					# caller stack frame, by skipping frames whose filename is that of this
 | 
				
			||||||
 | 
					# module's source. It therefore should contain the filename of this module's
 | 
				
			||||||
 | 
					# source file.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Ordinarily we would use __file__ for this, but frozen modules don't always
 | 
				
			||||||
 | 
					# have __file__ set, for some reason (see Issue #21736). Thus, we get the
 | 
				
			||||||
 | 
					# filename from a handy code object from a function defined in this module.
 | 
				
			||||||
 | 
					# (There's no particular reason for picking addLevelName.)
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_srcfile = os.path.normcase(addLevelName.__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
 | 
				
			||||||
 | 
					# findCaller() from being called. You can also do this if you want to avoid
 | 
				
			||||||
 | 
					# the overhead of fetching caller information, even when _getframe() is
 | 
				
			||||||
 | 
					# available.
 | 
				
			||||||
 | 
					#if not hasattr(sys, '_getframe'):
 | 
				
			||||||
 | 
					#    _srcfile = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def _checkLevel(level):
 | 
					def _checkLevel(level):
 | 
				
			||||||
    if isinstance(level, int):
 | 
					    if isinstance(level, int):
 | 
				
			||||||
        rv = level
 | 
					        rv = level
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue