Sourcing python-remove-tests-dir-hook Sourcing python-catch-conflicts-hook.sh Sourcing python-remove-bin-bytecode-hook.sh Sourcing pypa-build-hook Using pypaBuildPhase Sourcing python-runtime-deps-check-hook Using pythonRuntimeDepsCheckHook Sourcing pypa-install-hook Using pypaInstallPhase Sourcing python-imports-check-hook.sh Using pythonImportsCheckPhase Sourcing python-metadata-check-hook.sh Using pythonMetadataCheckPhase Sourcing python-namespaces-hook Sourcing python-catch-conflicts-hook.sh Sourcing pytest-check-hook Using pytestCheckPhase Using versionCheckHook Running phase: unpackPhase unpacking source archive /nix/store/dy9mjy3mq1q7vn42y65fns1dxvncfy8j-source source root is source Executing cargoSetupPostUnpackHook Finished cargoSetupPostUnpackHook setting SOURCE_DATE_EPOCH to timestamp 315619200 of file "source/watchfiles/version.py" Running phase: patchPhase Executing cargoSetupPostPatchHook Validating consistency between /nix/var/nix/builds/nix-74276-2155901789/source/Cargo.lock and /nix/var/nix/builds/nix-74276-2155901789/watchfiles-1.2.0-vendor/Cargo.lock Finished cargoSetupPostPatchHook Running phase: updateAutotoolsGnuConfigScriptsPhase Running phase: configurePhase no configure script, doing nothing Running phase: buildPhase Executing maturinBuildHook maturinBuildHook flags: --jobs=10 --offline --target aarch64-apple-darwin --manylinux off --strip --out /nix/var/nix/builds/nix-74276-2155901789/source/dist --interpreter python3.14 --release 📦 Including license file `LICENSE` 🍹 Building a mixed python/rust project 🐍 Found CPython 3.14 at /nix/store/4l8r0s2r5fna7src82b5fc2hixdvfyw0-python3-3.14.7/bin/python3.14 🔗 Found pyo3 bindings 📡 Using build options bindings from pyproject.toml Compiling target-lexicon v0.13.5 Compiling python3-dll-a v0.2.14 Compiling libc v0.2.169 Compiling proc-macro2 v1.0.81 Compiling quote v1.0.45 Compiling unicode-ident v1.0.12 Compiling crossbeam-utils v0.8.19 Compiling heck v0.5.0 Compiling cfg-if v1.0.0 Compiling same-file v1.0.6 Compiling bitflags v2.7.0 Compiling walkdir v2.5.0 Compiling once_cell v1.21.3 Compiling notify-types v2.0.0 Compiling log v0.4.22 Compiling filetime v0.2.24 Compiling fsevent-sys v4.1.0 Compiling notify v8.0.0 Compiling syn v2.0.60 Compiling pyo3-build-config v0.28.3 Compiling crossbeam-channel v0.5.15 Compiling pyo3-macros-backend v0.28.3 Compiling pyo3-ffi v0.28.3 Compiling pyo3 v0.28.3 Compiling pyo3-macros v0.28.3 Compiling watchfiles_rust_notify v1.2.0 (/nix/var/nix/builds/nix-74276-2155901789/source) Finished `release` profile [optimized] target(s) in 8.15s 🔗 External shared libraries to be copied into the wheel: /nix/var/nix/builds/nix-74276-2155901789/source/target/maturin/lib_rust_notify.dylib requires: /nix/store/ls125wfdax9gk2ryq7fgzrncpi6x5v2s-libiconv-115.100.1/lib/libiconv.2.dylib => /nix/store/ls125wfdax9gk2ryq7fgzrncpi6x5v2s-libiconv-115.100.1/lib/libiconv.2.dylib /nix/store/ls125wfdax9gk2ryq7fgzrncpi6x5v2s-libiconv-115.100.1/lib/libcharset.1.dylib => /nix/store/ls125wfdax9gk2ryq7fgzrncpi6x5v2s-libiconv-115.100.1/lib/libcharset.1.dylib ⚠️ Warning: Your library requires copying the above external libraries. Re-run with `--auditwheel=repair` to copy them into the wheel. 📦 Built wheel for CPython 3.14 to /nix/var/nix/builds/nix-74276-2155901789/source/dist/watchfiles-1.2.0-cp314-cp314-macosx_14_0_arm64.whl Finished maturinBuildHook Running phase: pythonRuntimeDepsCheckHook Executing pythonRuntimeDepsCheck Checking runtime dependencies for watchfiles-1.2.0-cp314-cp314-macosx_14_0_arm64.whl Finished executing pythonRuntimeDepsCheck Running phase: installPhase Executing pypaInstallPhase Successfully installed watchfiles-1.2.0-cp314-cp314-macosx_14_0_arm64.whl Finished executing pypaInstallPhase Running phase: pythonOutputDistPhase Executing pythonOutputDistPhase Finished executing pythonOutputDistPhase Running phase: fixupPhase checking for references to /nix/var/nix/builds/nix-74276-2155901789/ in /nix/store/8l7w4cv8i7wa8m3zic718vf5s079frw4-python3.14-watchfiles-1.2.0... patching script interpreter paths in /nix/store/8l7w4cv8i7wa8m3zic718vf5s079frw4-python3.14-watchfiles-1.2.0 stripping (with command strip and flags -S) in /nix/store/8l7w4cv8i7wa8m3zic718vf5s079frw4-python3.14-watchfiles-1.2.0/lib /nix/store/8l7w4cv8i7wa8m3zic718vf5s079frw4-python3.14-watchfiles-1.2.0/bin checking for references to /nix/var/nix/builds/nix-74276-2155901789/ in /nix/store/wzr34rqzb6f8vw7m6f59ywabz1k2km44-python3.14-watchfiles-1.2.0-dist... patching script interpreter paths in /nix/store/wzr34rqzb6f8vw7m6f59ywabz1k2km44-python3.14-watchfiles-1.2.0-dist Rewriting #!/nix/store/4l8r0s2r5fna7src82b5fc2hixdvfyw0-python3-3.14.7/bin/python3.14 to #!/nix/store/4l8r0s2r5fna7src82b5fc2hixdvfyw0-python3-3.14.7 wrapping `/nix/store/8l7w4cv8i7wa8m3zic718vf5s079frw4-python3.14-watchfiles-1.2.0/bin/watchfiles'... Executing pythonRemoveTestsDir Finished executing pythonRemoveTestsDir Running phase: installCheckPhase Executing versionCheckPhase Successfully managed to find version 1.2.0 in the output of the command /nix/store/8l7w4cv8i7wa8m3zic718vf5s079frw4-python3.14-watchfiles-1.2.0/bin/watchfiles --version watchfiles v1.2.0 Finished versionCheckPhase no Makefile or custom installCheckPhase, doing nothing Running phase: pythonCatchConflictsPhase Running phase: pythonRemoveBinBytecodePhase Running phase: pythonImportsCheckPhase Executing pythonImportsCheckPhase Check whether the following modules can be imported: watchfiles Running phase: pythonMetadataCheckPhase Executing pythonMetadataCheckPhase Running phase: pytestCheckPhase Executing pytestCheckPhase pytest flags: -m pytest -k not\ \(test_awatch_interrupt_raise\) -Wignore::pytest.PytestRemovedIn10Warning ============================= test session starts ============================== platform darwin -- Python 3.14.7, pytest-9.1.1, pluggy-1.6.0 rootdir: /nix/var/nix/builds/nix-74276-2155901789/source configfile: pyproject.toml testpaths: tests plugins: mock-3.15.1, timeout-2.4.0, anyio-4.14.2 timeout: 10.0s timeout method: signal timeout func_only: False collected 155 items / 1 deselected / 154 selected tests/test_cli.py ....................... [ 14%] tests/test_docs.py .........s [ 21%] tests/test_filters.py .................. [ 33%] tests/test_force_polling.py ........................... [ 50%] tests/test_run_process.py ..s..................... [ 66%] tests/test_rust_notify.py FF.FFFFFFFF.s.FF..sssss...s......... [ 89%] tests/test_watch.py =================================== FAILURES =================================== ___________________________________ test_add ___________________________________ test_dir = PosixPath('/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files') def test_add(test_dir: Path): watcher = RustNotify([str(test_dir)], True, False, 0, True, False) (test_dir / 'new_file.txt').write_text('foobar') > assert watcher.watch(200, 50, 500, None) == {(1, str(test_dir / 'new_file.txt'))} E assert 'timeout' == {(1, '/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files/new_file.txt')} E + where 'timeout' = (200, 50, 500, None) E + where = RustNotify(Recommended(\n FsEventWatcher {\n paths: 0x00000001060c6d60,\n since_when: 184467440737095516...sive_info: {\n "/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files": true,\n },\n },\n)).watch tests/test_rust_notify.py:23: AssertionError ----------------------------- Captured stderr call ----------------------------- watcher: FsEventWatcher { paths: 0x1060c6d60, since_when: 18446744073709551615, latency: 0.0, flags: 18, event_handler: Pointer { addr: 0x7b9008ed0, metadata: DynMetadata(0x10c444a18) }, runloop: Some((0x7b867b000, JoinHandle { .. })), recursive_info: {"/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files": true} } ____________________________ test_add_non_recursive ____________________________ test_dir = PosixPath('/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files') def test_add_non_recursive(test_dir: Path): watcher = RustNotify([str(test_dir)], True, False, 0, False, False) (test_dir / 'new_file_non_recursive.txt').write_text('foobar') (test_dir / 'dir_a' / 'new_file_non_recursive.txt').write_text('foobar') > assert watcher.watch(200, 50, 500, None) == {(1, str(test_dir / 'new_file_non_recursive.txt'))} E assert 'timeout' == {(1, '/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files/new_file_non_recursive.txt')} E + where 'timeout' = (200, 50, 500, None) E + where = RustNotify(Recommended(\n FsEventWatcher {\n paths: 0x00000001060c6fd0,\n since_when: 184467440737095516...ive_info: {\n "/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files": false,\n },\n },\n)).watch tests/test_rust_notify.py:32: AssertionError ----------------------------- Captured stderr call ----------------------------- watcher: FsEventWatcher { paths: 0x1060c6fd0, since_when: 18446744073709551615, latency: 0.0, flags: 18, event_handler: Pointer { addr: 0x7b9008f10, metadata: DynMetadata(0x10c444a18) }, runloop: Some((0x7b8694000, JoinHandle { .. })), recursive_info: {"/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files": false} } ______________________________ test_modify_write _______________________________ test_dir = PosixPath('/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files') def test_modify_write(test_dir: Path): watcher = RustNotify([str(test_dir)], True, False, 0, True, False) (test_dir / 'a.txt').write_text('this is new') > assert watcher.watch(200, 50, 500, None) == {(2, str(test_dir / 'a.txt'))} E assert 'timeout' == {(2, '/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files/a.txt')} E + where 'timeout' = (200, 50, 500, None) E + where = RustNotify(Recommended(\n FsEventWatcher {\n paths: 0x00000001060dd1a0,\n since_when: 184467440737095516...sive_info: {\n "/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files": true,\n },\n },\n)).watch tests/test_rust_notify.py:51: AssertionError ----------------------------- Captured stderr call ----------------------------- watcher: FsEventWatcher { paths: 0x1060dd1a0, since_when: 18446744073709551615, latency: 0.0, flags: 18, event_handler: Pointer { addr: 0x7b9008fd0, metadata: DynMetadata(0x10c444a18) }, runloop: Some((0x7b8694c00, JoinHandle { .. })), recursive_info: {"/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files": true} } _______________________ test_modify_write_non_recursive ________________________ test_dir = PosixPath('/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files') @skip_windows def test_modify_write_non_recursive(test_dir: Path): watcher = RustNotify([str(test_dir)], True, False, 0, False, False) (test_dir / 'a_non_recursive.txt').write_text('this is new') (test_dir / 'dir_a' / 'a_non_recursive.txt').write_text('this is new') > assert watcher.watch(200, 50, 500, None) == { (2, str(test_dir / 'a_non_recursive.txt')), } E assert 'timeout' == {(2, '/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files/a_non_recursive.txt')} E + where 'timeout' = (200, 50, 500, None) E + where = RustNotify(Recommended(\n FsEventWatcher {\n paths: 0x00000001060cdb50,\n since_when: 184467440737095516...ive_info: {\n "/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files": false,\n },\n },\n)).watch tests/test_rust_notify.py:61: AssertionError ----------------------------- Captured stderr call ----------------------------- watcher: FsEventWatcher { paths: 0x1060cdb50, since_when: 18446744073709551615, latency: 0.0, flags: 18, event_handler: Pointer { addr: 0x7b9009090, metadata: DynMetadata(0x10c444a18) }, runloop: Some((0x7b8695800, JoinHandle { .. })), recursive_info: {"/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files": false} } ______________________________ test_modify_chmod _______________________________ test_dir = PosixPath('/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files') @skip_windows def test_modify_chmod(test_dir: Path): watcher = RustNotify([str(test_dir)], True, False, 0, True, False) (test_dir / 'b.txt').chmod(0o444) > assert watcher.watch(200, 50, 500, None) == {(2, str(test_dir / 'b.txt'))} E assert 'timeout' == {(2, '/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files/b.txt')} E + where 'timeout' = (200, 50, 500, None) E + where = RustNotify(Recommended(\n FsEventWatcher {\n paths: 0x00000001060d5860,\n since_when: 184467440737095516...sive_info: {\n "/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files": true,\n },\n },\n)).watch tests/test_rust_notify.py:72: AssertionError ----------------------------- Captured stderr call ----------------------------- watcher: FsEventWatcher { paths: 0x1060d5860, since_when: 18446744073709551615, latency: 0.0, flags: 18, event_handler: Pointer { addr: 0x7b9009150, metadata: DynMetadata(0x10c444a18) }, runloop: Some((0x7b8696400, JoinHandle { .. })), recursive_info: {"/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files": true} } _________________________________ test_delete __________________________________ test_dir = PosixPath('/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files') def test_delete(test_dir: Path): watcher = RustNotify([str(test_dir)], False, False, 0, True, False) (test_dir / 'c.txt').unlink() > assert watcher.watch(200, 50, 500, None) == { (3, str(test_dir / 'c.txt')), } E assert 'timeout' == {(3, '/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files/c.txt')} E + where 'timeout' = (200, 50, 500, None) E + where = RustNotify(Recommended(\n FsEventWatcher {\n paths: 0x00000007b9bd4000,\n since_when: 184467440737095516...sive_info: {\n "/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files": true,\n },\n },\n)).watch tests/test_rust_notify.py:80: AssertionError __________________________ test_delete_non_recursive ___________________________ test_dir = PosixPath('/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files') def test_delete_non_recursive(test_dir: Path): watcher = RustNotify([str(test_dir)], False, False, 0, False, False) (test_dir / 'c_non_recursive.txt').unlink() (test_dir / 'dir_a' / 'c_non_recursive.txt').unlink() > assert watcher.watch(200, 50, 500, None) == { (3, str(test_dir / 'c_non_recursive.txt')), } E assert 'timeout' == {(3, '/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files/c_non_recursive.txt')} E + where 'timeout' = (200, 50, 500, None) E + where = RustNotify(Recommended(\n FsEventWatcher {\n paths: 0x00000007b9bd4030,\n since_when: 184467440737095516...ive_info: {\n "/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files": false,\n },\n },\n)).watch tests/test_rust_notify.py:91: AssertionError _________________________________ test_move_in _________________________________ test_dir = PosixPath('/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files') def test_move_in(test_dir: Path): # can't use tmp_path as it causes problems on Windows (different drive), and macOS (delayed events) src = test_dir / 'dir_a' assert src.is_dir() dst = test_dir / 'dir_b' assert dst.is_dir() move_files = 'a.txt', 'b.txt' watcher = RustNotify([str(dst)], False, False, 0, True, False) for f in move_files: (src / f).rename(dst / f) > assert watcher.watch(200, 50, 500, None) == { (1, str(dst / 'a.txt')), (1, str(dst / 'b.txt')), } E assert 'timeout' == {(1, '/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files/dir_b/a.txt'), (1, '/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files/dir_b/b.txt')} E + where 'timeout' = (200, 50, 500, None) E + where = RustNotify(Recommended(\n FsEventWatcher {\n paths: 0x00000007b9bd4060,\n since_when: 184467440737095516...nfo: {\n "/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files/dir_b": true,\n },\n },\n)).watch tests/test_rust_notify.py:109: AssertionError ________________________________ test_move_out _________________________________ test_dir = PosixPath('/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files') def test_move_out(test_dir: Path): # can't use tmp_path as it causes problems on Windows (different drive), and macOS (delayed events) src = test_dir / 'dir_a' dst = test_dir / 'dir_b' move_files = 'c.txt', 'd.txt' watcher = RustNotify([str(src)], False, False, 0, True, False) for f in move_files: (src / f).rename(dst / f) > assert watcher.watch(200, 50, 500, None) == { (3, str(src / 'c.txt')), (3, str(src / 'd.txt')), } E assert 'timeout' == {(3, '/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files/dir_a/c.txt'), (3, '/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files/dir_a/d.txt')} E + where 'timeout' = (200, 50, 500, None) E + where = RustNotify(Recommended(\n FsEventWatcher {\n paths: 0x00000007b9bd4090,\n since_when: 184467440737095516...nfo: {\n "/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files/dir_a": true,\n },\n },\n)).watch tests/test_rust_notify.py:126: AssertionError ______________________________ test_move_internal ______________________________ test_dir = PosixPath('/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files') def test_move_internal(test_dir: Path): # can't use tmp_path as it causes problems on Windows (different drive), and macOS (delayed events) src = test_dir / 'dir_a' dst = test_dir / 'dir_b' move_files = 'e.txt', 'f.txt' watcher = RustNotify([str(test_dir)], False, False, 0, True, False) for f in move_files: (src / f).rename(dst / f) expected_changes = { (3, str(src / 'e.txt')), (3, str(src / 'f.txt')), (1, str(dst / 'e.txt')), (1, str(dst / 'f.txt')), } if sys.platform == 'win32': # Windows adds a "modified" event for the dst directory expected_changes.add((2, str(dst))) > assert watcher.watch(200, 50, 500, None) == expected_changes E assert 'timeout' == {(1, '/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files/dir_b/e.txt'), (1, '/nix/var/nix/builds/nix-742...ce/tests/test_files/dir_a/e.txt'), (3, '/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files/dir_a/f.txt')} E + where 'timeout' = (200, 50, 500, None) E + where = RustNotify(Recommended(\n FsEventWatcher {\n paths: 0x00000007b9bd40c0,\n since_when: 184467440737095516...sive_info: {\n "/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files": true,\n },\n },\n)).watch tests/test_rust_notify.py:153: AssertionError _________________________________ test_rename __________________________________ test_dir = PosixPath('/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files') def test_rename(test_dir: Path): watcher = RustNotify([str(test_dir)], False, False, 0, True, False) f = test_dir / 'a.txt' f.rename(f.with_suffix('.new')) > assert watcher.watch(200, 50, 500, None) == { (3, str(f)), (1, str(test_dir / 'a.new')), } E assert 'timeout' == {(1, '/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files/a.new'), (3, '/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files/a.txt')} E + where 'timeout' = (200, 50, 500, None) E + where = RustNotify(Recommended(\n FsEventWatcher {\n paths: 0x00000007b9bd40f0,\n since_when: 184467440737095516...sive_info: {\n "/nix/var/nix/builds/nix-74276-2155901789/source/tests/test_files": true,\n },\n },\n)).watch tests/test_rust_notify.py:181: AssertionError _____________________________ test_watch_multiple ______________________________ tmp_path = PosixPath('/nix/var/nix/builds/nix-74276-2155901789/pytest-of-_nixbld12/pytest-0/test_watch_multiple0') def test_watch_multiple(tmp_path: Path): foo = tmp_path / 'foo' foo.mkdir() bar = tmp_path / 'bar' bar.mkdir() watcher = RustNotify([str(foo), str(bar)], False, False, 0, True, False) (tmp_path / 'not_included.txt').write_text('foobar') (foo / 'foo.txt').write_text('foobar') (bar / 'foo.txt').write_text('foobar') changes = watcher.watch(200, 50, 500, None) # can compare directly since on macos creating the foo and bar directories is included in changes > assert (1, str(foo / 'foo.txt')) in changes ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E TypeError: 'in ' requires string as left operand, not tuple tests/test_rust_notify.py:200: TypeError =========================== short test summary info ============================ FAILED tests/test_rust_notify.py::test_add - assert 'timeout' == {(1, '/nix/var/nix/builds/nix-74276-2155901789/source/t... FAILED tests/test_rust_notify.py::test_add_non_recursive - assert 'timeout' == {(1, '/nix/var/nix/builds/nix-74276-2155901789/source/t... FAILED tests/test_rust_notify.py::test_modify_write - assert 'timeout' == {(2, '/nix/var/nix/builds/nix-74276-2155901789/source/t... FAILED tests/test_rust_notify.py::test_modify_write_non_recursive - assert 'timeout' == {(2, '/nix/var/nix/builds/nix-74276-2155901789/source/t... FAILED tests/test_rust_notify.py::test_modify_chmod - assert 'timeout' == {(2, '/nix/var/nix/builds/nix-74276-2155901789/source/t... FAILED tests/test_rust_notify.py::test_delete - assert 'timeout' == {(3, '/nix/var/nix/builds/nix-74276-2155901789/source/t... FAILED tests/test_rust_notify.py::test_delete_non_recursive - assert 'timeout' == {(3, '/nix/var/nix/builds/nix-74276-2155901789/source/t... FAILED tests/test_rust_notify.py::test_move_in - assert 'timeout' == {(1, '/nix/var/nix/builds/nix-74276-2155901789/source/t... FAILED tests/test_rust_notify.py::test_move_out - assert 'timeout' == {(3, '/nix/var/nix/builds/nix-74276-2155901789/source/t... FAILED tests/test_rust_notify.py::test_move_internal - assert 'timeout' == {(1, '/nix/var/nix/builds/nix-74276-2155901789/source/t... FAILED tests/test_rust_notify.py::test_rename - assert 'timeout' == {(1, '/nix/var/nix/builds/nix-74276-2155901789/source/t... FAILED tests/test_rust_notify.py::test_watch_multiple - TypeError: 'in ' requires string as left operand, not tuple !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! KeyboardInterrupt !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! /nix/store/8l7w4cv8i7wa8m3zic718vf5s079frw4-python3.14-watchfiles-1.2.0/lib/python3.14/site-packages/watchfiles/main.py:139: KeyboardInterrupt (to show a full traceback on KeyboardInterrupt use --full-trace) =========== 12 failed, 117 passed, 9 skipped, 1 deselected in 19.61s ===========