Staging
v0.5.1
https://github.com/python/cpython
Revision da746d7a0e9d8b573e639bdce25430a69d283c1a authored by Georg Brandl on 13 March 2010, 10:02:01 UTC, committed by Georg Brandl on 13 March 2010, 10:02:01 UTC
svn+ssh://svn.python.org/python/branches/py3k

................
  r77173 | benjamin.peterson | 2009-12-31 04:35:15 +0100 (Do, 31 Dez 2009) | 13 lines

  Merged revisions 77151-77152 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk

  ........
    r77151 | georg.brandl | 2009-12-30 12:32:50 -0600 (Wed, 30 Dec 2009) | 1 line

    #7487: update Pygments version.
  ........
    r77152 | georg.brandl | 2009-12-30 12:36:09 -0600 (Wed, 30 Dec 2009) | 1 line

    #7602: improve "clean" and "checkout" targets now that all tools are in externals.
  ........
................
1 parent 87e62f0
Raw File
Tip revision: da746d7a0e9d8b573e639bdce25430a69d283c1a authored by Georg Brandl on 13 March 2010, 10:02:01 UTC
Merged revisions 77173 via svnmerge from
Tip revision: da746d7
genericpath.py
"""
Path operations common to more than one OS
Do not use directly.  The OS specific modules import the appropriate
functions from this module themselves.
"""
import os
import stat

__all__ = ['commonprefix', 'exists', 'getatime', 'getctime', 'getmtime',
           'getsize', 'isdir', 'isfile']


# Does a path exist?
# This is false for dangling symbolic links on systems that support them.
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


# This follows symbolic links, so both islink() and isdir() can be true
# for the same path ono systems that support symlinks
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)


# Is a path a directory?
# This follows symbolic links, so both islink() and isdir()
# can be true for the same path on systems that support symlinks
def isdir(s):
    """Return true if the pathname refers to an existing directory."""
    try:
        st = os.stat(s)
    except os.error:
        return False
    return stat.S_ISDIR(st.st_mode)


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 metadata change time of a file, reported by os.stat()."""
    return os.stat(filename).st_ctime


# Return the longest prefix of all list elements.
def commonprefix(m):
    "Given a list of pathnames, returns the longest common leading component"
    if not m: return ''
    s1 = min(m)
    s2 = max(m)
    for i, c in enumerate(s1):
        if c != s2[i]:
            return s1[:i]
    return s1

# Split a path in root and extension.
# The extension is everything starting at the last dot in the last
# pathname component; the root is everything before that.
# It is always true that root + ext == p.

# Generic implementation of splitext, to be parametrized with
# the separators
def _splitext(p, sep, altsep, extsep):
    """Split the extension from a pathname.

    Extension is everything from the last dot to the end, ignoring
    leading dots.  Returns "(root, ext)"; ext may be empty."""
    # NOTE: This code must work for text and bytes strings.

    sepIndex = p.rfind(sep)
    if altsep:
        altsepIndex = p.rfind(altsep)
        sepIndex = max(sepIndex, altsepIndex)

    dotIndex = p.rfind(extsep)
    if dotIndex > sepIndex:
        # skip all leading dots
        filenameIndex = sepIndex + 1
        while filenameIndex < dotIndex:
            if p[filenameIndex:filenameIndex+1] != extsep:
                return p[:dotIndex], p[dotIndex:]
            filenameIndex += 1

    return p, p[:0]
back to top