Lichen

lib/genericpath.py

118:900d641f42d6
2016-10-20 Paul Boddie Added some more support for generating invocation code, distinguishing between static invocation targets that are identified and whose functions can be obtained directly and other kinds of targets whose functions must be obtained via the special attribute.
     1 """     2 Path operations common to more than one OS     3 Do not use directly.  The OS specific modules import the appropriate     4 functions from this module themselves.     5 """     6 from os import error, stat     7 from stat import *     8      9 __all__ = ['commonprefix', 'exists', 'getatime', 'getctime', 'getmtime',    10            'getsize', 'isdir', 'isfile']    11     12     13 # Does a path exist?    14 # This is false for dangling symbolic links on systems that support them.    15 def exists(path):    16     """Test whether a path exists.  Returns False for broken symbolic links"""    17     try:    18         stat(path)    19     except error:    20         return False    21     return True    22     23     24 # This follows symbolic links, so both islink() and isdir() can be true    25 # for the same path ono systems that support symlinks    26 def isfile(path):    27     """Test whether a path is a regular file"""    28     try:    29         st = stat(path)    30     except error:    31         return False    32     return stat.S_ISREG(st.st_mode)    33     34     35 # Is a path a directory?    36 # This follows symbolic links, so both islink() and isdir()    37 # can be true for the same path on systems that support symlinks    38 def isdir(s):    39     """Return true if the pathname refers to an existing directory."""    40     try:    41         st = stat(s)    42     except error:    43         return False    44     return stat.S_ISDIR(st.st_mode)    45     46     47 def getsize(filename):    48     """Return the size of a file, reported by os.stat()."""    49     return stat(filename).st_size    50     51     52 def getmtime(filename):    53     """Return the last modification time of a file, reported by os.stat()."""    54     return stat(filename).st_mtime    55     56     57 def getatime(filename):    58     """Return the last access time of a file, reported by os.stat()."""    59     return stat(filename).st_atime    60     61     62 def getctime(filename):    63     """Return the metadata change time of a file, reported by os.stat()."""    64     return stat(filename).st_ctime    65     66     67 # Return the longest prefix of all list elements.    68 def commonprefix(m):    69     "Given a list of pathnames, returns the longest common leading component"    70     if not m: return ''    71     s1 = min(m)    72     s2 = max(m)    73     for i, c in enumerate(s1):    74         if c != s2[i]:    75             return s1[:i]    76     return s1    77     78 # Split a path in root and extension.    79 # The extension is everything starting at the last dot in the last    80 # pathname component; the root is everything before that.    81 # It is always true that root + ext == p.    82     83 # Generic implementation of splitext, to be parametrized with    84 # the separators    85 def _splitext(p, sep, altsep, extsep):    86     """Split the extension from a pathname.    87     88     Extension is everything from the last dot to the end, ignoring    89     leading dots.  Returns "(root, ext)"; ext may be empty."""    90     91     sepIndex = p.rfind(sep)    92     if altsep:    93         altsepIndex = p.rfind(altsep)    94         sepIndex = max(sepIndex, altsepIndex)    95     96     dotIndex = p.rfind(extsep)    97     if dotIndex > sepIndex:    98         # skip all leading dots    99         filenameIndex = sepIndex + 1   100         while filenameIndex < dotIndex:   101             if p[filenameIndex] != extsep:   102                 return p[:dotIndex], p[dotIndex:]   103             filenameIndex += 1   104    105     return p, ''