home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.3)
-
- '''Common operations on Posix pathnames.
-
- Instead of importing this module directly, import os and refer to
- this module as os.path. The "os.path" name is an alias for this
- module on Posix systems; on other systems (e.g. Mac, Windows),
- os.path provides the same operations in a manner specific to that
- platform, and is an alias to another module (e.g. macpath, ntpath).
-
- Some of this can actually be useful on non-Posix systems too, e.g.
- for manipulation of the pathname component of URLs.
- '''
- import sys
- import os
- import stat
- __all__ = [
- 'normcase',
- 'isabs',
- 'join',
- 'splitdrive',
- 'split',
- 'splitext',
- 'basename',
- 'dirname',
- 'commonprefix',
- 'getsize',
- 'getmtime',
- 'getatime',
- 'getctime',
- 'islink',
- 'exists',
- 'isdir',
- 'isfile',
- 'ismount',
- 'walk',
- 'expanduser',
- 'expandvars',
- 'normpath',
- 'abspath',
- 'samefile',
- 'sameopenfile',
- 'samestat',
- 'curdir',
- 'pardir',
- 'sep',
- 'pathsep',
- 'defpath',
- 'altsep',
- 'extsep',
- 'realpath',
- 'supports_unicode_filenames']
- curdir = '.'
- pardir = '..'
- extsep = '.'
- sep = '/'
- pathsep = ':'
- defpath = ':/bin:/usr/bin'
- altsep = None
-
- def normcase(s):
- '''Normalize case of pathname. Has no effect under Posix'''
- return s
-
-
- def isabs(s):
- '''Test whether a path is absolute'''
- return s.startswith('/')
-
-
- def join(a, *p):
- """Join two or more pathname components, inserting '/' as needed"""
- path = a
- for b in p:
- if b.startswith('/'):
- path = b
- continue
- if path == '' or path.endswith('/'):
- path += b
- continue
- path += '/' + b
-
- return path
-
-
- def split(p):
- '''Split a pathname. Returns tuple "(head, tail)" where "tail" is
- everything after the final slash. Either part may be empty.'''
- i = p.rfind('/') + 1
- (head, tail) = (p[:i], p[i:])
- if head and head != '/' * len(head):
- head = head.rstrip('/')
-
- return (head, tail)
-
-
- def splitext(p):
- '''Split the extension from a pathname. Extension is everything from the
- last dot to the end. Returns "(root, ext)", either part may be empty.'''
- i = p.rfind('.')
- if i <= p.rfind('/'):
- return (p, '')
- else:
- return (p[:i], p[i:])
-
-
- def splitdrive(p):
- '''Split a pathname into drive and path. On Posix, drive is always
- empty.'''
- return ('', p)
-
-
- def basename(p):
- '''Returns the final component of a pathname'''
- return split(p)[1]
-
-
- def dirname(p):
- '''Returns the directory component of a pathname'''
- return split(p)[0]
-
-
- def commonprefix(m):
- '''Given a list of pathnames, returns the longest common leading component'''
- if not m:
- return ''
-
- prefix = m[0]
- for item in m:
- for i in range(len(prefix)):
- if prefix[:i + 1] != item[:i + 1]:
- prefix = prefix[:i]
- if i == 0:
- return ''
-
- break
- continue
-
-
- return prefix
-
-
- def getsize(filename):
- '''Return the size of a file, reported by os.stat().'''
- return os.stat(filename).st_size
-
-
- def getmtime(filename):
- '''Return the last modification time of a file, reported by os.stat().'''
- return os.stat(filename).st_mtime
-
-
- def getatime(filename):
- '''Return the last access time of a file, reported by os.stat().'''
- return os.stat(filename).st_atime
-
-
- def getctime(filename):
- '''Return the creation time of a file, reported by os.stat().'''
- return os.stat(filename).st_ctime
-
-
- def islink(path):
- '''Test whether a path is a symbolic link'''
-
- try:
- st = os.lstat(path)
- except (os.error, AttributeError):
- return False
-
- return stat.S_ISLNK(st.st_mode)
-
-
- def exists(path):
- '''Test whether a path exists. Returns False for broken symbolic links'''
-
- try:
- st = os.stat(path)
- except os.error:
- return False
-
- return True
-
-
- def isdir(path):
- '''Test whether a path is a directory'''
-
- try:
- st = os.stat(path)
- except os.error:
- return False
-
- return stat.S_ISDIR(st.st_mode)
-
-
- def isfile(path):
- '''Test whether a path is a regular file'''
-
- try:
- st = os.stat(path)
- except os.error:
- return False
-
- return stat.S_ISREG(st.st_mode)
-
-
- def samefile(f1, f2):
- '''Test whether two pathnames reference the same actual file'''
- s1 = os.stat(f1)
- s2 = os.stat(f2)
- return samestat(s1, s2)
-
-
- def sameopenfile(fp1, fp2):
- '''Test whether two open file objects reference the same file'''
- s1 = os.fstat(fp1)
- s2 = os.fstat(fp2)
- return samestat(s1, s2)
-
-
- def samestat(s1, s2):
- '''Test whether two stat buffers reference the same file'''
- if s1.st_ino == s2.st_ino:
- pass
- return s1.st_dev == s2.st_dev
-
-
- def ismount(path):
- '''Test whether a path is a mount point'''
-
- try:
- s1 = os.stat(path)
- s2 = os.stat(join(path, '..'))
- except os.error:
- return False
-
- dev1 = s1.st_dev
- dev2 = s2.st_dev
- if dev1 != dev2:
- return True
-
- ino1 = s1.st_ino
- ino2 = s2.st_ino
- if ino1 == ino2:
- return True
-
- return False
-
-
- def walk(top, func, arg):
- """Directory tree walk with callback function.
-
- For each directory in the directory tree rooted at top (including top
- itself, but excluding '.' and '..'), call func(arg, dirname, fnames).
- dirname is the name of the directory, and fnames a list of the names of
- the files and subdirectories in dirname (excluding '.' and '..'). func
- may modify the fnames list in-place (e.g. via del or slice assignment),
- and walk will only recurse into the subdirectories whose names remain in
- fnames; this can be used to implement a filter, or to impose a specific
- order of visiting. No semantics are defined for, or required of, arg,
- beyond that arg is always passed to func. It can be used, e.g., to pass
- a filename pattern, or a mutable object designed to accumulate
- statistics. Passing None for arg is common."""
-
- try:
- names = os.listdir(top)
- except os.error:
- return None
-
- func(arg, top, names)
- for name in names:
- name = join(top, name)
-
- try:
- st = os.lstat(name)
- except os.error:
- continue
-
- if stat.S_ISDIR(st.st_mode):
- walk(name, func, arg)
- continue
-
-
-
- def expanduser(path):
- '''Expand ~ and ~user constructions. If user or $HOME is unknown,
- do nothing.'''
- if not path.startswith('~'):
- return path
-
- i = path.find('/', 1)
- if i < 0:
- i = len(path)
-
- if i == 1:
- if 'HOME' not in os.environ:
- import pwd
- userhome = pwd.getpwuid(os.getuid()).pw_dir
- else:
- userhome = os.environ['HOME']
- else:
- import pwd
-
- try:
- pwent = pwd.getpwnam(path[1:i])
- except KeyError:
- return path
-
- userhome = pwent.pw_dir
- if userhome.endswith('/'):
- i += 1
-
- return userhome + path[i:]
-
- _varprog = None
-
- def expandvars(path):
- '''Expand shell variables of form $var and ${var}. Unknown variables
- are left unchanged.'''
- global _varprog
- if '$' not in path:
- return path
-
- if not _varprog:
- import re
- _varprog = re.compile('\\$(\\w+|\\{[^}]*\\})')
-
- i = 0
- while True:
- m = _varprog.search(path, i)
- if not m:
- break
-
- (i, j) = m.span(0)
- name = m.group(1)
- if name.startswith('{') and name.endswith('}'):
- name = name[1:-1]
-
- if name in os.environ:
- tail = path[j:]
- path = path[:i] + os.environ[name]
- i = len(path)
- path += tail
- continue
- i = j
- return path
-
-
- def normpath(path):
- '''Normalize path, eliminating double slashes, etc.'''
- if path == '':
- return '.'
-
- initial_slashes = path.startswith('/')
- if initial_slashes and path.startswith('//') and not path.startswith('///'):
- initial_slashes = 2
-
- comps = path.split('/')
- new_comps = []
- for comp in comps:
- if comp in ('', '.'):
- continue
-
- if not comp != '..':
- if not initial_slashes and not new_comps and new_comps and new_comps[-1] == '..':
- new_comps.append(comp)
- continue
- if new_comps:
- new_comps.pop()
- continue
-
- comps = new_comps
- path = '/'.join(comps)
- if initial_slashes:
- path = '/' * initial_slashes + path
-
- if not path:
- pass
- return '.'
-
-
- def abspath(path):
- '''Return an absolute path.'''
- if not isabs(path):
- path = join(os.getcwd(), path)
-
- return normpath(path)
-
-
- def realpath(filename):
- '''Return the canonical path of the specified filename, eliminating any
- symbolic links encountered in the path.'''
- filename = abspath(filename)
- bits = [
- '/'] + filename.split('/')[1:]
- for i in range(2, len(bits) + 1):
- component = join(*bits[0:i])
- if islink(component):
- resolved = os.readlink(component)
- (dir, file) = split(component)
- resolved = normpath(join(dir, resolved))
- newpath = join(*[
- resolved] + bits[i:])
- return realpath(newpath)
- continue
-
- return filename
-
- supports_unicode_filenames = False
-