fwupd/contrib/generate-emulation.py
Mario Limonciello b7b0ce533d trivial: Unify ambiguity between bios-attrs and bios-settings
These are currently used interchangeably since there was indecisiveness
which to use as the feature was being developed.

As outward facing it will be named with "settings", change all uses
in the code to match this.
2022-08-24 07:20:01 -05:00

137 lines
3.8 KiB
Python
Executable File

#!/usr/bin/python3
#
# Copyright (C) 2017 Richard Hughes <richard@hughsie.com>
#
# SPDX-License-Identifier: LGPL-2.1+
#
# pylint: disable=invalid-name,missing-docstring,consider-using-f-string
import json
import sys
from typing import Dict, List, Any
import gi
from gi.repository import GLib
gi.require_version("Fwupd", "2.0")
gi.require_version("Json", "1.0")
from gi.repository import Fwupd # pylint: disable=wrong-import-position
from gi.repository import Json # pylint: disable=wrong-import-position
def _minimize_json(json_str: str) -> str:
nodes = json.loads(json_str)
new_attrs: List[Dict[str, Any]] = []
new_devices: List[Dict[str, Any]] = []
new_bios_settings: List[Dict[str, Any]] = []
try:
for attr in nodes["SecurityAttributes"]:
new_attr: Dict[str, Any] = {}
for key in attr:
if key in ["AppstreamId", "HsiResult", "Flags", "Plugin"]:
new_attr[key] = attr[key]
new_attrs.append(new_attr)
except KeyError:
pass
try:
for device in nodes["Devices"]:
new_device: Dict[str, Any] = {}
for key in device:
if key not in ["Created", "Modified", "Releases", "Plugin"]:
new_device[key] = device[key]
new_devices.append(new_device)
except KeyError:
pass
try:
for device in nodes["BiosSettings"]:
new_attr: Dict[str, Any] = {}
for key in device:
if key not in ["Filename"]:
new_attr[key] = device[key]
new_bios_settings.append(new_attr)
except KeyError:
pass
return json.dumps(
{
"SecurityAttributes": new_attrs,
"Devices": new_devices,
"BiosSettings": new_bios_settings,
},
indent=2,
separators=(",", " : "),
)
def _get_host_devices_and_attrs() -> str:
# connect to the running daemon
client = Fwupd.Client()
builder = Json.Builder()
builder.begin_object()
# add devices
try:
devices = client.get_devices()
except GLib.GError as e:
print("ignoring {}".format(e))
else:
builder.set_member_name("Devices")
builder.begin_array()
for device in devices:
builder.begin_object()
device.to_json_full(builder, Fwupd.DEVICE_FLAG_TRUSTED)
builder.end_object()
builder.end_array()
# add security attributes
try:
attrs = client.get_host_security_attrs()
except GLib.GError as e:
print("ignoring {}".format(e))
else:
builder.set_member_name("SecurityAttributes")
builder.begin_array()
for attr in attrs:
builder.begin_object()
attr.to_json(builder)
builder.end_object()
builder.end_array()
# add BIOS settings
try:
attrs = client.get_bios_settings()
except GLib.GError as e:
print("ignoring {}".format(e))
else:
builder.set_member_name("BiosSettings")
builder.begin_array()
for attr in attrs:
builder.begin_object()
attr.to_json(builder)
builder.end_object()
builder.end_array()
# export to JSON
builder.end_object()
generator = Json.Generator()
generator.set_pretty(True)
generator.set_root(builder.get_root())
return generator.to_data()[0]
if len(sys.argv) < 2:
sys.stdout.write(_minimize_json(sys.stdin.read()))
else:
for fn in sys.argv[1:]:
try:
with open(fn, "rb") as f_in:
json_in = f_in.read().decode()
except FileNotFoundError:
json_in = _get_host_devices_and_attrs()
json_out = _minimize_json(json_in).encode()
with open(fn, "wb") as f_out:
f_out.write(json_out)