Skip to content

Commit 6a2cc71

Browse files
committed
Revert relative-path changes.
Split to #138510
1 parent fdba9f0 commit 6a2cc71

2 files changed

Lines changed: 14 additions & 115 deletions

File tree

Lib/test/test_build_details.py

Lines changed: 8 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,12 @@
1-
import importlib
21
import json
32
import os
4-
import os.path
53
import sys
64
import sysconfig
75
import string
86
import unittest
9-
from pathlib import Path
107

118
from test.support import is_android, is_apple_mobile, is_wasm32
129

13-
BASE_PATH = Path(
14-
__file__, # Lib/test/test_build_details.py
15-
'..', # Lib/test
16-
'..', # Lib
17-
'..', # <src/install dir>
18-
).resolve()
19-
MODULE_PATH = BASE_PATH / 'Tools' / 'build' / 'generate-build-details.py'
20-
21-
try:
22-
# Import "generate-build-details.py" as "generate_build_details"
23-
spec = importlib.util.spec_from_file_location(
24-
"generate_build_details", MODULE_PATH
25-
)
26-
generate_build_details = importlib.util.module_from_spec(spec)
27-
sys.modules["generate_build_details"] = generate_build_details
28-
spec.loader.exec_module(generate_build_details)
29-
except ImportError:
30-
generate_build_details = None
31-
3210

3311
class FormatTestsBase:
3412
@property
@@ -53,15 +31,16 @@ def key(self, name):
5331
value = value[part]
5432
return value
5533

34+
def test_parse(self):
35+
self.data
36+
5637
def test_top_level_container(self):
5738
self.assertIsInstance(self.data, dict)
5839
for key, value in self.data.items():
5940
with self.subTest(key=key):
60-
if key in ('schema_version', 'base_prefix', 'base_interpreter',
61-
'platform'):
41+
if key in ('schema_version', 'base_prefix', 'base_interpreter', 'platform'):
6242
self.assertIsInstance(value, str)
63-
elif key in ('language', 'implementation', 'abi', 'suffixes',
64-
'libpython', 'c_api', 'arbitrary_data'):
43+
elif key in ('language', 'implementation', 'abi', 'suffixes', 'libpython', 'c_api', 'arbitrary_data'):
6544
self.assertIsInstance(value, dict)
6645

6746
def test_base_prefix(self):
@@ -92,20 +71,15 @@ def test_language_version_info(self):
9271
self.assertEqual(len(value), sys.version_info.n_fields)
9372
for part_name, part_value in value.items():
9473
with self.subTest(part=part_name):
95-
sys_version_value = getattr(sys.version_info, part_name)
96-
self.assertEqual(part_value, sys_version_value)
74+
self.assertEqual(part_value, getattr(sys.version_info, part_name))
9775

9876
def test_implementation(self):
99-
impl_ver = sys.implementation.version
10077
for key, value in self.key('implementation').items():
10178
with self.subTest(part=key):
10279
if key == 'version':
103-
self.assertEqual(len(value), len(impl_ver))
80+
self.assertEqual(len(value), len(sys.implementation.version))
10481
for part_name, part_value in value.items():
105-
assert not isinstance(sys.implementation.version, dict)
106-
getattr(sys.implementation.version, part_name)
107-
sys_implementation_value = getattr(impl_ver, part_name)
108-
self.assertEqual(sys_implementation_value, part_value)
82+
self.assertEqual(getattr(sys.implementation.version, part_name), part_value)
10983
else:
11084
self.assertEqual(getattr(sys.implementation, key), value)
11185

@@ -176,62 +150,5 @@ def test_c_api(self):
176150
self.assertTrue(os.path.exists(os.path.join(value['pkgconfig_path'], f'python-{version}.pc')))
177151

178152

