import json import logging from evidence.mixin_parse import BuildMix from evidence.normal_parse_details import get_inxi_key, get_inxi, ParseSnapshot logger = logging.getLogger('django') def get_mac(inxi): nets = get_inxi_key(inxi, "Network") networks = [(nets[i], nets[i + 1]) for i in range(0, len(nets) - 1, 2)] for n, iface in networks: if get_inxi(n, "port"): return get_inxi(iface, 'mac') class Build(BuildMix): def get_details(self): self.from_credential() try: self.inxi = self.json["data"]["inxi"] if isinstance(self.inxi, str): self.inxi = json.loads(self.inxi) except Exception: logger.error("No inxi in snapshot %s", self.uuid) return "" machine = get_inxi_key(self.inxi, 'Machine') for m in machine: system = get_inxi(m, "System") if system: self.manufacturer = system self.model = get_inxi(m, "product") self.serial_number = get_inxi(m, "serial") self.chassis = get_inxi(m, "Type") else: self.sku = get_inxi(m, "part-nu") self.mac = get_mac(self.inxi) or "" if not self.mac: txt = "Could not retrieve MAC address in snapshot %s" logger.warning(txt, self.uuid) def from_credential(self): if not self.json.get("credentialSubject"): return self.uuid = self.json.get("credentialSubject", {}).get("uuid") self.json.update(self.json["credentialSubject"]) if self.json.get("evidence"): self.json["data"] = {} for ev in self.json["evidence"]: k = ev.get("operation") if not k: continue self.json["data"][k] = ev.get("output") def _get_components(self): data = ParseSnapshot(self.json) self.components = data.components