]> git.ipfire.org Git - people/ms/westferry.git/commitdiff
about: Add OS information
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 6 Dec 2021 17:12:19 +0000 (17:12 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 6 Dec 2021 17:12:19 +0000 (17:12 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/westferry/backend/system.py
src/westferry/handlers/system.py

index 1d9344d08a703b141b8a445fae1f5c88ec30b880..6280215aed0bbb6ae0ea5c78eac750010b2e80d1 100644 (file)
 #                                                                             #
 ###############################################################################
 
-import pydbus
+import ast
 import functools
+import logging
 import os
+import pydbus
 import socket
 
 from . import base
 
+# Get logger
+log = logging.getLogger(__name__)
+
 class SystemBackend(base.BaseBackend):
        # Populate some attributes from uname()
        kernel_name, __nodename, kernel_release, kernel_version, machine = os.uname()
@@ -42,6 +47,10 @@ class SystemBackend(base.BaseBackend):
        def arch(self):
                return self.systemd.Architecture
 
+       @functools.cached_property
+       def os(self):
+               return OperatingSystem(self.backend)
+
        @property
        def virtualization(self):
                """
@@ -59,3 +68,65 @@ class SystemBackend(base.BaseBackend):
        @hostname.setter
        def hostname(self, hostname):
                print("SETTING HOSTNAME TO %s" % hostname)
+
+
+class OperatingSystem(base.BaseBackend):
+       """
+               This class provides various information about the operating system this
+               program is running on.
+
+               Currently it reads all its information from /etc/os-release.
+       """
+
+       KNOWN_FIELDS = (
+               "BUG_REPORT_URL",
+               "BUILD_ID",
+               "CPE_NAME",
+               "DEFAULT_HOSTNAME",
+               "DOCUMENTATION_URL",
+               "HOME_URL",
+               "ID",
+               "IMAGE_ID",
+               "IMAGE_VERSION",
+               "LOGO",
+               "NAME",
+               "PRETTY_NAME",
+               "PRIVACY_POLICY_URL",
+               "SUPPORT_URL",
+               "VARIANT",
+               "VARIANT_ID",
+               "VERSION",
+               "VERSION_CODENAME",
+               "VERSION_ID",
+       )
+
+       def initialize(self):
+               # Parse everything on load
+               self._read_os_release()
+
+       def _read_os_release(self):
+               """
+                       Reads /etc/os-release and adds all known values as attributes to this class.
+               """
+               data = {}
+
+               # Read /etc/os-release into a dictionary
+               with open("/etc/os-release") as f:
+                       for line in f:
+                               key, delim, value = line.partition("=")
+
+                               # Strip the value if it is quoted
+                               if value.startswith("\""):
+                                       value = ast.literal_eval(value)
+
+                               # Store in data
+                               data[key] = value
+
+               # Assign all values as attributes (or set to None)
+               for key in self.KNOWN_FIELDS:
+                       value = data.get(key, None)
+
+                       setattr(self, key, value)
+
+       def __str__(self):
+               return self.PRETTY_NAME
index 9871857c0c626ec999421bc9a30eb944f3b49c38..1860fc94e024bd9fcd8794a0385ae58836c5275a 100644 (file)
@@ -77,6 +77,12 @@ class AboutHandler(BaseHandler):
                _ = self.locale.translate
 
                tables = {
+                       _("Operating System") : {
+                               _("Release")  : self.backend.system.os,
+                               _("Variant")  : self.backend.system.os.VARIANT,
+                               _("Build ID") : self.backend.system.os.BUILD_ID,
+                       },
+
                        _("Software Versions") : {
                                PACKAGE_NAME : PACKAGE_VERSION,
                                _("Kernel")  : " ".join((