1 # module 'macpath' -- pathname (or -related) operations for the Macintosh
8 # Normalize the case of a pathname. Dummy in Posix, but string.lower here.
10 normcase
= string
.lower
13 # Return true if a path is absolute.
14 # On the Mac, relative paths begin with a colon,
15 # but as a special case, paths with no colons at all are also relative.
16 # Anything else is absolute (the string up to the first colon is the
20 return ':' in s
and s
[0] <> ':'
24 # The result is equivalent to what the second pathname would refer to
25 # if the first pathname were the current directory.
28 if (not s
) or isabs(t
): return t
29 if t
[:1] == ':': t
= t
[1:]
37 # Split a pathname in two parts: the directory leading up to the final bit,
38 # and the basename (the filename, without colons, in that directory).
39 # The result (s, t) is such that join(s, t) yields the original argument.
42 if ':' not in s
: return '', s
44 for i
in range(len(s
)):
45 if s
[i
] == ':': colon
= i
+1
46 return s
[:colon
], s
[colon
:]
49 # Short interfaces to split()
51 def dirname(s
): return split(s
)[0]
52 def basename(s
): return split(s
)[1]
55 # XXX This is undocumented and may go away!
56 # Normalize a pathname: get rid of '::' sequences by backing up,
57 # e.g., 'foo:bar::bletch' becomes 'foo:bletch'.
58 # Raise the exception norm_error below if backing up is impossible,
61 norm_error
= 'macpath.norm_error: path cannot be normalized'
67 f
= string
.splitfields(s
, ':')
81 if not res
: raise norm_error
, 'path starts with ::'
84 raise norm_error
, 'path starts with volume::'
85 if pre
: res
= pre
+ res
86 if post
: res
= res
+ post
93 # Return true if the pathname refers to an existing directory.
100 return S_ISDIR(st
[ST_MODE
])
103 # Return true if the pathname refers to an existing regular file.
110 return S_ISREG(st
[ST_MODE
])
113 # Return true if the pathname refers to an existing file or directory.
123 # Normalize path, removing things like ...:A:..:... (yet to be written)