[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