Skip to content

Commit 2c3d508

Browse files
authored
bpo-40570: Improve compatibility of uname_result with late-bound .platform (#20015)
* bpo-40570: Improve compatibility of uname_result with late-bound .platform. * Add test capturing ability to cast uname to a tuple.
1 parent 77c6146 commit 2c3d508

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

Lib/platform.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -798,9 +798,10 @@ def __iter__(self):
798798
)
799799

800800
def __getitem__(self, key):
801-
if key == 5:
802-
return self.processor
803-
return super().__getitem__(key)
801+
return tuple(iter(self))[key]
802+
803+
def __len__(self):
804+
return len(tuple(iter(self)))
804805

805806

806807
_uname_cache = None

Lib/test/test_platform.py

+15
Original file line numberDiff line numberDiff line change
@@ -154,11 +154,26 @@ def test_uname(self):
154154
res = platform.uname()
155155
self.assertTrue(any(res))
156156
self.assertEqual(res[0], res.system)
157+
self.assertEqual(res[-6], res.system)
157158
self.assertEqual(res[1], res.node)
159+
self.assertEqual(res[-5], res.node)
158160
self.assertEqual(res[2], res.release)
161+
self.assertEqual(res[-4], res.release)
159162
self.assertEqual(res[3], res.version)
163+
self.assertEqual(res[-3], res.version)
160164
self.assertEqual(res[4], res.machine)
165+
self.assertEqual(res[-2], res.machine)
161166
self.assertEqual(res[5], res.processor)
167+
self.assertEqual(res[-1], res.processor)
168+
self.assertEqual(len(res), 6)
169+
170+
def test_uname_cast_to_tuple(self):
171+
res = platform.uname()
172+
expected = (
173+
res.system, res.node, res.release, res.version, res.machine,
174+
res.processor,
175+
)
176+
self.assertEqual(tuple(res), expected)
162177

163178
@unittest.skipIf(sys.platform in ['win32', 'OpenVMS'], "uname -p not used")
164179
def test_uname_processor(self):

0 commit comments

Comments
 (0)