From: Michael Tremer Date: Sun, 28 Nov 2010 13:08:33 +0000 (+0100) Subject: Read vendor and model of the system from the DMI. X-Git-Tag: v0.3~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=45b74ad539a23b6a4f687f6bec2d0eca770f457e;p=oddments%2Ffireinfo.git Read vendor and model of the system from the DMI. --- diff --git a/fireinfo/system.py b/fireinfo/system.py index a8b7618..e4388d3 100644 --- a/fireinfo/system.py +++ b/fireinfo/system.py @@ -9,6 +9,8 @@ import cpu import device import hypervisor +SYS_CLASS_DMI = "/sys/class/dmi/id" + class Singleton(type): def __init__(cls, name, bases, dict): super(Singleton, cls).__init__(name, bases, dict) @@ -21,6 +23,19 @@ class Singleton(type): return cls.instance +def read_from_file(filename): + """ + Read all data from filename. + """ + if not os.path.exists(filename): + return + + try: + with open(filename) as f: + return f.read().strip() + except IOError: + pass + class System(object): __metaclass__ = Singleton @@ -44,6 +59,10 @@ class System(object): "root_size" : self.root_size, "devices" : [], + # System information + "model" : self.model, + "vendor" : self.vendor, + "virtual" : self.virtual, } @@ -135,6 +154,26 @@ class System(object): with open("/sys/class/dmi/id/bios_vendor", "r") as f: return f.read().strip() + @property + def vendor(self): + ret = None + for file in ("chassis_vendor", "board_vendor", "sys_vendor",): + ret = read_from_file(os.path.join(SYS_CLASS_DMI, file)) + if ret: + break + + return ret + + @property + def model(self): + ret = None + for file in ("chassis_model", "board_model", "product_name",): + ret = read_from_file(os.path.join(SYS_CLASS_DMI, file)) + if ret: + break + + return ret + @property def memory(self): with open("/proc/meminfo", "r") as f: