code: def add(self, path, debug, children):
          
          if path in self._stats_by_path:
              print("%s is already being watched" % (path))
              return
  
          # we can't watch child paths of what's already being watched,
          # because that generates a race between firing and resetting
          # watches for overlapping paths.
          if "/" in self._stats_by_path:
              print("/ is already being watched, so everything is watched")
              return
  
          for epath in self._stats_by_path:
              if epath.startswith(path):
                  print(self.PARENT_ERR % (path, epath))
                  return
  
              if path.startswith(epath):
                  print(self.CHILD_ERR % (path, epath))
                  return
  
          self._stats_by_path[path] = PathStats(debug)
          self._watch(path, 0, children)
docs: Set a watch for path and (maybe) its children depending on the value
          of children:
  
           -1:  all children
            0:  no children
          > 0:  up to level depth children
  
          If debug is true, print each received events.