1{
2 lib,
3 stdenv,
4 buildPythonPackage,
5 CoreServices,
6 eventlet,
7 fetchpatch,
8 fetchPypi,
9 flaky,
10 pytest-timeout,
11 pytestCheckHook,
12 pythonOlder,
13 pyyaml,
14}:
15
16buildPythonPackage rec {
17 pname = "watchdog";
18 version = "4.0.0";
19 format = "setuptools";
20
21 disabled = pythonOlder "3.7";
22
23 src = fetchPypi {
24 inherit pname version;
25 hash = "sha256-4+cGXL2r5hg6uCGZ16T2s7oKQ4xaUSpoVZhGzLdqeOw=";
26 };
27
28 # force kqueue on x86_64-darwin, because our api version does
29 # not support fsevents
30 patches = lib.optionals (stdenv.isDarwin && !stdenv.isAarch64) [ ./force-kqueue.patch ];
31
32 buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
33
34 passthru.optional-dependencies.watchmedo = [ pyyaml ];
35
36 nativeCheckInputs = [
37 eventlet
38 flaky
39 pytest-timeout
40 pytestCheckHook
41 ] ++ passthru.optional-dependencies.watchmedo;
42
43 postPatch = ''
44 substituteInPlace setup.cfg \
45 --replace "--cov=watchdog" "" \
46 --replace "--cov-report=term-missing" ""
47 '';
48
49 pytestFlagsArray =
50 [
51 "--deselect=tests/test_emitter.py::test_create_wrong_encoding"
52 "--deselect=tests/test_emitter.py::test_close"
53 ]
54 ++ lib.optionals (stdenv.isDarwin) [
55 # fails to stop process in teardown
56 "--deselect=tests/test_0_watchmedo.py::test_auto_restart_subprocess_termination"
57 # assert cap.out.splitlines(keepends=False).count('+++++ 0') == 2 != 3
58 "--deselect=tests/test_0_watchmedo.py::test_auto_restart_on_file_change_debounce"
59 ]
60 ++ lib.optionals (stdenv.isDarwin && stdenv.isx86_64) [
61 # FileCreationEvent != FileDeletionEvent
62 "--deselect=tests/test_emitter.py::test_separate_consecutive_moves"
63 "--deselect=tests/test_observers_polling.py::test___init__"
64 # segfaults
65 "--deselect=tests/test_delayed_queue.py::test_delayed_get"
66 "--deselect=tests/test_emitter.py::test_delete"
67 # AttributeError: '_thread.RLock' object has no attribute 'key'"
68 "--deselect=tests/test_skip_repeats_queue.py::test_eventlet_monkey_patching"
69 ]
70 ++ lib.optionals (stdenv.isDarwin && stdenv.isAarch64) [
71 # segfaults
72 "--deselect=tests/test_delayed_queue.py::test_delayed_get"
73 "--deselect=tests/test_0_watchmedo.py::test_tricks_from_file"
74 "--deselect=tests/test_fsevents.py::test_watcher_deletion_while_receiving_events_1"
75 "--deselect=tests/test_fsevents.py::test_watcher_deletion_while_receiving_events_2"
76 "--deselect=tests/test_skip_repeats_queue.py::test_eventlet_monkey_patching"
77 "--deselect=tests/test_fsevents.py::test_recursive_check_accepts_relative_paths"
78 # fsevents:fsevents.py:318 Unhandled exception in FSEventsEmitter
79 "--deselect=tests/test_fsevents.py::test_watchdog_recursive"
80 # SystemError: Cannot start fsevents stream. Use a kqueue or polling observer...
81 "--deselect=tests/test_fsevents.py::test_add_watch_twice"
82 # fsevents:fsevents.py:318 Unhandled exception in FSEventsEmitter
83 "--deselect=ests/test_fsevents.py::test_recursive_check_accepts_relative_paths"
84 # gets stuck
85 "--deselect=tests/test_fsevents.py::test_converting_cfstring_to_pyunicode"
86 ];
87
88 disabledTestPaths =
89 [
90 # tests timeout easily
91 "tests/test_inotify_buffer.py"
92 ]
93 ++ lib.optionals (stdenv.isDarwin) [
94 # segfaults the testsuite
95 "tests/test_emitter.py"
96 # unsupported on x86_64-darwin
97 "tests/test_fsevents.py"
98 ];
99
100 pythonImportsCheck = [ "watchdog" ];
101
102 meta = with lib; {
103 description = "Python API and shell utilities to monitor file system events";
104 mainProgram = "watchmedo";
105 homepage = "https://github.com/gorakhargosh/watchdog";
106 changelog = "https://github.com/gorakhargosh/watchdog/blob/v${version}/changelog.rst";
107 license = licenses.asl20;
108 maintainers = with maintainers; [ goibhniu ];
109 };
110}