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)