| """ | 
 | 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) | 
 |     n = min(len(s1), len(s2)) | 
 |     for i in xrange(n): | 
 |         if s1[i] != s2[i]: | 
 |             return s1[:i] | 
 |     return s1[:n] |