summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony Asleson <tasleson@redhat.com>2016-08-24 18:31:15 -0500
committerTony Asleson <tasleson@redhat.com>2016-08-29 15:26:55 -0500
commit2bb09b4015ec85bb11b68a52e326a01ce3c8f98f (patch)
tree6ba61e58b7930d7f10de9dc8f83d274fcf4003f2
parent4902034c895d26423564175c0636cff8ba4112e1 (diff)
downloadlvm2-2bb09b4015ec85bb11b68a52e326a01ce3c8f98f.tar.gz
lvmdbusd: Be more explicit on return values
The python dbus library tries to make best on what the dbus type is based on python data type. Some times it gets this wrong, so we will be explicit.
-rw-r--r--daemons/lvmdbusd/job.py8
-rw-r--r--daemons/lvmdbusd/lv.py40
-rw-r--r--daemons/lvmdbusd/manager.py4
-rw-r--r--daemons/lvmdbusd/pv.py22
-rw-r--r--daemons/lvmdbusd/utils.py2
-rw-r--r--daemons/lvmdbusd/vg.py10
6 files changed, 42 insertions, 44 deletions
diff --git a/daemons/lvmdbusd/job.py b/daemons/lvmdbusd/job.py
index 520f9a87e..72995832c 100644
--- a/daemons/lvmdbusd/job.py
+++ b/daemons/lvmdbusd/job.py
@@ -121,7 +121,7 @@ class Job(AutomatedProperties):
@property
def Percent(self):
- return self.state.Percent
+ return dbus.Byte(int(self.state.Percent))
@Percent.setter
def Percent(self, value):
@@ -129,7 +129,7 @@ class Job(AutomatedProperties):
@property
def Complete(self):
- return self.state.Complete
+ return dbus.Boolean(self.state.Complete)
@Complete.setter
def Complete(self, value):
@@ -137,7 +137,7 @@ class Job(AutomatedProperties):
@property
def GetError(self):
- return self.state.GetError
+ return dbus.Struct(self.state.GetError, signature="(is)")
def set_result(self, ec, msg):
self.state.set_result(ec, msg)
@@ -160,7 +160,7 @@ class Job(AutomatedProperties):
@property
def Result(self):
- return self.state.Result
+ return dbus.ObjectPath(self.state.Result)
@property
def lvm_id(self):
diff --git a/daemons/lvmdbusd/lv.py b/daemons/lvmdbusd/lv.py
index 5658d29db..6d994acb2 100644
--- a/daemons/lvmdbusd/lv.py
+++ b/daemons/lvmdbusd/lv.py
@@ -252,14 +252,16 @@ class LvCommon(AutomatedProperties):
'V': 'thin Volume', 't': 'thin pool', 'T': 'Thin pool data',
'e': 'raid or pool metadata or pool metadata spare',
'-': 'Unspecified'}
- return (self.state.Attr[0], type_map[self.state.Attr[0]])
+ return dbus.Struct((self.state.Attr[0], type_map[self.state.Attr[0]]),
+ signature="as")
@property
def Permissions(self):
type_map = {'w': 'writable', 'r': 'read-only',
'R': 'Read-only activation of non-read-only volume',
'-': 'Unspecified'}
- return (self.state.Attr[1], type_map[self.state.Attr[1]])
+ return dbus.Struct((self.state.Attr[1], type_map[self.state.Attr[1]]),
+ signature="(ss)")
@property
def AllocationPolicy(self):
@@ -268,11 +270,12 @@ class LvCommon(AutomatedProperties):
'i': 'inherited', 'I': 'inherited locked',
'l': 'cling', 'L': 'cling locked',
'n': 'normal', 'N': 'normal locked', '-': 'Unspecified'}
- return (self.state.Attr[2], type_map[self.state.Attr[2]])
+ return dbus.Struct((self.state.Attr[2], type_map[self.state.Attr[2]]),
+ signature="(ss)")
@property
def FixedMinor(self):
- return self.state.Attr[3] == 'm'
+ return dbus.Boolean(self.state.Attr[3] == 'm')
@property
def State(self):
@@ -283,29 +286,32 @@ class LvCommon(AutomatedProperties):
'd': 'mapped device present without tables',
'i': 'mapped device present with inactive table',
'X': 'unknown', '-': 'Unspecified'}
- return (self.state.Attr[4], type_map[self.state.Attr[4]])
+ return dbus.Struct((self.state.Attr[4], type_map[self.state.Attr[4]]),
+ signature="(ss)")
@property
def TargetType(self):
type_map = {'C': 'Cache', 'm': 'mirror', 'r': 'raid',
's': 'snapshot', 't': 'thin', 'u': 'unknown',
'v': 'virtual', '-': 'Unspecified'}
- return (self.state.Attr[6], type_map[self.state.Attr[6]])
+ return dbus.Struct((self.state.Attr[6], type_map[self.state.Attr[6]]),
+ signature="(ss)")
@property
def ZeroBlocks(self):
- return self.state.Attr[7] == 'z'
+ return dbus.Boolean(self.state.Attr[7] == 'z')
@property
def Health(self):
type_map = {'p': 'partial', 'r': 'refresh',
'm': 'mismatches', 'w': 'writemostly',
'X': 'X unknown', '-': 'Unspecified'}
- return (self.state.Attr[8], type_map[self.state.Attr[8]])
+ return dbus.Struct((self.state.Attr[8], type_map[self.state.Attr[8]]),
+ signature="(ss)")
@property
def SkipActivation(self):
- return self.state.Attr[9] == 'k'
+ return dbus.Boolean(self.state.Attr[9] == 'k')
def vg_name_lookup(self):
return self.state.vg_name_lookup()
@@ -331,15 +337,15 @@ class LvCommon(AutomatedProperties):
@property
def IsThinVolume(self):
- return self.state.Attr[0] == 'V'
+ return dbus.Boolean(self.state.Attr[0] == 'V')
@property
def IsThinPool(self):
- return self.state.Attr[0] == 't'
+ return dbus.Boolean(self.state.Attr[0] == 't')
@property
def Active(self):
- return self.state.active == "active"
+ return dbus.Boolean(self.state.active == "active")
@dbus.service.method(
dbus_interface=LV_COMMON_INTERFACE,
@@ -698,11 +704,11 @@ class LvThinPool(Lv):
@property
def DataLv(self):
- return self._data_lv
+ return dbus.ObjectPath(self._data_lv)
@property
def MetaDataLv(self):
- return self._metadata_lv
+ return dbus.ObjectPath(self._metadata_lv)
@staticmethod
def _lv_create(lv_uuid, lv_name, name, size_bytes, create_options):
@@ -757,11 +763,11 @@ class LvCachePool(Lv):
@property
def DataLv(self):
- return self._data_lv
+ return dbus.ObjectPath(self._data_lv)
@property
def MetaDataLv(self):
- return self._metadata_lv
+ return dbus.ObjectPath(self._metadata_lv)
@staticmethod
def _cache_lv(lv_uuid, lv_name, lv_object_path, cache_options):
@@ -826,7 +832,7 @@ class LvCacheLv(Lv):
@property
def CachePool(self):
- return self.state.PoolLv
+ return dbus.ObjectPath(self.state.PoolLv)
@staticmethod
def _detach_lv(lv_uuid, lv_name, detach_options, destroy_cache):
diff --git a/daemons/lvmdbusd/manager.py b/daemons/lvmdbusd/manager.py
index 79254fef0..e0da82420 100644
--- a/daemons/lvmdbusd/manager.py
+++ b/daemons/lvmdbusd/manager.py
@@ -21,7 +21,7 @@ from . import udevwatch
# noinspection PyPep8Naming
class Manager(AutomatedProperties):
- _Version_meta = ("t", MANAGER_INTERFACE)
+ _Version_meta = ("s", MANAGER_INTERFACE)
def __init__(self, object_path):
super(Manager, self).__init__(object_path)
@@ -29,7 +29,7 @@ class Manager(AutomatedProperties):
@property
def Version(self):
- return '1.0.0'
+ return dbus.String('1.0.0')
@staticmethod
def _pv_create(device, create_options):
diff --git a/daemons/lvmdbusd/pv.py b/daemons/lvmdbusd/pv.py
index bbd76f114..078017936 100644
--- a/daemons/lvmdbusd/pv.py
+++ b/daemons/lvmdbusd/pv.py
@@ -69,7 +69,7 @@ class PvState(State):
lv_uuid, full_name, path_create)
rc.append((lv_path, segs))
- return dbus.Array(rc, signature="(oa(tts))")
+ return rc
# noinspection PyUnusedLocal,PyPep8Naming
def __init__(self, lvm_path, Uuid, Name,
@@ -241,26 +241,20 @@ class Pv(AutomatedProperties):
@property
def PeSegments(self):
if len(self.state.pe_segments):
- return self.state.pe_segments
- return dbus.Array([], '(tt)')
+ return dbus.Array(self.state.pe_segments, signature='(tt)')
+ return dbus.Array([], 'a(tt)')
@property
def Exportable(self):
- if self.state.attr[1] == 'x':
- return True
- return False
+ return dbus.Boolean(self.state.attr[1] == 'x')
@property
def Allocatable(self):
- if self.state.attr[0] == 'a':
- return True
- return False
+ return dbus.Boolean(self.state.attr[0] == 'a')
@property
def Missing(self):
- if self.state.attr[2] == 'm':
- return True
- return False
+ return dbus.Boolean(self.state.attr[2] == 'm')
def object_path(self):
return self._object_path
@@ -275,8 +269,8 @@ class Pv(AutomatedProperties):
@property
def Lv(self):
- return self.state.lv
+ return dbus.Array(self.state.lv, signature="(oa(tts))")
@property
def Vg(self):
- return self.state.vg_path
+ return dbus.ObjectPath(self.state.vg_path)
diff --git a/daemons/lvmdbusd/utils.py b/daemons/lvmdbusd/utils.py
index 65668fc51..c80290f2d 100644
--- a/daemons/lvmdbusd/utils.py
+++ b/daemons/lvmdbusd/utils.py
@@ -236,7 +236,7 @@ def parse_tags(tags):
if len(tags):
if ',' in tags:
return tags.split(',')
- return sorted([tags])
+ return dbus.Array(sorted([tags]), signature='s')
return dbus.Array([], signature='s')
diff --git a/daemons/lvmdbusd/vg.py b/daemons/lvmdbusd/vg.py
index 4cc938ed5..3b358734b 100644
--- a/daemons/lvmdbusd/vg.py
+++ b/daemons/lvmdbusd/vg.py
@@ -78,7 +78,7 @@ class VgState(State):
(pv_name, pv_uuid) = p
rc.append(cfg.om.get_object_path_by_uuid_lvm_id(
pv_uuid, pv_name, pv_obj_path_generate))
- return dbus.Array(rc, signature='o')
+ return rc
def __init__(self, Uuid, Name, Fmt,
SizeBytes, FreeBytes, SysId, ExtentSizeBytes,
@@ -840,9 +840,7 @@ class Vg(AutomatedProperties):
cfg.worker_q.put(r)
def _attribute(self, pos, ch):
- if self.state.attr[pos] == ch:
- return True
- return False
+ return dbus.Boolean(self.state.attr[pos] == ch)
@dbus.service.method(
dbus_interface=VG_INTERFACE,
@@ -908,11 +906,11 @@ class Vg(AutomatedProperties):
@property
def Pvs(self):
- return self.state.Pvs
+ return dbus.Array(self.state.Pvs, signature='o')
@property
def Lvs(self):
- return self.state.Lvs
+ return dbus.Array(self.state.Lvs, signature='o')
@property
def lvm_id(self):