summaryrefslogtreecommitdiffstats
path: root/obmc/dbuslib
diff options
context:
space:
mode:
authorBrad Bishop <bradleyb@fuzziesquirrel.com>2016-06-27 21:55:29 -0400
committerBrad Bishop <bradleyb@fuzziesquirrel.com>2016-07-10 22:05:23 -0400
commit6835b67a28993d17dfec85519d5335eebdfda44d (patch)
treea66c94d185260b682c60b5b091377539b2f19552 /obmc/dbuslib
parent1f1d49bfe1700b25e9eb65eff60e7dc76afcb079 (diff)
downloadpyphosphor-6835b67a28993d17dfec85519d5335eebdfda44d.tar.gz
pyphosphor-6835b67a28993d17dfec85519d5335eebdfda44d.zip
Allow control of signal generation
Typically ObjectManager signals should remain masked until a service has grabbed a well-known bus name to avoid pointless dbus signal generation. Change-Id: I26703ec7a8b946128fe5aa8ed1c830a2e8f23c21 Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Diffstat (limited to 'obmc/dbuslib')
-rw-r--r--obmc/dbuslib/bindings.py44
1 files changed, 37 insertions, 7 deletions
diff --git a/obmc/dbuslib/bindings.py b/obmc/dbuslib/bindings.py
index 3dec5af..bced585 100644
--- a/obmc/dbuslib/bindings.py
+++ b/obmc/dbuslib/bindings.py
@@ -45,6 +45,19 @@ class DbusProperties(dbus.service.Object):
dbus.service.Object.__init__(self)
self.properties = {}
self.object_path = ""
+ self._export = False
+
+ def unmask_signals(self):
+ self._export = True
+ inst = super(DbusProperties, self)
+ if hasattr(inst, 'unmask_signals'):
+ inst.unmask_signals()
+
+ def mask_signals(self):
+ self._export = False
+ inst = super(DbusProperties, self)
+ if hasattr(inst, 'mask_signals'):
+ inst.mask_signals()
@dbus.service.method(
dbus.PROPERTIES_IFACE,
@@ -79,13 +92,15 @@ class DbusProperties(dbus.service.Object):
old_value = self.properties[interface_name][property_name]
if (old_value != new_value):
self.properties[interface_name][property_name] = new_value
- self.PropertiesChanged(
- interface_name, {property_name: new_value}, [])
+ if self._export:
+ self.PropertiesChanged(
+ interface_name, {property_name: new_value}, [])
except:
self.properties[interface_name][property_name] = new_value
- self.PropertiesChanged(
- interface_name, {property_name: new_value}, [])
+ if self._export:
+ self.PropertiesChanged(
+ interface_name, {property_name: new_value}, [])
@dbus.service.method(
"org.openbmc.Object.Properties", in_signature='sa{sv}')
@@ -105,7 +120,7 @@ class DbusProperties(dbus.service.Object):
except:
self.properties[interface_name][property_name] = new_value
value_changed = True
- if (value_changed is True):
+ if (value_changed is True and self._export):
self.PropertiesChanged(interface_name, prop_dict, [])
@dbus.service.signal(
@@ -119,15 +134,30 @@ class DbusObjectManager(dbus.service.Object):
def __init__(self):
dbus.service.Object.__init__(self)
self.objects = {}
+ self._export = False
+
+ def unmask_signals(self):
+ self._export = True
+ inst = super(DbusObjectManager, self)
+ if hasattr(inst, 'unmask_signals'):
+ inst.unmask_signals()
+
+ def mask_signals(self):
+ self._export = False
+ inst = super(DbusObjectManager, self)
+ if hasattr(inst, 'mask_signals'):
+ inst.mask_signals()
def add(self, object_path, obj):
self.objects[object_path] = obj
- self.InterfacesAdded(object_path, obj.properties)
+ if self._export:
+ self.InterfacesAdded(object_path, obj.properties)
def remove(self, object_path):
obj = self.objects.pop(object_path, None)
obj.remove_from_connection()
- self.InterfacesRemoved(object_path, obj.properties.keys())
+ if self._export:
+ self.InterfacesRemoved(object_path, obj.properties.keys())
def get(self, object_path, default=None):
return self.objects.get(object_path, default)
OpenPOWER on IntegriCloud