From f26857f197a776dec621333cc8f259d3d8eed320 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Fri, 8 May 2020 19:47:57 -0400 Subject: [PATCH 1/2] bpo-40570: Improve compatibility of uname_result with late-bound .platform. --- Lib/platform.py | 7 ++++--- Lib/test/test_platform.py | 7 +++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Lib/platform.py b/Lib/platform.py index 049c2c6ef25a1b..e9f50ab622d316 100755 --- a/Lib/platform.py +++ b/Lib/platform.py @@ -798,9 +798,10 @@ def __iter__(self): ) def __getitem__(self, key): - if key == 5: - return self.processor - return super().__getitem__(key) + return tuple(iter(self))[key] + + def __len__(self): + return len(tuple(iter(self))) _uname_cache = None diff --git a/Lib/test/test_platform.py b/Lib/test/test_platform.py index 7664b38a720a7e..6960082e923190 100644 --- a/Lib/test/test_platform.py +++ b/Lib/test/test_platform.py @@ -154,11 +154,18 @@ def test_uname(self): res = platform.uname() self.assertTrue(any(res)) self.assertEqual(res[0], res.system) + self.assertEqual(res[-6], res.system) self.assertEqual(res[1], res.node) + self.assertEqual(res[-5], res.node) self.assertEqual(res[2], res.release) + self.assertEqual(res[-4], res.release) self.assertEqual(res[3], res.version) + self.assertEqual(res[-3], res.version) self.assertEqual(res[4], res.machine) + self.assertEqual(res[-2], res.machine) self.assertEqual(res[5], res.processor) + self.assertEqual(res[-1], res.processor) + self.assertEqual(len(res), 6) @unittest.skipIf(sys.platform in ['win32', 'OpenVMS'], "uname -p not used") def test_uname_processor(self): From 10c3389528eda7e7beb3ed666b34d0fd75520631 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Fri, 8 May 2020 20:16:47 -0400 Subject: [PATCH 2/2] Add test capturing ability to cast uname to a tuple. --- Lib/test/test_platform.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Lib/test/test_platform.py b/Lib/test/test_platform.py index 6960082e923190..a5c35dff79b8bc 100644 --- a/Lib/test/test_platform.py +++ b/Lib/test/test_platform.py @@ -167,6 +167,14 @@ def test_uname(self): self.assertEqual(res[-1], res.processor) self.assertEqual(len(res), 6) + def test_uname_cast_to_tuple(self): + res = platform.uname() + expected = ( + res.system, res.node, res.release, res.version, res.machine, + res.processor, + ) + self.assertEqual(tuple(res), expected) + @unittest.skipIf(sys.platform in ['win32', 'OpenVMS'], "uname -p not used") def test_uname_processor(self): """