~ahasenack/landscape-client/landscape-client-11.02

« back to all changes in this revision

Viewing changes to landscape/monitor/mountinfo.py

  • Committer: Andreas Hasenack
  • Date: 2011-03-01 18:40:36 UTC
  • Revision ID: andreas@canonical.com-20110301184036-d34hjsrh38qxkgql
Imported changes from our production branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
from landscape.lib.disk import get_mount_info
5
5
from landscape.lib.monitor import CoverageMonitor
6
6
from landscape.accumulate import Accumulator
7
 
from landscape.hal import HALManager
8
7
from landscape.monitor.plugin import MonitorPlugin
9
8
 
10
9
 
29
28
        self._free_space = []
30
29
        self._mount_info = []
31
30
        self._mount_info_to_persist = None
32
 
        self._hal_manager = hal_manager or HALManager()
 
31
        try:
 
32
            from landscape.hal import HALManager
 
33
        except ImportError:
 
34
            self._hal_manager = hal_manager
 
35
        else:
 
36
            self._hal_manager = hal_manager or HALManager()
 
37
        try:
 
38
            from gi.repository import GUdev
 
39
        except ImportError:
 
40
            self._gudev_client = None
 
41
        else:
 
42
            self._gudev_client = GUdev.Client.new([])
33
43
 
34
44
    def register(self, registry):
35
45
        super(MountInfo, self).register(registry)
108
118
            current_mount_points.add(mount_point)
109
119
 
110
120
    def _get_removable_devices(self):
 
121
        if self._hal_manager is not None:
 
122
            return self._get_hal_removable_devices()
 
123
        elif self._gudev_client is not None:
 
124
            return self._get_udev_removable_devices()
 
125
        else:
 
126
            return set()
 
127
 
 
128
    def _get_udev_removable_devices(self):
 
129
        class is_removable(object):
 
130
            def __contains__(oself, device_name):
 
131
                device = self._gudev_client.query_by_device_file(device_name)
 
132
                if device:
 
133
                    return device.get_sysfs_attr_as_boolean("removable")
 
134
                return False
 
135
        return is_removable()
 
136
 
 
137
    def _get_hal_removable_devices(self):
111
138
        block_devices = {}  # {udi: [device, ...]}
112
139
        children = {}  # {parent_udi: [child_udi, ...]}
113
140
        removable = set()