cpython/Lib/plat-riscos/rourl2path.py

83 lines
2.7 KiB
Python
Raw Normal View History

2001-03-02 01:58:11 -04:00
"""riscos specific module for conversion between pathnames and URLs.
Based on macurl2path.
Do not import directly, use urllib instead."""
import string
import urllib
import os
def url2pathname(pathname):
"Convert /-delimited pathname to mac pathname"
#
# XXXX The .. handling should be fixed...
#
tp = urllib.splittype(pathname)[0]
if tp and tp <> 'file':
2001-07-02 01:59:35 -03:00
raise RuntimeError, 'Cannot convert non-local URL to pathname'
2001-03-02 01:58:11 -04:00
components = string.split(pathname, '/')
# Remove . and embedded ..
i = 0
while i < len(components):
2001-07-02 01:59:35 -03:00
if components[i] == '.':
del components[i]
elif components[i] == '..' and i > 0 and \
components[i-1] not in ('', '..'):
del components[i-1:i+1]
i = i-1
elif components[i] == '' and i > 0 and components[i-1] <> '':
del components[i]
else:
if components[i]<>'..' and string.find(components[i], '.')<>-1 :
components[i] = string.join(string.split(components[i],'.'),'/')
i = i+1
2001-03-02 01:58:11 -04:00
if not components[0]:
2001-07-02 01:59:35 -03:00
# Absolute unix path, don't start with colon
return string.join(components[1:], '.')
2001-03-02 01:58:11 -04:00
else:
2001-07-02 01:59:35 -03:00
# relative unix path, start with colon. First replace
# leading .. by empty strings (giving ::file)
i = 0
while i < len(components) and components[i] == '..':
components[i] = '^'
i = i + 1
return string.join(components, '.')
2001-03-02 01:58:11 -04:00
def pathname2url(pathname):
"convert mac pathname to /-delimited pathname"
if '/' in pathname:
2001-07-02 01:59:35 -03:00
raise RuntimeError, "Cannot convert pathname containing slashes"
2001-03-02 01:58:11 -04:00
components = string.split(pathname, ':')
# Replace empty string ('::') by .. (will result in '/../' later)
for i in range(1, len(components)):
2001-07-02 01:59:35 -03:00
if components[i] == '':
components[i] = '..'
2001-03-02 01:58:11 -04:00
# Truncate names longer than 31 bytes
components = map(lambda x: x[:31], components)
if os.path.isabs(pathname):
2001-07-02 01:59:35 -03:00
return '/' + string.join(components, '/')
2001-03-02 01:58:11 -04:00
else:
2001-07-02 01:59:35 -03:00
return string.join(components, '/')
2001-03-02 01:58:11 -04:00
def test():
for url in ["index.html",
"/SCSI::SCSI4/$/Anwendung/Comm/Apps/!Fresco/Welcome",
"../index.html",
2001-07-02 01:59:35 -03:00
"bar/index.html",
"/foo/bar/index.html",
"/foo/bar/",
"/"]:
print `url`, '->', `url2pathname(url)`
2001-03-02 01:58:11 -04:00
for path in ["drive:",
2001-07-02 01:59:35 -03:00
"drive:dir:",
"drive:dir:file",
"drive:file",
"file",
":file",
":dir:",
":dir:file"]:
print `path`, '->', `pathname2url(path)`
2001-03-02 01:58:11 -04:00
if __name__ == '__main__':
test()