symbian-qemu-0.9.1-12/python-2.6.1/Lib/plat-riscos/rourl2path.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 """riscos specific module for conversion between pathnames and URLs.
       
     2 Based on macurl2path.
       
     3 Do not import directly, use urllib instead."""
       
     4 
       
     5 import string
       
     6 import urllib
       
     7 
       
     8 __all__ = ["url2pathname","pathname2url"]
       
     9 
       
    10 __slash_dot = string.maketrans("/.", "./")
       
    11 
       
    12 def url2pathname(url):
       
    13     """OS-specific conversion from a relative URL of the 'file' scheme
       
    14     to a file system path; not recommended for general use."""
       
    15     tp = urllib.splittype(url)[0]
       
    16     if tp and tp <> 'file':
       
    17         raise RuntimeError, 'Cannot convert non-local URL to pathname'
       
    18     # Turn starting /// into /, an empty hostname means current host
       
    19     if url[:3] == '///':
       
    20         url = url[2:]
       
    21     elif url[:2] == '//':
       
    22         raise RuntimeError, 'Cannot convert non-local URL to pathname'
       
    23     components = string.split(url, '/')
       
    24     if not components[0]:
       
    25         if '$' in components:
       
    26             del components[0]
       
    27         else:
       
    28             components[0] = '$'
       
    29     # Remove . and embedded ..
       
    30     i = 0
       
    31     while i < len(components):
       
    32         if components[i] == '.':
       
    33             del components[i]
       
    34         elif components[i] == '..' and i > 0 and \
       
    35                                   components[i-1] not in ('', '..'):
       
    36             del components[i-1:i+1]
       
    37             i -= 1
       
    38         elif components[i] == '..':
       
    39             components[i] = '^'
       
    40             i += 1
       
    41         elif components[i] == '' and i > 0 and components[i-1] <> '':
       
    42             del components[i]
       
    43         else:
       
    44             i += 1
       
    45     components = map(lambda x: urllib.unquote(x).translate(__slash_dot), components)
       
    46     return '.'.join(components)
       
    47 
       
    48 def pathname2url(pathname):
       
    49     """OS-specific conversion from a file system path to a relative URL
       
    50     of the 'file' scheme; not recommended for general use."""
       
    51     return urllib.quote('///' + pathname.translate(__slash_dot), "/$:")
       
    52 
       
    53 def test():
       
    54     for url in ["index.html",
       
    55                 "/SCSI::SCSI4/$/Anwendung/Comm/Apps/!Fresco/Welcome",
       
    56                 "/SCSI::SCSI4/$/Anwendung/Comm/Apps/../!Fresco/Welcome",
       
    57                 "../index.html",
       
    58                 "bar/index.html",
       
    59                 "/foo/bar/index.html",
       
    60                 "/foo/bar/",
       
    61                 "/"]:
       
    62         print '%r -> %r' % (url, url2pathname(url))
       
    63     print "*******************************************************"
       
    64     for path in ["SCSI::SCSI4.$.Anwendung",
       
    65                  "PythonApp:Lib",
       
    66                  "PythonApp:Lib.rourl2path/py"]:
       
    67         print '%r -> %r' % (path, pathname2url(path))
       
    68 
       
    69 if __name__ == '__main__':
       
    70     test()