[Python-checkins] bpo-35344: platform.platform() uses mac_ver() on macOS (GH-10780)
Victor Stinner
webhook-mailer at python.org
Wed Dec 5 16:41:55 EST 2018
https://github.com/python/cpython/commit/ea0ca218b0c28b2af2b1f6a5d3383569de7fc2c1
commit: ea0ca218b0c28b2af2b1f6a5d3383569de7fc2c1
branch: master
author: Victor Stinner <vstinner at redhat.com>
committer: GitHub <noreply at github.com>
date: 2018-12-05T22:41:52+01:00
summary:
bpo-35344: platform.platform() uses mac_ver() on macOS (GH-10780)
On macOS, platform.platform() now uses mac_ver(), if it returns a
non-empty release string, to get the macOS version rather than darwin
version.
files:
A Misc/NEWS.d/next/Library/2018-11-29-00-23-25.bpo-35344.4QOPJQ.rst
M Doc/library/platform.rst
M Lib/platform.py
M Lib/test/test_platform.py
diff --git a/Doc/library/platform.rst b/Doc/library/platform.rst
index 7ac4b027418e..60c6089ad3cc 100644
--- a/Doc/library/platform.rst
+++ b/Doc/library/platform.rst
@@ -79,6 +79,11 @@ Cross Platform
Setting *terse* to true causes the function to return only the absolute minimum
information needed to identify the platform.
+ .. versionchanged:: 3.8
+ On macOS, the function now uses :func:`mac_ver`, if it returns a
+ non-empty release string, to get the macOS version rather than the darwin
+ version.
+
.. function:: processor()
diff --git a/Lib/platform.py b/Lib/platform.py
index f089a463ef9f..d8455256bb9a 100755
--- a/Lib/platform.py
+++ b/Lib/platform.py
@@ -1182,6 +1182,14 @@ def platform(aliased=0, terse=0):
if aliased:
system, release, version = system_alias(system, release, version)
+ if system == 'Darwin':
+ # macOS (darwin kernel)
+ macos_release = mac_ver()[0]
+ if macos_release:
+ # note: 'macOS' is different than 'MacOS' used below
+ system = 'macOS'
+ release = macos_release
+
if system == 'Windows':
# MS platforms
rel, vers, csd, ptype = win32_ver(version)
diff --git a/Lib/test/test_platform.py b/Lib/test/test_platform.py
index 978d2f76ab68..c1a7e3407934 100644
--- a/Lib/test/test_platform.py
+++ b/Lib/test/test_platform.py
@@ -10,6 +10,11 @@
from test import support
class PlatformTest(unittest.TestCase):
+ def clear_caches(self):
+ platform._platform_cache.clear()
+ platform._sys_version_cache.clear()
+ platform._uname_cache = None
+
def test_architecture(self):
res = platform.architecture()
@@ -344,5 +349,33 @@ def test__comparable_version(self):
self.assertLess(V('0.960923'), V('2.2beta29'))
+ def test_macos(self):
+ self.addCleanup(self.clear_caches)
+
+ uname = ('Darwin', 'hostname', '17.7.0',
+ ('Darwin Kernel Version 17.7.0: '
+ 'Thu Jun 21 22:53:14 PDT 2018; '
+ 'root:xnu-4570.71.2~1/RELEASE_X86_64'),
+ 'x86_64', 'i386')
+ arch = ('64bit', '')
+ with mock.patch.object(platform, 'uname', return_value=uname), \
+ mock.patch.object(platform, 'architecture', return_value=arch):
+ for mac_ver, expected_terse, expected in [
+ # darwin: mac_ver() returns empty strings
+ (('', '', ''),
+ 'Darwin-17.7.0',
+ 'Darwin-17.7.0-x86_64-i386-64bit'),
+ # macOS: mac_ver() returns macOS version
+ (('10.13.6', ('', '', ''), 'x86_64'),
+ 'macOS-10.13.6',
+ 'macOS-10.13.6-x86_64-i386-64bit'),
+ ]:
+ with mock.patch.object(platform, 'mac_ver',
+ return_value=mac_ver):
+ self.clear_caches()
+ self.assertEqual(platform.platform(terse=1), expected_terse)
+ self.assertEqual(platform.platform(), expected)
+
+
if __name__ == '__main__':
unittest.main()
diff --git a/Misc/NEWS.d/next/Library/2018-11-29-00-23-25.bpo-35344.4QOPJQ.rst b/Misc/NEWS.d/next/Library/2018-11-29-00-23-25.bpo-35344.4QOPJQ.rst
new file mode 100644
index 000000000000..a999cbe2a72e
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-11-29-00-23-25.bpo-35344.4QOPJQ.rst
@@ -0,0 +1,3 @@
+On macOS, :func:`platform.platform` now uses :func:`platform.mac_ver`, if it
+returns a non-empty release string, to get the macOS version rather than the
+darwin version.
More information about the Python-checkins
mailing list