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

Source Code for Module conduit.dataproviders.VolumeFactory

 1  import logging 
 2  log = logging.getLogger("dataproviders.SimpleFactory") 
 3   
 4  import conduit 
 5  import conduit.dataproviders.SimpleFactory as SimpleFactory 
 6  import conduit.utils as Utils 
 7  import conduit.Vfs as Vfs 
 8   
 9  import dbus 
10   
11 -class VolumeFactory(SimpleFactory.SimpleFactory):
12 """ 13 Generic factory for dataproviders that are removable file system based 14 """ 15
16 - def __init__(self, **kwargs):
17 SimpleFactory.SimpleFactory.__init__(self, **kwargs) 18 19 self.vol_monitor = Vfs.VolumeMonitor() 20 self.bus = dbus.SystemBus() 21 22 if Utils.dbus_service_available('org.freedesktop.Hal', self.bus): 23 log.info("HAL Initialized") 24 self.vol_monitor.connect("volume-mounted",self._volume_mounted_cb) 25 self.vol_monitor.connect("volume-unmounted",self._volume_unmounted_cb) 26 else: 27 log.warn("HAL Could not be Initialized")
28
29 - def _volume_mounted_cb(self, monitor, device_udi):
30 log.info("Volume mounted, udi: %s" % device_udi) 31 if device_udi : 32 props = self._get_properties(device_udi) 33 if self.is_interesting(device_udi, props): 34 mount, label = self._get_device_info(props) 35 kwargs = { "mount": mount, "label": label } 36 self.item_added(device_udi, **kwargs) 37 return True
38
39 - def _volume_unmounted_cb(self, monitor, device_udi):
40 log.info("Volume mounted, udi: %s" % device_udi) 41 if device_udi : 42 if self.is_interesting(device_udi, self._get_properties(device_udi)): 43 self.item_removed(device_udi) 44 return False
45
46 - def _get_properties(self, device_udi):
47 try: 48 device_dbus_obj = self.bus.get_object("org.freedesktop.Hal" ,device_udi) 49 return device_dbus_obj.GetAllProperties(dbus_interface="org.freedesktop.Hal.Device") 50 except: 51 return {}
52
53 - def _get_device_info(self, properties):
54 """ 55 Returns the mount point and label in a 2-tuple 56 """ 57 if properties.has_key("volume.mount_point"): 58 mount = str(properties["volume.mount_point"]) 59 else: 60 mount = "" 61 if properties.has_key("volume.label"): 62 label = str(properties["volume.label"]) 63 else: 64 label = "" 65 66 return (mount, label)
67
68 - def probe(self):
69 """ 70 Called after VolumeFactory is initialised to detect already connected volumes 71 """ 72 for device_udi in self.vol_monitor.get_mounted_volumes(): 73 if device_udi != None: 74 props = self._get_properties(device_udi) 75 if self.is_interesting(device_udi, props): 76 mount, label = self._get_device_info(props) 77 kwargs = { "mount": mount, "label": label } 78 self.item_added(device_udi, **kwargs)
79
80 - def get_args(self, udi, **kwargs):
81 """ VolumeFactory passes mount point and udi to dataproviders """ 82 return (kwargs['mount'], udi,)
83