179-
@unittest.skipIf(
180-
generate_build_details is None,
181-
"Failed to import generate-build-details"
182-
)
183-
class BuildDetailsRelativePathsTests(unittest.TestCase):
184-
@property
185-
def build_details_absolute_paths(self):
186-
data = generate_build_details.generate_data(schema_version='1.0')
187-
return json.loads(json.dumps(data))
188-
189-
@property
190-
def build_details_relative_paths(self):
191-
data = self.build_details_absolute_paths
192-
generate_build_details.make_paths_relative(data, config_path=None)
193-
return data
194-
195-
def test_round_trip(self):
196-
data_abs_path = self.build_details_absolute_paths
197-
data_rel_path = self.build_details_relative_paths
198-
199-
self.assertEqual(data_abs_path['base_prefix'],
200-
data_rel_path['base_prefix'])
201-
202-
base_prefix = data_abs_path['base_prefix']
203-
204-
top_level_keys = ('base_interpreter',)
205-
for key in top_level_keys:
206-
self.assertEqual(key in data_abs_path, key in data_rel_path)
207-
if key not in data_abs_path:
208-
continue
209-
210-
abs_rel_path = os.path.join(base_prefix, data_rel_path[key])
211-
abs_rel_path = os.path.normpath(abs_rel_path)
212-
self.assertEqual(data_abs_path[key], abs_rel_path)
213-
214-
second_level_keys = (
215-
('libpython', 'dynamic'),
216-
('libpython', 'dynamic_stableabi'),
217-
('libpython', 'static'),
218-
('c_api', 'headers'),
219-
('c_api', 'pkgconfig_path'),
220-
221-
)
222-
for part, key in second_level_keys:
223-
self.assertEqual(part in data_abs_path, part in data_rel_path)
224-
if part not in data_abs_path:
225-
continue
226-
self.assertEqual(key in data_abs_path[part],
227-
key in data_rel_path[part])
228-
if key not in data_abs_path[part]:
229-
continue
230-
231-
abs_rel_path = os.path.join(base_prefix, data_rel_path[part][key])
232-
abs_rel_path = os.path.normpath(abs_rel_path)
233-
self.assertEqual(data_abs_path[part][key], abs_rel_path)
234-
235-
236153
if __name__ == '__main__':
237154
unittest.main()

Tools/build/generate-build-details.py

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -136,51 +136,33 @@ def generate_data(schema_version: str) -> collections.defaultdict[str, Any]:
136136
def make_paths_relative(data: dict[str, Any], config_path: str | None = None) -> None:
137137
# Make base_prefix relative to the config_path directory
138138
if config_path:
139-
data['base_prefix'] = relative_path(data['base_prefix'],
140-
os.path.dirname(config_path))
141-
base_prefix = data['base_prefix']
142-
139+
data['base_prefix'] = os.path.relpath(data['base_prefix'], os.path.dirname(config_path))
143140
# Update path values to make them relative to base_prefix
144-
PATH_KEYS = (
141+
PATH_KEYS = [
145142
'base_interpreter',
146143
'libpython.dynamic',
147144
'libpython.dynamic_stableabi',
148145
'libpython.static',
149146
'c_api.headers',
150147
'c_api.pkgconfig_path',
151-
)
148+
]
152149
for entry in PATH_KEYS:
153-
*parents, child = entry.split('.')
150+
parent, _, child = entry.rpartition('.')
154151
# Get the key container object
155152
try:
156153
container = data
157-
for part in parents:
154+
for part in parent.split('.'):
158155
container = container[part]
159-
if child not in container:
160-
raise KeyError
161156
current_path = container[child]
162157
except KeyError:
163158
continue
164159
# Get the relative path
165-
new_path = relative_path(current_path, base_prefix)
160+
new_path = os.path.relpath(current_path, data['base_prefix'])
166161
# Join '.' so that the path is formated as './path' instead of 'path'
167162
new_path = os.path.join('.', new_path)
168163
container[child] = new_path
169164

170165

171-
def relative_path(path: str, base: str) -> str:
172-
if os.name != 'nt':
173-
return os.path.relpath(path, base)
174-
175-
# There are no relative paths between drives on Windows.
176-
path_drv, _ = os.path.splitdrive(path)
177-
base_drv, _ = os.path.splitdrive(base)
178-
if path_drv.lower() == base_drv.lower():
179-
return os.path.relpath(path, base)
180-
181-
return path
182-
183-
184166
def main() -> None:
185167
parser = argparse.ArgumentParser(exit_on_error=False)
186168
parser.add_argument('location')

0 commit comments

Comments
 (0)