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
53
54
55
56
57
|
# iutil.py stubs
import os
import logging
log = logging.getLogger("storage")
def notify_kernel(path, action="change"):
""" Signal the kernel that the specified device has changed. """
log.debug("notifying kernel of '%s' event on device %s" % (action, path))
path = os.path.join(path, "uevent")
if not path.startswith("/sys/") or not os.access(path, os.W_OK):
log.debug("sysfs path '%s' invalid" % path)
raise ValueError("invalid sysfs path")
f = open(path, "a")
f.write("%s\n" % action)
f.close()
def get_sysfs_path_by_name(dev_name, class_name="block"):
dev_name = os.path.basename(dev_name)
sysfs_class_dir = "/sys/class/%s" % class_name
dev_path = os.path.join(sysfs_class_dir, dev_name)
if os.path.exists(dev_path):
return dev_path
import inspect
def log_method_call(d, *args, **kwargs):
classname = d.__class__.__name__
methodname = inspect.stack()[1][3]
fmt = "%s.%s:"
fmt_args = [classname, methodname]
for arg in args:
fmt += " %s ;"
fmt_args.append(arg)
for k, v in kwargs.items():
fmt += " %s: %s ;"
fmt_args.extend([k, v])
log.debug(fmt % tuple(fmt_args))
def numeric_type(num):
""" Verify that a value is given as a numeric data type.
Return the number if the type is sensible or raise ValueError
if not.
"""
if num is None:
num = 0
elif not (isinstance(num, int) or \
isinstance(num, long) or \
isinstance(num, float)):
raise ValueError("value (%s) must be either a number or None" % num)
return num
|