[Python-checkins] python/dist/src/Lib site.py,1.60,1.61
bcannon at users.sourceforge.net
bcannon at users.sourceforge.net
Fri Jun 4 21:12:53 EDT 2004
Update of /cvsroot/python/python/dist/src/Lib
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10131/Lib
Modified Files:
site.py
Log Message:
Refactored site.py into functions. Also moved over to using sets.
New regression test suite.
Index: site.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/site.py,v
retrieving revision 1.60
retrieving revision 1.61
diff -C2 -d -r1.60 -r1.61
*** site.py 21 Mar 2004 14:06:49 -0000 1.60
--- site.py 5 Jun 2004 01:12:51 -0000 1.61
***************
*** 58,62 ****
"""
! import sys, os
--- 58,64 ----
"""
! import sys
! import os
! import __builtin__
***************
*** 65,203 ****
return dir, os.path.normcase(dir)
! for m in sys.modules.values():
! if hasattr(m, "__file__") and m.__file__:
! m.__file__ = os.path.abspath(m.__file__)
! del m
! # This ensures that the initial path provided by the interpreter contains
! # only absolute pathnames, even if we're running from the build directory.
! L = []
! _dirs_in_sys_path = {}
! dir = dircase = None # sys.path may be empty at this point
! for dir in sys.path:
! # Filter out duplicate paths (on case-insensitive file systems also
! # if they only differ in case); turn relative paths into absolute
! # paths.
! dir, dircase = makepath(dir)
! if not dircase in _dirs_in_sys_path:
! L.append(dir)
! _dirs_in_sys_path[dircase] = 1
! sys.path[:] = L
! del dir, dircase, L
- # Append ./build/lib.<platform> in case we're running in the build dir
- # (especially for Guido :-)
# XXX This should not be part of site.py, since it is needed even when
# using the -S option for Python. See http://www.python.org/sf/586680
! if (os.name == "posix" and sys.path and
! os.path.basename(sys.path[-1]) == "Modules"):
from distutils.util import get_platform
s = "build/lib.%s-%.3s" % (get_platform(), sys.version)
s = os.path.join(os.path.dirname(sys.path[-1]), s)
sys.path.append(s)
- del get_platform, s
def _init_pathinfo():
! global _dirs_in_sys_path
! _dirs_in_sys_path = d = {}
for dir in sys.path:
! if dir and not os.path.isdir(dir):
continue
! dir, dircase = makepath(dir)
! d[dircase] = 1
! def addsitedir(sitedir):
! global _dirs_in_sys_path
! if _dirs_in_sys_path is None:
_init_pathinfo()
reset = 1
else:
reset = 0
! sitedir, sitedircase = makepath(sitedir)
! if not sitedircase in _dirs_in_sys_path:
! sys.path.append(sitedir) # Add path component
try:
! names = os.listdir(sitedir)
! except os.error:
return
! names.sort()
! for name in names:
! if name[-4:] == os.extsep + "pth":
! addpackage(sitedir, name)
if reset:
! _dirs_in_sys_path = None
! def addpackage(sitedir, name):
! global _dirs_in_sys_path
! if _dirs_in_sys_path is None:
! _init_pathinfo()
reset = 1
else:
reset = 0
! fullname = os.path.join(sitedir, name)
try:
! f = open(fullname)
! except IOError:
return
! while 1:
! dir = f.readline()
! if not dir:
! break
! if dir[0] == '#':
! continue
! if dir.startswith("import"):
! exec dir
! continue
! dir = dir.rstrip()
! dir, dircase = makepath(sitedir, dir)
! if not dircase in _dirs_in_sys_path and os.path.exists(dir):
! sys.path.append(dir)
! _dirs_in_sys_path[dircase] = 1
if reset:
! _dirs_in_sys_path = None
!
! prefixes = [sys.prefix]
! sitedir = None # make sure sitedir is initialized because of later 'del'
! if sys.exec_prefix != sys.prefix:
! prefixes.append(sys.exec_prefix)
! for prefix in prefixes:
! if prefix:
! if sys.platform in ('os2emx', 'riscos'):
! sitedirs = [os.path.join(prefix, "Lib", "site-packages")]
! elif os.sep == '/':
! sitedirs = [os.path.join(prefix,
! "lib",
! "python" + sys.version[:3],
! "site-packages"),
! os.path.join(prefix, "lib", "site-python")]
! else:
! sitedirs = [prefix, os.path.join(prefix, "lib", "site-packages")]
! if sys.platform == 'darwin':
! # for framework builds *only* we add the standard Apple
! # locations. Currently only per-user, but /Library and
! # /Network/Library could be added too
! if 'Python.framework' in prefix:
! home = os.environ.get('HOME')
! if home:
! sitedirs.append(
! os.path.join(home,
! 'Library',
! 'Python',
! sys.version[:3],
! 'site-packages'))
! for sitedir in sitedirs:
! if os.path.isdir(sitedir):
! addsitedir(sitedir)
! del prefix, sitedir
! _dirs_in_sys_path = None
! # the OS/2 EMX port has optional extension modules that do double duty
! # as DLLs (and must use the .DLL file extension) for other extensions.
! # The library search path needs to be amended so these will be found
! # during module import. Use BEGINLIBPATH so that these are at the start
! # of the library search path.
! if sys.platform == 'os2emx':
dllpath = os.path.join(sys.prefix, "Lib", "lib-dynload")
libpath = os.environ['BEGINLIBPATH'].split(';')
--- 67,216 ----
return dir, os.path.normcase(dir)
! def abs__file__():
! """Set all module' __file__ attribute to an absolute path"""
! for m in sys.modules.values():
! try:
! m.__file__ = os.path.abspath(m.__file__)
! except AttributeError:
! continue
! def removeduppaths():
! """ Remove duplicate entries from sys.path along with making them
! absolute"""
! # This ensures that the initial path provided by the interpreter contains
! # only absolute pathnames, even if we're running from the build directory.
! L = []
! known_paths = set()
! for dir in sys.path:
! # Filter out duplicate paths (on case-insensitive file systems also
! # if they only differ in case); turn relative paths into absolute
! # paths.
! dir, dircase = makepath(dir)
! if not dircase in known_paths:
! L.append(dir)
! known_paths.add(dircase)
! sys.path[:] = L
! return known_paths
# XXX This should not be part of site.py, since it is needed even when
# using the -S option for Python. See http://www.python.org/sf/586680
! def addbuilddir():
! """Append ./build/lib.<platform> in case we're running in the build dir
! (especially for Guido :-)"""
from distutils.util import get_platform
s = "build/lib.%s-%.3s" % (get_platform(), sys.version)
s = os.path.join(os.path.dirname(sys.path[-1]), s)
sys.path.append(s)
def _init_pathinfo():
! """Return a set containing all existing directory entries from sys.path"""
! d = set()
for dir in sys.path:
! try:
! if os.path.isdir(dir):
! dir, dircase = makepath(dir)
! d.add(dircase)
! except TypeError:
continue
! return d
! def addpackage(sitedir, name, known_paths):
! """Add a new path to known_paths by combining sitedir and 'name' or execute
! sitedir if it starts with 'import'"""
! if known_paths is None:
_init_pathinfo()
reset = 1
else:
reset = 0
! fullname = os.path.join(sitedir, name)
try:
! f = file(fullname, "rU")
! except IOError:
return
! try:
! for line in f:
! if line.startswith("#"):
! continue
! if line.startswith("import"):
! exec line
! continue
! line = line.rstrip()
! dir, dircase = makepath(sitedir, line)
! if not dircase in known_paths and os.path.exists(dir):
! sys.path.append(dir)
! known_paths.add(dircase)
! finally:
! f.close()
if reset:
! known_paths = None
! return known_paths
! def addsitedir(sitedir, known_paths):
! """Add 'sitedir' argument to sys.path if missing and handle .pth files in
! 'sitedir'"""
! if known_paths is None:
! d = _init_pathinfo()
reset = 1
else:
reset = 0
! sitedir, sitedircase = makepath(sitedir)
! if not sitedircase in known_paths:
! sys.path.append(sitedir) # Add path component
try:
! names = os.listdir(sitedir)
! except os.error:
return
! names.sort()
! for name in names:
! if name[-4:] == os.extsep + "pth":
! addpackage(sitedir, name, known_paths)
if reset:
! known_paths = None
! return known_paths
! def addsitepackages(known_paths):
! """Add site-packages (and possibly site-python) to sys.path"""
! prefixes = [sys.prefix]
! if sys.exec_prefix != sys.prefix:
! prefixes.append(sys.exec_prefix)
! for prefix in prefixes:
! if prefix:
! if sys.platform in ('os2emx', 'riscos'):
! sitedirs = [os.path.join(prefix, "Lib", "site-packages")]
! elif os.sep == '/':
! sitedirs = [os.path.join(prefix,
! "lib",
! "python" + sys.version[:3],
! "site-packages"),
! os.path.join(prefix, "lib", "site-python")]
! else:
! sitedirs = [prefix, os.path.join(prefix, "lib", "site-packages")]
! if sys.platform == 'darwin':
! # for framework builds *only* we add the standard Apple
! # locations. Currently only per-user, but /Library and
! # /Network/Library could be added too
! if 'Python.framework' in prefix:
! home = os.environ.get('HOME')
! if home:
! sitedirs.append(
! os.path.join(home,
! 'Library',
! 'Python',
! sys.version[:3],
! 'site-packages'))
! for sitedir in sitedirs:
! if os.path.isdir(sitedir):
! addsitedir(sitedir, known_paths)
! return None
! def setBEGINLIBPATH():
! """The OS/2 EMX port has optional extension modules that do double duty
! as DLLs (and must use the .DLL file extension) for other extensions.
! The library search path needs to be amended so these will be found
! during module import. Use BEGINLIBPATH so that these are at the start
! of the library search path.
!
! """
dllpath = os.path.join(sys.prefix, "Lib", "lib-dynload")
libpath = os.environ['BEGINLIBPATH'].split(';')
***************
*** 209,227 ****
! # Define new built-ins 'quit' and 'exit'.
! # These are simply strings that display a hint on how to exit.
! if os.sep == ':':
! exit = 'Use Cmd-Q to quit.'
! elif os.sep == '\\':
! exit = 'Use Ctrl-Z plus Return to exit.'
! else:
! exit = 'Use Ctrl-D (i.e. EOF) to exit.'
! import __builtin__
! __builtin__.quit = __builtin__.exit = exit
! del exit
- # interactive prompt objects for printing the license text, a list of
- # contributors and the copyright notice.
- class _Printer:
MAXLINES = 23
--- 222,243 ----
! def setquit():
! """Define new built-ins 'quit' and 'exit'.
! These are simply strings that display a hint on how to exit.
!
! """
! if os.sep == ':':
! exit = 'Use Cmd-Q to quit.'
! elif os.sep == '\\':
! exit = 'Use Ctrl-Z plus Return to exit.'
! else:
! exit = 'Use Ctrl-D (i.e. EOF) to exit.'
! __builtin__.quit = __builtin__.exit = exit
!
!
! class _Printer(object):
! """interactive prompt objects for printing the license text, a list of
! contributors and the copyright notice."""
MAXLINES = 23
***************
*** 238,245 ****
data = None
for dir in self.__dirs:
! for file in self.__files:
! file = os.path.join(dir, file)
try:
! fp = open(file)
data = fp.read()
fp.close()
--- 254,261 ----
data = None
for dir in self.__dirs:
! for filename in self.__files:
! filename = os.path.join(dir, filename)
try:
! fp = file(filename, "rU")
data = fp.read()
fp.close()
***************
*** 281,304 ****
break
! __builtin__.copyright = _Printer("copyright", sys.copyright)
! if sys.platform[:4] == 'java':
! __builtin__.credits = _Printer(
! "credits",
! "Jython is maintained by the Jython developers (www.jython.org).")
! else:
! __builtin__.credits = _Printer("credits", """\
! Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands
! for supporting Python development. See www.python.org for more information.""")
! here = os.path.dirname(os.__file__)
! __builtin__.license = _Printer(
! "license", "See http://www.python.org/%.3s/license.html" % sys.version,
! ["LICENSE.txt", "LICENSE"],
! [os.path.join(here, os.pardir), here, os.curdir])
! # Define new built-in 'help'.
! # This is a wrapper around pydoc.help (with a twist).
- class _Helper:
def __repr__(self):
return "Type help() for interactive help, " \
--- 297,324 ----
break
! def setcopyright():
! """Set 'copyright' and 'credits' in __builtin__"""
! __builtin__.copyright = _Printer("copyright", sys.copyright)
! if sys.platform[:4] == 'java':
! __builtin__.credits = _Printer(
! "credits",
! "Jython is maintained by the Jython developers (www.jython.org).")
! else:
! __builtin__.credits = _Printer("credits", """\
! Thanks to CWI, CNRI, BeOpen.com, Zope Corporation and a cast of thousands
! for supporting Python development. See www.python.org for more information.""")
! here = os.path.dirname(os.__file__)
! __builtin__.license = _Printer(
! "license", "See http://www.python.org/%.3s/license.html" % sys.version,
! ["LICENSE.txt", "LICENSE"],
! [os.path.join(here, os.pardir), here, os.curdir])
! class _Helper(object):
! """Define the built-in 'help'.
! This is a wrapper around pydoc.help (with a twist).
!
! """
def __repr__(self):
return "Type help() for interactive help, " \
***************
*** 308,366 ****
return pydoc.help(*args, **kwds)
! __builtin__.help = _Helper()
!
!
! # On Windows, some default encodings are not provided by Python,
! # while they are always available as "mbcs" in each locale. Make
! # them usable by aliasing to "mbcs" in such a case.
!
! if sys.platform == 'win32':
! import locale, codecs
! enc = locale.getdefaultlocale()[1]
! if enc.startswith('cp'): # "cp***" ?
! try:
! codecs.lookup(enc)
! except LookupError:
! import encodings
! encodings._cache[enc] = encodings._unknown
! encodings.aliases.aliases[enc] = 'mbcs'
! # Set the string encoding used by the Unicode implementation. The
! # default is 'ascii', but if you're willing to experiment, you can
! # change this.
! encoding = "ascii" # Default value set by _PyUnicode_Init()
- if 0:
- # Enable to support locale aware default string encodings.
- import locale
- loc = locale.getdefaultlocale()
- if loc[1]:
- encoding = loc[1]
! if 0:
! # Enable to switch off string to Unicode coercion and implicit
! # Unicode to string conversion.
! encoding = "undefined"
- if encoding != "ascii":
- # On Non-Unicode builds this will raise an AttributeError...
- sys.setdefaultencoding(encoding) # Needs Python Unicode build !
! #
! # Run custom site specific code, if available.
! #
! try:
! import sitecustomize
! except ImportError:
! pass
! #
! # Remove sys.setdefaultencoding() so that users cannot change the
! # encoding after initialization. The test for presence is needed when
! # this module is run as a script, because this code is executed twice.
! #
! if hasattr(sys, "setdefaultencoding"):
! del sys.setdefaultencoding
def _test():
--- 328,399 ----
return pydoc.help(*args, **kwds)
! def sethelper():
! __builtin__.help = _Helper()
! def aliasmbcs():
! """On Windows, some default encodings are not provided by Python,
! while they are always available as "mbcs" in each locale. Make
! them usable by aliasing to "mbcs" in such a case."""
! if sys.platform == 'win32':
! import locale, codecs
! enc = locale.getdefaultlocale()[1]
! if enc.startswith('cp'): # "cp***" ?
! try:
! codecs.lookup(enc)
! except LookupError:
! import encodings
! encodings._cache[enc] = encodings._unknown
! encodings.aliases.aliases[enc] = 'mbcs'
! def setencoding():
! """Set the string encoding used by the Unicode implementation. The
! default is 'ascii', but if you're willing to experiment, you can
! change this."""
! encoding = "ascii" # Default value set by _PyUnicode_Init()
! if 0:
! # Enable to support locale aware default string encodings.
! import locale
! loc = locale.getdefaultlocale()
! if loc[1]:
! encoding = loc[1]
! if 0:
! # Enable to switch off string to Unicode coercion and implicit
! # Unicode to string conversion.
! encoding = "undefined"
! if encoding != "ascii":
! # On Non-Unicode builds this will raise an AttributeError...
! sys.setdefaultencoding(encoding) # Needs Python Unicode build !
! def execsitecustomize():
! """Run custom site specific code, if available."""
! try:
! import sitecustomize
! except ImportError:
! pass
! def main():
! abs__file__()
! paths_in_sys = removeduppaths()
! if (os.name == "posix" and sys.path and
! os.path.basename(sys.path[-1]) == "Modules"):
! addbuilddir()
! paths_in_sys = addsitepackages(paths_in_sys)
! if sys.platform == 'os2emx':
! setBEGINLIBPATH()
! setquit()
! setcopyright()
! sethelper()
! aliasmbcs()
! setencoding()
! execsitecustomize()
! # Remove sys.setdefaultencoding() so that users cannot change the
! # encoding after initialization. The test for presence is needed when
! # this module is run as a script, because this code is executed twice.
! if hasattr(sys, "setdefaultencoding"):
! del sys.setdefaultencoding
! main()
def _test():
More information about the Python-checkins
mailing list