summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad Bishop <bradleyb@fuzziesquirrel.com>2018-10-19 20:58:53 -0400
committerBrad Bishop <bradleyb@fuzziesquirrel.com>2018-10-25 08:47:42 -0400
commit365dee325c14d5b92365895178373c442342bb5c (patch)
tree07481babbb788c9804375e244f8a80e1be5e0ff8
parentcfe3e4424efbf16d56a7570af0579ef574fd74f6 (diff)
downloadphosphor-objmgr-365dee325c14d5b92365895178373c442342bb5c.tar.gz
phosphor-objmgr-365dee325c14d5b92365895178373c442342bb5c.zip
python-mapper: Switch to dbus service whitelist
Use dbus service/busname filtering to match the c++ mapper. This facilitates an easy transition to c++ mapper. Set service-namespace as a required parameter. Set path-namespace as an optional parameter. Change-Id: I6b16622ee1cb354030a82e7b9d412235933c2d39 Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
-rw-r--r--obmc/mapper/server.py26
-rw-r--r--phosphor-mapper4
2 files changed, 15 insertions, 15 deletions
diff --git a/obmc/mapper/server.py b/obmc/mapper/server.py
index 29a65a4..4a6ce16 100644
--- a/obmc/mapper/server.py
+++ b/obmc/mapper/server.py
@@ -43,7 +43,6 @@ class MapperNotFoundException(dbus.exceptions.DBusException):
def find_dbus_interfaces(conn, service, path, callback, error_callback, **kw):
iface_match = kw.pop('iface_match', bool)
- subtree_match = kw.pop('subtree_match', bool)
class _FindInterfaces(object):
def __init__(self):
@@ -148,7 +147,7 @@ def find_dbus_interfaces(conn, service, path, callback, error_callback, **kw):
self._to_path(chain(path_elements,
self._to_path_elements(x)))
for x in sorted(children)]
- for child in filter(subtree_match, children):
+ for child in children:
if child not in self.results:
self._find_interfaces(child)
except Exception as e:
@@ -374,7 +373,8 @@ class ObjectMapper(dbus.service.Object):
def process_new_owner(self, owned_name, owner):
# unique name
try:
- return self.discover([(owned_name, owner)])
+ if self.busname_match(owned_name):
+ self.discover([(owned_name, owner)])
except dbus.exceptions.DBusException as e:
if obmc.dbuslib.enums.DBUS_UNKNOWN_SERVICE \
not in e.get_dbus_name():
@@ -443,17 +443,18 @@ class ObjectMapper(dbus.service.Object):
for path, items in bus_items.items():
self.update_interfaces(path, str(owner), old=[], new=items)
- def path_match(self, path):
+ def busname_match(self, busname):
match = False
- if not any([x for x in self.blacklist if x in path]):
+ if not any([x for x in self.service_blacklist if x in busname]):
# not blacklisted
- if any([x for x in self.namespaces if x in path]):
- # a watched namespace contains the path
+ if any([x for x in self.service_namespaces if x in busname]):
+ # a watched busname contains the path
match = True
- elif any([path for x in self.namespaces if path in x]):
- # the path contains a watched namespace
+ elif any([busname for x in self.service_namespaces
+ if busname in x]):
+ # the busname contains a watched namespace
match = True
return match
@@ -476,7 +477,6 @@ class ObjectMapper(dbus.service.Object):
find_dbus_interfaces(self.bus, owner, '/',
self.discovery_callback,
self.discovery_error,
- subtree_match=self.path_match,
iface_match=self.interface_match)
def discover(self, owners=None):
@@ -490,8 +490,9 @@ class ObjectMapper(dbus.service.Object):
traceback.print_exception(*sys.exc_info())
if not owners:
- owned_names = [x for x in self.bus.list_names()
- if not obmc.dbuslib.bindings.is_unique(x)]
+ owned_names = [
+ x for x in filter(self.busname_match, self.bus.list_names())
+ if not obmc.dbuslib.bindings.is_unique(x)]
owners = filter(bool, (get_owner(name) for name in owned_names))
for owned_name, o in owners:
if not self.bus_normalize(owned_name):
@@ -502,7 +503,6 @@ class ObjectMapper(dbus.service.Object):
self.bus, owned_name, '/',
self.discovery_callback,
self.discovery_error_retry,
- subtree_match=self.path_match,
iface_match=self.interface_match)
def bus_normalize(self, name):
diff --git a/phosphor-mapper b/phosphor-mapper
index 25d9867..4303434 100644
--- a/phosphor-mapper
+++ b/phosphor-mapper
@@ -24,10 +24,10 @@ if __name__ == '__main__':
parser = ArgumentParser()
parser.add_argument(
'-p', '--path_namespaces',
- required=True)
+ default="")
parser.add_argument(
'-s', '--service_namespaces',
- default="")
+ required=True)
parser.add_argument(
'-i', '--interface_namespaces',
required=True)
OpenPOWER on IntegriCloud