filesystem: raise exception only when applicable

We should first see if any of the files in the tree actually
require a service mapping before raising
ValueError('TODO: implement recursive service -> file mapping')

Change-Id: I9c339f0cac020e7eec7f4f840748040e5f77923d
diff --git a/pySim/filesystem.py b/pySim/filesystem.py
index 37c668d..c40eaf8 100644
--- a/pySim/filesystem.py
+++ b/pySim/filesystem.py
@@ -301,6 +301,14 @@
         else:
             raise ValueError
 
+    def _has_service(self):
+        if self.service:
+            return True
+        for c in self.children.values():
+            if isinstance(c, CardDF):
+                if c._has_service():
+                    return True
+
     def add_file(self, child: CardFile, ignore_existing: bool = False):
         """Add a child (DF/EF) to this DF.
         Args:
@@ -336,7 +344,10 @@
             for c in child.children.values():
                 self._add_file_services(c)
                 if isinstance(c, CardDF):
-                    raise ValueError('TODO: implement recursive service -> file mapping')
+                    for gc in c.children.values():
+                        if isinstance(gc, CardDF):
+                            if gc._has_service():
+                                raise ValueError('TODO: implement recursive service -> file mapping')
 
     def add_files(self, children: Iterable[CardFile], ignore_existing: bool = False):
         """Add a list of child (DF/EF) to this DF