Mercurial > cpython-lru_cache-weakref
annotate Lib/macurl2path.py @ 3720:b341def4eef8 legacy-trunk
Ignore latex intermediate products.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Wed, 26 Jun 1996 19:30:01 +0000 |
| parents | 0602db1d1dff |
| children | ac3324e638e9 |
| rev | line source |
|---|---|
|
3651
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 """Mac specific module for conversion between pathnames and URLs.""" |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3 import string |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 import urllib |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 import os |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
7 def url2pathname(pathname): |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
8 "Convert /-delimited pathname to mac pathname" |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
9 # |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
10 # XXXX The .. handling should be fixed... |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
11 # |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
12 tp = urllib.splittype(pathname)[0] |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
13 if tp and tp <> 'file': |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
14 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
|
15 components = string.split(pathname, '/') |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
16 # Remove . and embedded .. |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
17 i = 0 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
18 while i < len(components): |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
19 if components[i] == '.': |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
20 del components[i] |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
21 elif components[i] == '..' and i > 0 and \ |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
22 components[i-1] not in ('', '..'): |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
23 del components[i-1:i+1] |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
24 i = i-1 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
25 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
|
26 del components[i] |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
27 else: |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
28 i = i+1 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
29 if not components[0]: |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
30 # Absolute unix path, don't start with colon |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
31 return string.join(components[1:], ':') |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
32 else: |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
33 # relative unix path, start with colon. First replace |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
34 # leading .. by empty strings (giving ::file) |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
35 i = 0 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
36 while i < len(components) and components[i] == '..': |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
37 components[i] = '' |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
38 i = i + 1 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
39 return ':' + string.join(components, ':') |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
40 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
41 def pathname2url(pathname): |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
42 "convert mac pathname to /-delimited pathname" |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
43 if '/' in pathname: |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
44 raise RuntimeError, "Cannot convert pathname containing slashes" |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
45 components = string.split(pathname, ':') |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
46 # Replace empty string ('::') by .. (will result in '/../' later) |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
47 for i in range(1, len(components)): |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
48 if components[i] == '': |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
49 components[i] = '..' |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
50 # Truncate names longer than 31 bytes |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
51 components = map(lambda x: x[:31], components) |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
52 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
53 if os.path.isabs(pathname): |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
54 return '/' + string.join(components, '/') |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
55 else: |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
56 return string.join(components, '/') |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
57 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
58 def test(): |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
59 for url in ["index.html", |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
60 "bar/index.html", |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
61 "/foo/bar/index.html", |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
62 "/foo/bar/", |
|
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 print `url`, '->', `url2pathname(url)` |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
65 for path in ["drive:", |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
66 "drive:dir:", |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
67 "drive:dir:file", |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
68 "drive:file", |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
69 "file", |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
70 ":file", |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
71 ":dir:", |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
72 ":dir:file"]: |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
73 print `path`, '->', `pathname2url(path)` |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
74 |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
75 if __name__ == '__main__': |
|
0602db1d1dff
Conversions between mac paths and URLs
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
76 test() |
