"""Macintosh-specific module for conversion between pathnames and URLs.
Do not import directly; use urllib instead."""
__all__
= ["url2pathname","pathname2url"]
def url2pathname(pathname
):
"Convert /-delimited pathname to mac pathname"
# XXXX The .. handling should be fixed...
tp
= urllib
.splittype(pathname
)[0]
raise RuntimeError, 'Cannot convert non-local URL to pathname'
# Turn starting /// into /, an empty hostname means current host
if pathname
[:3] == '///':
elif pathname
[:2] == '//':
raise RuntimeError, 'Cannot convert non-local URL to pathname'
components
= pathname
.split('/')
# Remove . and embedded ..
while i
< len(components
):
elif components
[i
] == '..' and i
> 0 and \
components
[i
-1] not in ('', '..'):
elif components
[i
] == '' and i
> 0 and components
[i
-1] != '':
# Absolute unix path, don't start with colon
rv
= ':'.join(components
[1:])
# relative unix path, start with colon. First replace
# leading .. by empty strings (giving ::file)
while i
< len(components
) and components
[i
] == '..':
rv
= ':' + ':'.join(components
)
# and finally unquote slashes and other funny characters
return urllib
.unquote(rv
)
def pathname2url(pathname
):
"convert mac pathname to /-delimited pathname"
raise RuntimeError, "Cannot convert pathname containing slashes"
components
= pathname
.split(':')
# Remove empty first and/or last component
# Replace empty string ('::') by .. (will result in '/../' later)
for i
in range(len(components
)):
# Truncate names longer than 31 bytes
components
= map(_pncomp2url
, components
)
if os
.path
.isabs(pathname
):
return '/' + '/'.join(components
)
return '/'.join(components
)
def _pncomp2url(component
):
component
= urllib
.quote(component
[:31], safe
='') # We want to quote slashes
for url
in ["index.html",
print '%r -> %r' % (url
, url2pathname(url
))
print '%r -> %r' % (path
, pathname2url(path
))
if __name__
== '__main__':