def test_passing_bytes_should_give_bytes(p): path = p('').encode() event_queue = Queue() emitter = Emitter(event_queue, ObservedWatch(path, recursive=True)) emitter.start() touch(p('a')) event = event_queue.get(timeout=5)[0] assert isinstance(event.src_path, bytes)
def test_delete_watched_directory(p): mkdir(p('dir')) inotify = InotifyBuffer(p('dir').encode()) rm(p('dir'), recursive=True) # Wait for the event to be picked up inotify.read_event() # Ensure InotifyBuffer shuts down cleanly without raising an exception inotify.close()
def test_modify(p): touch(p('a')) event_queue, emitter = _setup_emitter(p('')) touch(p('a')) event = event_queue.get(timeout=5)[0] assert event.src_path == p('a') assert isinstance(event, FileModifiedEvent) emitter.stop()
def test_modify(p): touch(p('a')) event_queue, emitter = _setup_emitter(p('')) touch(p('a')) event = event_queue.get(timeout=5)[0] assert event.src_path == p('a').encode() assert isinstance(event, FileModifiedEvent) emitter.stop()
def test_passing_bytes_should_give_bytes(p): from watchdog.utils.unicode_paths import bytes_cls path = bytes_cls(p(''), 'ascii') assert isinstance(p(''), bytes_cls) event_queue = Queue() emitter = Emitter(event_queue, ObservedWatch(path, recursive=True)) emitter.start() touch(p('a')) event = event_queue.get(timeout=5)[0] assert isinstance(event.src_path, bytes_cls)
def test_dir_modify_on_move(p): mkdir(p('dir1')) mkdir(p('dir2')) touch(p('dir1', 'a')) ref = DirectorySnapshot(p('')) wait() mv(p('dir1', 'a'), p('dir2', 'b')) diff = DirectorySnapshotDiff(ref, DirectorySnapshot(p(''))) assert set(diff.dirs_modified) == set([p('dir1'), p('dir2')])
def test_detect_modify_for_moved_files(p): touch(p('a')) ref = DirectorySnapshot(p('')) wait() touch(p('a')) mv(p('a'), p('b')) diff = DirectorySnapshotDiff(ref, DirectorySnapshot(p(''))) assert diff.files_moved == [(p('a'), p('b'))] assert diff.files_modified == [p('a')]
def test_create(p): event_queue, emitter = _setup_emitter(p('')) open(p('a'), 'a').close() event = event_queue.get(timeout=5)[0] assert event.src_path == p('a') assert isinstance(event, FileCreatedEvent) event = event_queue.get(timeout=5)[0] assert os.path.normpath(event.src_path) == os.path.normpath(p('')) assert isinstance(event, DirModifiedEvent) emitter.stop()
def test_create(p): event_queue, emitter = _setup_emitter(p('')) open(p('a'), 'a').close() event = event_queue.get(timeout=5)[0] assert event.src_path == p('a').encode() assert isinstance(event, FileCreatedEvent) event = event_queue.get(timeout=5)[0] assert os.path.normpath(event.src_path) == os.path.normpath(p('').encode()) assert isinstance(event, DirModifiedEvent) emitter.stop()
def test_move_internal(p): mkdir(p('dir1')) mkdir(p('dir2')) touch(p('dir1', 'a')) ref = DirectorySnapshot(p('')) mv(p('dir1', 'a'), p('dir2', 'b')) diff = DirectorySnapshotDiff(ref, DirectorySnapshot(p(''))) assert diff.files_moved == [(p('dir1', 'a'), p('dir2', 'b'))] assert diff.files_created == [] assert diff.files_deleted == []
def test_delete(p): touch(p('a')) event_queue, emitter = _setup_emitter(p('')) rm(p('a')) event = event_queue.get(timeout=5)[0] assert event.src_path == p('a').encode() assert isinstance(event, FileDeletedEvent) event = event_queue.get(timeout=5)[0] assert os.path.normpath(event.src_path) == os.path.normpath(p('').encode()) assert isinstance(event, DirModifiedEvent) emitter.stop()
def test_delete(p): touch(p('a')) event_queue, emitter = _setup_emitter(p('')) rm(p('a')) event = event_queue.get(timeout=5)[0] assert event.src_path == p('a') assert isinstance(event, FileDeletedEvent) event = event_queue.get(timeout=5)[0] assert os.path.normpath(event.src_path) == os.path.normpath(p('')) assert isinstance(event, DirModifiedEvent) emitter.stop()
def test_move_from(p): mkdir(p('dir1')) mkdir(p('dir2')) touch(p('dir1', 'a')) ref = DirectorySnapshot(p('dir1')) mv(p('dir1', 'a'), p('dir2', 'b')) diff = DirectorySnapshotDiff(ref, DirectorySnapshot(p('dir1'))) assert diff.files_deleted == [p('dir1', 'a')]
def test_move_internal(p): mkdir(p('dir1')) mkdir(p('dir2')) touch(p('dir1', 'a')) inotify = InotifyBuffer(p('').encode(), recursive=True) mv(p('dir1', 'a'), p('dir2', 'b')) frm, to = wait_for_move_event(inotify.read_event) assert frm.src_path == p('dir1', 'a').encode() assert to.src_path == p('dir2', 'b').encode() inotify.close()
def test_move_internal(p): mkdir(p('dir1')) mkdir(p('dir2')) touch(p('dir1', 'a')) inotify = InotifyBuffered(p(''), recursive=True) mv(p('dir1', 'a'), p('dir2', 'b')) frm, to = wait_for_move_event(inotify.read_event) assert frm.src_path.decode() == p('dir1', 'a') assert to.src_path.decode() == p('dir2', 'b') inotify.close()
def test_move(p): mkdir(p('dir1')) mkdir(p('dir2')) touch(p('dir1', 'a')) event_queue, emitter = _setup_emitter(p('')) mv(p('dir1', 'a'), p('dir2', 'b')) event = event_queue.get(timeout=5)[0] assert event.src_path == p('dir1', 'a').encode() assert event.dest_path == p('dir2', 'b').encode() assert isinstance(event, FileMovedEvent) event = event_queue.get(timeout=5)[0] assert event.src_path == p('dir1').encode() assert isinstance(event, DirModifiedEvent) event = event_queue.get(timeout=5)[0] assert event.src_path == p('dir2').encode() assert isinstance(event, DirModifiedEvent) emitter.stop()
def test_move(p): mkdir(p('dir1')) mkdir(p('dir2')) touch(p('dir1', 'a')) event_queue, emitter = _setup_emitter(p('')) mv(p('dir1', 'a'), p('dir2', 'b')) event = event_queue.get(timeout=5)[0] assert event.src_path == p('dir1', 'a') assert event.dest_path == p('dir2', 'b') assert isinstance(event, FileMovedEvent) event = event_queue.get(timeout=5)[0] assert event.src_path == p('dir1') assert isinstance(event, DirModifiedEvent) event = event_queue.get(timeout=5)[0] assert event.src_path == p('dir2') assert isinstance(event, DirModifiedEvent) emitter.stop()
def test_move_to(p): mkdir(p('dir1')) mkdir(p('dir2')) touch(p('dir1', 'a')) inotify = InotifyBuffer(p('dir2').encode()) mv(p('dir1', 'a'), p('dir2', 'b')) event = wait_for_move_event(inotify.read_event) assert event.is_moved_to assert event.src_path == p('dir2', 'b').encode() inotify.close()
def test_move_to(p): mkdir(p('dir1')) mkdir(p('dir2')) touch(p('dir1', 'a')) inotify = InotifyBuffered(p('dir2')) mv(p('dir1', 'a'), p('dir2', 'b')) event = wait_for_move_event(inotify.read_event) assert event.is_moved_to assert event.src_path == p('dir2', 'b').encode() inotify.close()
def test_move_from(p): mkdir(p('dir1')) mkdir(p('dir2')) touch(p('dir1', 'a')) event_queue, emitter = _setup_emitter(p('dir1')) mv(p('dir1', 'a'), p('dir2', 'b')) event = event_queue.get(timeout=5)[0] assert isinstance(event, FileDeletedEvent) assert event.src_path == p('dir1', 'a') emitter.stop()
def test_separate_consecutive_moves(p): mkdir(p('dir1')) touch(p('dir1', 'a')) touch(p('b')) event_queue, emitter = _setup_emitter(p('dir1')) mv(p('dir1', 'a'), p('c')) mv(p('b'), p('dir1', 'd')) event = event_queue.get(timeout=5)[0] assert isinstance(event, FileDeletedEvent) assert event.src_path == p('dir1', 'a') assert isinstance(event_queue.get(timeout=5)[0], DirModifiedEvent) event = event_queue.get(timeout=5)[0] assert isinstance(event, FileCreatedEvent) assert event.src_path == p('dir1', 'd') assert isinstance(event_queue.get(timeout=5)[0], DirModifiedEvent) emitter.stop()
def test_separate_consecutive_moves(p): mkdir(p('dir1')) touch(p('dir1', 'a')) touch(p('b')) event_queue, emitter = _setup_emitter(p('dir1')) mv(p('dir1', 'a'), p('c')) mv(p('b'), p('dir1', 'd')) event = event_queue.get(timeout=5)[0] assert isinstance(event, FileDeletedEvent) assert event.src_path == p('dir1', 'a').encode() assert isinstance(event_queue.get(timeout=5)[0], DirModifiedEvent) event = event_queue.get(timeout=5)[0] assert isinstance(event, FileCreatedEvent) assert event.src_path == p('dir1', 'd').encode() assert isinstance(event_queue.get(timeout=5)[0], DirModifiedEvent) emitter.stop()
def test_move_internal_batch(p): n = 100 mkdir(p('dir1')) mkdir(p('dir2')) files = ['%d' % i for i in range(n)] for f in files: touch(p('dir1', f)) inotify = InotifyBuffered(p(''), recursive=True) random.shuffle(files) for f in files: mv(p('dir1', f), p('dir2', f)) # Check that all n events are paired i = 0 while i < n: frm, to = wait_for_move_event(inotify.read_event) assert os.path.dirname(frm.src_path).endswith(b'/dir1') assert os.path.dirname(to.src_path).endswith(b'/dir2') assert frm.name == to.name i += 1 inotify.close()
def test_move_internal_batch(p): n = 100 mkdir(p('dir1')) mkdir(p('dir2')) files = ['%d' % i for i in range(n)] for f in files: touch(p('dir1', f)) inotify = InotifyBuffer(p('').encode(), recursive=True) random.shuffle(files) for f in files: mv(p('dir1', f), p('dir2', f)) # Check that all n events are paired i = 0 while i < n: frm, to = wait_for_move_event(inotify.read_event) assert os.path.dirname(frm.src_path).endswith(b'/dir1') assert os.path.dirname(to.src_path).endswith(b'/dir2') assert frm.name == to.name i += 1 inotify.close()
def test_delete_self(p): mkdir(p('dir1')) event_queue, emitter = _setup_emitter(p('dir1')) rm(p('dir1'), True) event_queue.get(timeout=5)[0] emitter.stop()
def test_close_should_terminate_thread(p): inotify = InotifyBuffer(p('').encode(), recursive=True) assert inotify.is_alive() inotify.close() assert not inotify.is_alive()
def test_dir_modify_on_create(p): ref = DirectorySnapshot(p('')) wait() touch(p('a')) diff = DirectorySnapshotDiff(ref, DirectorySnapshot(p(''))) assert diff.dirs_modified == [p('')]