From 544504dfdd60cce88b98edba71d839ca104a0b50 Mon Sep 17 00:00:00 2001 From: mrandybu Date: Sun, 6 May 2018 12:12:57 +0300 Subject: [PATCH 1/2] Fixed incorrect version detection of linux in some distributions --- Lib/platform.py | 74 +++++++++++++++++++++++++++++++------------------ 1 file changed, 47 insertions(+), 27 deletions(-) diff --git a/Lib/platform.py b/Lib/platform.py index dc981ec144cc071..a953e25eca2ab82 100755 --- a/Lib/platform.py +++ b/Lib/platform.py @@ -135,6 +135,7 @@ # Directory to search for configuration information on Unix. # Constant used by test_platform to test linux_distribution(). _UNIXCONFDIR = '/etc' +_os_release = '/etc/os-release' ### Platform specific APIs @@ -328,35 +329,54 @@ def _linux_distribution(distname, version, id, supported_dists, args given as parameters. """ - try: - etc = os.listdir(_UNIXCONFDIR) - except OSError: - # Probably not a Unix system + def linux_dist_origin(distname, version, id): + try: + etc = os.listdir(_UNIXCONFDIR) + except OSError: + # Probably not a Unix system + return distname, version, id + etc.sort() + for file in etc: + m = _release_filename.match(file) + if m is not None: + _distname, dummy = m.groups() + if _distname in supported_dists: + distname = _distname + break + else: + return _dist_try_harder(distname, version, id) + + # Read the first line + with open(os.path.join(_UNIXCONFDIR, file), 'r', + encoding='utf-8', errors='surrogateescape') as f: + firstline = f.readline() + _distname, _version, _id = _parse_release_file(firstline) + + if _distname and full_distribution_name: + distname = _distname + if _version: + version = _version + if _id: + id = _id return distname, version, id - etc.sort() - for file in etc: - m = _release_filename.match(file) - if m is not None: - _distname, dummy = m.groups() - if _distname in supported_dists: - distname = _distname - break + + if os.path.exists(_os_release): + try: + _os_release_file = open(_os_release) + _os_release_content = _os_release_file.read() + + get_name = re.findall(r'NAME=.*', _os_release_content)[0] + distname = get_name.split('"')[1] + get_version = re.findall(r'VERSION_ID=.*', _os_release_content)[0] + version = get_version.split('=')[1] + get_id = re.findall(r'ID=.*', _os_release_content)[0] + id = get_id.split('=')[1] + return distname, version, id + + except IOError: + return linux_dist_origin() else: - return _dist_try_harder(distname, version, id) - - # Read the first line - with open(os.path.join(_UNIXCONFDIR, file), 'r', - encoding='utf-8', errors='surrogateescape') as f: - firstline = f.readline() - _distname, _version, _id = _parse_release_file(firstline) - - if _distname and full_distribution_name: - distname = _distname - if _version: - version = _version - if _id: - id = _id - return distname, version, id + return linux_dist_origin(distname, version, id) # To maintain backwards compatibility: From 19e8c4b062f8b19914d6cc8875fa34b1e9b90c0a Mon Sep 17 00:00:00 2001 From: Andrew <37226388+mrandybu@users.noreply.github.com> Date: Sun, 6 May 2018 17:06:48 +0300 Subject: [PATCH 2/2] Update platform.py --- Lib/platform.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/platform.py b/Lib/platform.py index a953e25eca2ab82..3fedb2de95d669f 100755 --- a/Lib/platform.py +++ b/Lib/platform.py @@ -374,7 +374,7 @@ def linux_dist_origin(distname, version, id): return distname, version, id except IOError: - return linux_dist_origin() + return linux_dist_origin(distname, version, id) else: return linux_dist_origin(distname, version, id)