Mercurial > cpython-lru_cache-weakref
annotate Lib/macurl2path.py @ 5817:48b94de85bf3 legacy-trunk
Extensive changes by AMK.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Thu, 17 Jul 1997 16:29:42 +0000 |
| parents | fa9fada916b4 |
| children | fb4b4d069cc7 |
| rev | line source |
|---|---|
|
4412
ac3324e638e9
Added warning not to import directly.
Guido van Rossum <guido@python.org>
parents:
3651
diff
changeset
|
1 """Mac specific module for conversion between pathnames and URLs. |
|
ac3324e638e9
Added warning not to import directly.
Guido van Rossum <guido@python.org>
parents:
3651
diff
changeset
|
2 Do not import directly, use urllib instead.""" |
|
3651
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 import string |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 import urllib |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 import os |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
7 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
8 def url2pathname(pathname): |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
9 "Convert /-delimited pathname to mac pathname" |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
10 # |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
11 # XXXX The .. handling should be fixed... |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
12 # |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
13 tp = urllib.splittype(pathname)[0] |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
14 if tp and tp <> 'file': |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
15 raise RuntimeError, 'Cannot convert non-local URL to pathname' |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
16 components = string.split(pathname, '/') |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
17 # Remove . and embedded .. |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
18 i = 0 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
19 while i < len(components): |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
20 if components[i] == '.': |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
21 del components[i] |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
22 elif components[i] == '..' and i > 0 and \ |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
23 components[i-1] not in ('', '..'): |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
24 del components[i-1:i+1] |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
25 i = i-1 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
26 elif components[i] == '' and i > 0 and components[i-1] <> '': |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
27 del components[i] |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
28 else: |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
29 i = i+1 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
30 if not components[0]: |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
31 # Absolute unix path, don't start with colon |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
32 return string.join(components[1:], ':') |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
33 else: |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
34 # relative unix path, start with colon. First replace |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
35 # leading .. by empty strings (giving ::file) |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
36 i = 0 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
37 while i < len(components) and components[i] == '..': |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
38 components[i] = '' |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
39 i = i + 1 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
40 return ':' + string.join(components, ':') |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
41 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
42 def pathname2url(pathname): |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
43 "convert mac pathname to /-delimited pathname" |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
44 if '/' in pathname: |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
45 raise RuntimeError, "Cannot convert pathname containing slashes" |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
46 components = string.split(pathname, ':') |
|
5556
fa9fada916b4
Handling of pathnames pointing to files on toplevel folder of disk was
Guido van Rossum <guido@python.org>
parents:
4412
diff
changeset
|
47 # Remove empty first and/or last component |
|
fa9fada916b4
Handling of pathnames pointing to files on toplevel folder of disk was
Guido van Rossum <guido@python.org>
parents:
4412
diff
changeset
|
48 if components[0] == '': |
|
fa9fada916b4
Handling of pathnames pointing to files on toplevel folder of disk was
Guido van Rossum <guido@python.org>
parents:
4412
diff
changeset
|
49 del components[0] |
|
fa9fada916b4
Handling of pathnames pointing to files on toplevel folder of disk was
Guido van Rossum <guido@python.org>
parents:
4412
diff
changeset
|
50 if components[-1] == '': |
|
fa9fada916b4
Handling of pathnames pointing to files on toplevel folder of disk was
Guido van Rossum <guido@python.org>
parents:
4412
diff
changeset
|
51 del components[-1] |
|
3651
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
52 # Replace empty string ('::') by .. (will result in '/../' later) |
|
5556
fa9fada916b4
Handling of pathnames pointing to files on toplevel folder of disk was
Guido van Rossum <guido@python.org>
parents:
4412
diff
changeset
|
53 for i in range(len(components)): |
|
3651
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
54 if components[i] == '': |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
55 components[i] = '..' |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
56 # Truncate names longer than 31 bytes |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
57 components = map(lambda x: x[:31], components) |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
58 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
59 if os.path.isabs(pathname): |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
60 return '/' + string.join(components, '/') |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
61 else: |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
62 return string.join(components, '/') |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
63 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
64 def test(): |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
65 for url in ["index.html", |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
66 "bar/index.html", |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
67 "/foo/bar/index.html", |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
68 "/foo/bar/", |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
69 "/"]: |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
70 print `url`, '->', `url2pathname(url)` |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
71 for path in ["drive:", |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
72 "drive:dir:", |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
73 "drive:dir:file", |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
74 "drive:file", |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
75 "file", |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
76 ":file", |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
77 ":dir:", |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
78 ":dir:file"]: |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
79 print `path`, '->', `pathname2url(path)` |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
80 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
81 if __name__ == '__main__': |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
82 test() |
