Package conduit :: Package dataproviders :: Module HalFactory
[hide private]

Source Code for Module conduit.dataproviders.HalFactory

 1  import gobject 
 2  import dbus 
 3   
 4  import conduit.utils as Utils 
 5  import conduit.dataproviders.SimpleFactory as SimpleFactory 
 6   
7 -class HalFactory(SimpleFactory.SimpleFactory):
8
9 - def __init__(self, **kwargs):
10 SimpleFactory.SimpleFactory.__init__(self, **kwargs) 11 12 # Connect to system HAL 13 self.bus = dbus.SystemBus() 14 self.hal_obj = self.bus.get_object("org.freedesktop.Hal", "/org/freedesktop/Hal/Manager") 15 self.hal = dbus.Interface(self.hal_obj, "org.freedesktop.Hal.Manager") 16 17 # Hookup signals 18 self.hal.connect_to_signal("DeviceAdded", self._device_added) 19 self.hal.connect_to_signal("DeviceRemoved", self._device_removed) 20 self.hal.connect_to_signal("NewCapability", self._new_capability)
21
22 - def _device_added(self, device_udi, *args):
23 props = self._get_properties(device_udi) 24 if self.is_interesting(device_udi, props): 25 self.item_added(device_udi, **props)
26
27 - def _new_capability(self, device_udi, *args):
28 if not device_udi in self.items.keys(): 29 props = self._get_properties(device_udi) 30 if self.is_interesting(device_udi, props): 31 self.item_added(device_udi, **props)
32
33 - def _device_removed(self, device_udi):
34 self.item_removed(device_udi)
35
36 - def _get_properties(self, device):
37 try: 38 device_dbus_obj = self.bus.get_object("org.freedesktop.Hal" ,device) 39 buffer = {} 40 for x, y in device_dbus_obj.GetAllProperties(dbus_interface="org.freedesktop.Hal.Device").items(): 41 buffer[str(x)] = str(y) 42 return buffer 43 except: 44 return {}
45
46 - def probe(self):
47 """ Enumerate HAL for any entries of interest """ 48 devices = self.hal.GetAllDevices() 49 for device in self.hal.GetAllDevices(): 50 device = str(device) 51 props = self._get_properties(device) 52 if self.is_interesting(device, props): 53 self.item_added(device, **props)
54
55 - def get_args(self, udi, **kwargs):
56 return (udi,)
57