diff --git a/inotify/adapters.py b/inotify/adapters.py index 8a67347..cd90972 100644 --- a/inotify/adapters.py +++ b/inotify/adapters.py @@ -297,7 +297,7 @@ def event_gen(self, ignore_missing_new_folders=False, **kwargs): "being recursive): [%s]", full_path) - self._i.add_watch(full_path, self._mask) + self._load_tree(full_path) if header.mask & inotify.constants.IN_MOVED_FROM: _LOGGER.debug("A directory has been removed. We're " @@ -327,20 +327,7 @@ def event_gen(self, ignore_missing_new_folders=False, **kwargs): def inotify(self): return self._i - -class InotifyTree(_BaseTree): - """Recursively watch a path.""" - - def __init__(self, path, mask=inotify.constants.IN_ALL_EVENTS, - block_duration_s=_DEFAULT_EPOLL_BLOCK_DURATION_S): - super(InotifyTree, self).__init__(mask=mask, block_duration_s=block_duration_s) - - self.__root_path = path - - self.__load_tree(path) - - def __load_tree(self, path): - _LOGGER.debug("Adding initial watches on tree: [%s]", path) + def _load_tree(self, path): paths = [] @@ -362,6 +349,22 @@ def __load_tree(self, path): self._i.add_watch(path, self._mask) +class InotifyTree(_BaseTree): + """Recursively watch a path.""" + + def __init__(self, path, mask=inotify.constants.IN_ALL_EVENTS, + block_duration_s=_DEFAULT_EPOLL_BLOCK_DURATION_S): + super(InotifyTree, self).__init__(mask=mask, block_duration_s=block_duration_s) + + self.__root_path = path + + self.__load_tree(path) + + def __load_tree(self, path): + _LOGGER.debug("Adding initial watches on tree: [%s]", path) + return self._load_tree(path) + + class InotifyTrees(_BaseTree): """Recursively watch over a list of trees.""" @@ -373,23 +376,5 @@ def __init__(self, paths, mask=inotify.constants.IN_ALL_EVENTS, def __load_trees(self, paths): _LOGGER.debug("Adding initial watches on trees: [%s]", ",".join(map(str, paths))) - - found = [] - - q = paths - while q: - current_path = q[0] - del q[0] - - found.append(current_path) - - for filename in os.listdir(current_path): - entry_filepath = os.path.join(current_path, filename) - if os.path.isdir(entry_filepath) is False: - continue - - q.append(entry_filepath) - - - for path in found: - self._i.add_watch(path, self._mask) + for path in paths: + self._load_tree(path)