Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Restores compatibility shim with platform.linux_distribution #325

Merged
merged 2 commits into from
Feb 13, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 11 additions & 15 deletions src/distro/distro.py
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,8 @@ def linux_distribution(full_distribution_name: bool = True) -> Tuple[str, str, s

* ``version``: The result of :func:`distro.version`.

* ``codename``: The result of :func:`distro.codename`.
* ``codename``: The extra item (usually in parentheses) after the
os-release version number, or the result of :func:`distro.codename`.

The interface of this function is compatible with the original
:py:func:`platform.linux_distribution` function, supporting a subset of
Expand Down Expand Up @@ -768,7 +769,7 @@ def linux_distribution(
return (
self.name() if full_distribution_name else self.id(),
self.version(),
self.codename(),
self._os_release_info.get("release_codename") or self.codename(),
)

def id(self) -> str:
Expand Down Expand Up @@ -1055,12 +1056,17 @@ def _parse_os_release_content(lines: TextIO) -> Dict[str, str]:
# stripped, etc.), so the tokens are now either:
# * variable assignments: var=value
# * commands or their arguments (not allowed in os-release)
# Ignore any tokens that are not variable assignments
if "=" in token:
k, v = token.split("=", 1)
props[k.lower()] = v
else:
# Ignore any tokens that are not variable assignments
pass

if "version" in props:
# extract release codename (if any) from version attribute
match = re.search(r"\((\D+)\)|,\s*(\D+)", props["version"])
if match:
release_codename = match.group(1) or match.group(2)
HorlogeSkynet marked this conversation as resolved.
Show resolved Hide resolved
props["codename"] = props["release_codename"] = release_codename
HorlogeSkynet marked this conversation as resolved.
Show resolved Hide resolved

if "version_codename" in props:
# os-release added a version_codename field. Use that in
Expand All @@ -1071,16 +1077,6 @@ def _parse_os_release_content(lines: TextIO) -> Dict[str, str]:
elif "ubuntu_codename" in props:
# Same as above but a non-standard field name used on older Ubuntus
props["codename"] = props["ubuntu_codename"]
elif "version" in props:
# If there is no version_codename, parse it from the version
match = re.search(r"(\(\D+\))|,(\s+)?\D+", props["version"])
if match:
codename = match.group()
codename = codename.strip("()")
codename = codename.strip(",")
codename = codename.strip()
# codename appears within paranthese.
props["codename"] = codename

return props

Expand Down
9 changes: 9 additions & 0 deletions tests/test_distro.py
Original file line number Diff line number Diff line change
Expand Up @@ -1833,6 +1833,9 @@ def setup_method(self, test_method: FunctionType) -> None:
self.ubuntu14_os_release = os.path.join(
DISTROS_DIR, "ubuntu14", "etc", "os-release"
)
self.fedora30_os_release = os.path.join(
DISTROS_DIR, "fedora30", "etc", "os-release"
)

def test_info(self) -> None:
_distro = distro.LinuxDistribution(
Expand Down Expand Up @@ -1905,6 +1908,12 @@ def test_linux_distribution(self) -> None:
i = _distro.linux_distribution()
assert i == ("Ubuntu", "14.04", "Trusty Tahr")

_distro = distro.LinuxDistribution(
include_lsb=False, os_release_file=self.fedora30_os_release
)
i = _distro.linux_distribution()
assert i == ("Fedora", "30", "Thirty")
HorlogeSkynet marked this conversation as resolved.
Show resolved Hide resolved

def test_linux_distribution_full_false(self) -> None:
_distro = distro.LinuxDistribution(
include_lsb=False, os_release_file=self.ubuntu14_os_release
Expand Down