OLD | NEW |
| (Empty) |
1 import os | |
2 import sys | |
3 | |
4 try: | |
5 from functools import wraps | |
6 except ImportError: | |
7 # only needed for Python 2.4 | |
8 def wraps(_): | |
9 def _wraps(func): | |
10 return func | |
11 return _wraps | |
12 | |
13 __unittest = True | |
14 | |
15 def _relpath_nt(path, start=os.path.curdir): | |
16 """Return a relative version of a path""" | |
17 | |
18 if not path: | |
19 raise ValueError("no path specified") | |
20 start_list = os.path.abspath(start).split(os.path.sep) | |
21 path_list = os.path.abspath(path).split(os.path.sep) | |
22 if start_list[0].lower() != path_list[0].lower(): | |
23 unc_path, rest = os.path.splitunc(path) | |
24 unc_start, rest = os.path.splitunc(start) | |
25 if bool(unc_path) ^ bool(unc_start): | |
26 raise ValueError("Cannot mix UNC and non-UNC paths (%s and %s)" | |
27 % (path, start)) | |
28 else: | |
29 raise ValueError("path is on drive %s, start on drive %s" | |
30 % (path_list[0], start_list[0])) | |
31 # Work out how much of the filepath is shared by start and path. | |
32 for i in range(min(len(start_list), len(path_list))): | |
33 if start_list[i].lower() != path_list[i].lower(): | |
34 break | |
35 else: | |
36 i += 1 | |
37 | |
38 rel_list = [os.path.pardir] * (len(start_list)-i) + path_list[i:] | |
39 if not rel_list: | |
40 return os.path.curdir | |
41 return os.path.join(*rel_list) | |
42 | |
43 # default to posixpath definition | |
44 def _relpath_posix(path, start=os.path.curdir): | |
45 """Return a relative version of a path""" | |
46 | |
47 if not path: | |
48 raise ValueError("no path specified") | |
49 | |
50 start_list = os.path.abspath(start).split(os.path.sep) | |
51 path_list = os.path.abspath(path).split(os.path.sep) | |
52 | |
53 # Work out how much of the filepath is shared by start and path. | |
54 i = len(os.path.commonprefix([start_list, path_list])) | |
55 | |
56 rel_list = [os.path.pardir] * (len(start_list)-i) + path_list[i:] | |
57 if not rel_list: | |
58 return os.path.curdir | |
59 return os.path.join(*rel_list) | |
60 | |
61 if os.path is sys.modules.get('ntpath'): | |
62 relpath = _relpath_nt | |
63 else: | |
64 relpath = _relpath_posix | |
OLD | NEW |