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>
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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)