2018-06-01 20:10:09 +00:00
|
|
|
# This file is part of subiquity. See LICENSE file for license information.
|
|
|
|
import shlex
|
2022-04-05 07:58:45 +00:00
|
|
|
from typing import Dict
|
2018-06-01 20:10:09 +00:00
|
|
|
|
|
|
|
LSB_RELEASE_FILE = "/etc/lsb-release"
|
2021-12-17 14:50:32 +00:00
|
|
|
LSB_RELEASE_EXAMPLE = "examples/lsb-release-focal"
|
2018-06-01 20:10:09 +00:00
|
|
|
|
|
|
|
|
2024-02-13 10:51:48 +00:00
|
|
|
def lsb_release_from_path(path: str) -> Dict[str, str]:
|
2022-04-05 07:58:45 +00:00
|
|
|
ret: Dict[str, str] = {}
|
2018-06-01 20:10:09 +00:00
|
|
|
try:
|
|
|
|
with open(path, "r") as fp:
|
|
|
|
content = fp.read()
|
|
|
|
except FileNotFoundError:
|
|
|
|
return ret
|
|
|
|
|
|
|
|
for tok in shlex.split(content):
|
|
|
|
k, _, v = tok.partition("=")
|
|
|
|
if not k.startswith("DISTRIB_") or not v:
|
|
|
|
continue
|
|
|
|
ret[k.replace("DISTRIB_", "").lower()] = v
|
|
|
|
return ret
|
|
|
|
|
|
|
|
|
2024-02-13 10:51:48 +00:00
|
|
|
def lsb_release(path=None, dry_run: bool = False) -> Dict[str, str]:
|
|
|
|
"""return a dictionary of values from /etc/lsb-release.
|
|
|
|
keys are lower case with DISTRIB_ prefix removed."""
|
|
|
|
if dry_run and path is not None:
|
|
|
|
raise ValueError("Both dry_run and path are specified.")
|
|
|
|
|
|
|
|
if path is None:
|
|
|
|
path = LSB_RELEASE_EXAMPLE if dry_run else LSB_RELEASE_FILE
|
|
|
|
|
|
|
|
return lsb_release_from_path(path)
|
|
|
|
|
|
|
|
|
2018-06-01 20:10:09 +00:00
|
|
|
if __name__ == "__main__":
|
|
|
|
print(lsb_release())
|