~bladernr/checkbox/1095713-set-pipefail-on-sleep-jobs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import dbus

from hwtest.reports.data import DataReport


class HalReport(DataReport):
    """Report for HAL related data types."""

    def register_dumps(self):
        for (dt, dh) in [(dbus.Boolean, self.dumps_bool),
                         (dbus.Int32, self.dumps_int),
                         (dbus.UInt64, self.dumps_uint64),
                         (dbus.Double, self.dumps_double),
                         (dbus.String, self.dumps_str),
                         (dbus.Array, self.dumps_list),
                         (dbus.Dictionary, self.dumps_dict),
                         ("hal", self.dumps_hal)]:
            self._manager.handle_dumps(dt, dh)

    def register_loads(self):
        for (lt, lh) in [("hal", self.loads_hal),
                         ("uint64", self.loads_int),
                         ("double", self.loads_float)]:
            self._manager.handle_loads(lt, lh)

    def dumps_uint64(self, obj, parent):
        self._dumps_text(str(obj), parent, "uint64")

    def dumps_double(self, obj, parent):
        self._dumps_text(str(obj), parent, "double")

    def dumps_hal(self, obj, parent):
        parent.setAttribute("version", obj["version"])
        id = 0
        for device in obj["devices"]:
            element = self._create_element("device", parent)
            properties = self._create_element("properties", element)
            element.setAttribute("id", str(id)); id += 1
            element.setAttribute("udi", device["info.udi"])
            self._manager.call_dumps(device, properties)

    def loads_hal(self, node):
        hal = {}
        hal["version"] = node.getAttribute("version")
        hal["devices"] = []
        for device in (d for d in node.childNodes if d.localName == "device"):
            properties = device.getElementsByTagName("properties")[0]
            value = self._manager.call_loads(properties)
            hal["devices"].append(value)
        return hal