[Python-checkins] CVS: python/dist/src/Lib inspect.py,1.5,1.6

Ka-Ping Yee ping@users.sourceforge.net
2001年3月01日 18:08:55 -0800


Update of /cvsroot/python/python/dist/src/Lib
In directory usw-pr-cvs1:/tmp/cvs-serv9814
Modified Files:
	inspect.py 
Log Message:
Clarify the purpose of getsourcefile().
Add getabsfile() for getting a most-normalized path.
Index: inspect.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/inspect.py,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -r1.5 -r1.6
*** inspect.py	2001年03月02日 01:19:39	1.5
--- inspect.py	2001年03月02日 02:08:53	1.6
***************
*** 170,174 ****
 
 def getfile(object):
! """Try to guess which (text or binary) file an object was defined in."""
 if ismodule(object):
 if hasattr(object, '__file__'):
--- 170,174 ----
 
 def getfile(object):
! """Work out which source or compiled file an object was defined in."""
 if ismodule(object):
 if hasattr(object, '__file__'):
***************
*** 193,196 ****
--- 193,211 ----
 'function, traceback, frame, or code object'
 
+ def getsourcefile(object):
+ """Return the Python source file an object was defined in, if it exists."""
+ filename = getfile(object)
+ if string.lower(filename[-4:]) in ['.pyc', '.pyo']:
+ filename = filename[:-4] + '.py'
+ if string.lower(filename[-3:]) == '.py' and os.path.exists(filename):
+ return filename
+ 
+ def getabsfile(object):
+ """Return an absolute path to the source file or compiled file for an object.
+ 
+ The idea is for each object to have a unique origin, so this routine normalizes
+ the result as much as possible."""
+ return os.path.normcase(os.path.abspath(getsourcefile(object) or getfile(object)))
+ 
 modulesbyfile = {}
 
***************
*** 200,204 ****
 return sys.modules.get(object.__module__)
 try:
! file = os.path.abspath(getsourcefile(object))
 except TypeError:
 return None
--- 215,219 ----
 return sys.modules.get(object.__module__)
 try:
! file = getabsfile(object)
 except TypeError:
 return None
***************
*** 207,212 ****
 for module in sys.modules.values():
 if hasattr(module, '__file__'):
! modulesbyfile[
! os.path.abspath(getsourcefile(module))] = module.__name__
 if modulesbyfile.has_key(file):
 return sys.modules[modulesbyfile[file]]
--- 222,226 ----
 for module in sys.modules.values():
 if hasattr(module, '__file__'):
! modulesbyfile[getabsfile(module)] = module.__name__
 if modulesbyfile.has_key(file):
 return sys.modules[modulesbyfile[file]]
***************
*** 222,232 ****
 except AttributeError: pass
 
- def getsourcefile(object):
- """Try to guess which Python source file an object was defined in."""
- filename = getfile(object)
- if filename[-4:] == '.pyc':
- filename = filename[:-4] + '.py'
- return filename
- 
 def findsource(object):
 """Return the entire source file and starting line number for an object.
--- 236,239 ----
***************
*** 572,576 ****
 lines = lines[start:start+context]
 index = lineno - 1 - start
! except:
 lines = index = None
 else:
--- 579,583 ----
 lines = lines[start:start+context]
 index = lineno - 1 - start
! except IOError:
 lines = index = None
 else:

AltStyle によって変換されたページ (->オリジナル) /