diff options
author | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-03 11:25:13 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-03 11:25:13 +0000 |
commit | 458120dd40db6b4df55a4e96b650e16798ef06a0 (patch) | |
tree | 8f82685be24fef97e715c6f5ca4c68d34d5074ee /sys/lib/python/plat-riscos/rourl2path.py | |
parent | 3a742c699f6806c1145aea5149bf15de15a0afd7 (diff) |
add hg and python
Diffstat (limited to 'sys/lib/python/plat-riscos/rourl2path.py')
-rw-r--r-- | sys/lib/python/plat-riscos/rourl2path.py | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/sys/lib/python/plat-riscos/rourl2path.py b/sys/lib/python/plat-riscos/rourl2path.py new file mode 100644 index 000000000..7a8badf44 --- /dev/null +++ b/sys/lib/python/plat-riscos/rourl2path.py @@ -0,0 +1,71 @@ +"""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 + +__all__ = ["url2pathname","pathname2url"] + +__slash_dot = string.maketrans("/.", "./") + +def url2pathname(url): + """OS-specific conversion from a relative URL of the 'file' scheme + to a file system path; not recommended for general use.""" + tp = urllib.splittype(url)[0] + if tp and tp <> 'file': + raise RuntimeError, 'Cannot convert non-local URL to pathname' + # Turn starting /// into /, an empty hostname means current host + if url[:3] == '///': + url = url[2:] + elif url[:2] == '//': + raise RuntimeError, 'Cannot convert non-local URL to pathname' + components = string.split(url, '/') + if not components[0]: + if '$' in components: + del components[0] + else: + components[0] = '$' + # Remove . and embedded .. + i = 0 + while i < len(components): + 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 -= 1 + elif components[i] == '..': + components[i] = '^' + i += 1 + elif components[i] == '' and i > 0 and components[i-1] <> '': + del components[i] + else: + i += 1 + components = map(lambda x: urllib.unquote(x).translate(__slash_dot), components) + return '.'.join(components) + +def pathname2url(pathname): + """OS-specific conversion from a file system path to a relative URL + of the 'file' scheme; not recommended for general use.""" + return urllib.quote('///' + pathname.translate(__slash_dot), "/$:") + +def test(): + for url in ["index.html", + "/SCSI::SCSI4/$/Anwendung/Comm/Apps/!Fresco/Welcome", + "/SCSI::SCSI4/$/Anwendung/Comm/Apps/../!Fresco/Welcome", + "../index.html", + "bar/index.html", + "/foo/bar/index.html", + "/foo/bar/", + "/"]: + print '%r -> %r' % (url, url2pathname(url)) + print "*******************************************************" + for path in ["SCSI::SCSI4.$.Anwendung", + "PythonApp:Lib", + "PythonApp:Lib.rourl2path/py"]: + print '%r -> %r' % (path, pathname2url(path)) + +if __name__ == '__main__': + test() |