~free.ekanayaka/landscape-client/karmic-1.5.4-0ubuntu0.9.10.0

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
51
52
import logging

from dbus import Interface, SystemBus
from dbus.exceptions import DBusException


class HALManager(object):

    def __init__(self, bus=None):
        try:
            self._bus = bus or SystemBus()
            manager = self._bus.get_object("org.freedesktop.Hal",
                                           "/org/freedesktop/Hal/Manager")
        except DBusException:
            logging.error("Couldn't to connect to Hal via DBus")
            self._manager = None
        else:
            self._manager = Interface(manager, "org.freedesktop.Hal.Manager")

    def get_devices(self):
        """Returns a list of HAL devices.

        @note: If it wasn't possible to connect to HAL over DBus, then an
            emtpy list will be returned. This can happen if the HAL or DBus
            services are not running.
        """
        if not self._manager:
            return []
        devices = []
        for udi in self._manager.GetAllDevices():
            device = self._bus.get_object("org.freedesktop.Hal", udi)
            device = Interface(device, "org.freedesktop.Hal.Device")
            device = HALDevice(device)
            devices.append(device)
        return devices


class HALDevice(object):

    def __init__(self, device):
        self._children = []
        self._device = device
        self.properties = device.GetAllProperties()
        self.udi = self.properties["info.udi"]
        self.parent = None

    def add_child(self, device):
        self._children.append(device)
        device.parent = self

    def get_children(self):
        return self._children