From 4eca238345e82f91d2e71f79f040413bd051dac2 Mon Sep 17 00:00:00 2001 From: Chris Angelico Date: Tue, 10 Oct 2023 05:38:20 +1100 Subject: [PATCH] Force FSEvents to use recursive mode to ensure that events are delivered --- src/watchdog/observers/fsevents.py | 6 ++++-- tests/test_fsevents.py | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/watchdog/observers/fsevents.py b/src/watchdog/observers/fsevents.py index 39831e6d..411624eb 100644 --- a/src/watchdog/observers/fsevents.py +++ b/src/watchdog/observers/fsevents.py @@ -337,9 +337,11 @@ class FSEventsObserver(BaseObserver): def __init__(self, timeout=DEFAULT_OBSERVER_TIMEOUT): super().__init__(emitter_class=FSEventsEmitter, timeout=timeout) - def schedule(self, event_handler, path, recursive=False): + def schedule(self, event_handler, path, recursive=True): # Fix for issue #26: Trace/BPT error when given a unicode path # string. https://github.com/gorakhargosh/watchdog/issues#issue/26 if isinstance(path, str): path = unicodedata.normalize("NFC", path) - return BaseObserver.schedule(self, event_handler, path, recursive) + if not recursive: + warnings.warn("FSEvents requires and assumes recursive=True") + return BaseObserver.schedule(self, event_handler, path, recursive=True) diff --git a/tests/test_fsevents.py b/tests/test_fsevents.py index 01e9fee2..a3b2c13e 100644 --- a/tests/test_fsevents.py +++ b/tests/test_fsevents.py @@ -327,3 +327,9 @@ def on_any_event(self, event): observer.unschedule(watch) observer.stop() observer.join(1) + +def test_watchdog_assumes_recursive(p: P) -> None: + """See https://github.com/gorakhargosh/watchdog/issues/918""" + observer = Observer() + w = observer.schedule(FileSystemEventHandler(), ".") + assert w.is_recursive, "FSEvents should assume recursive mode"