Yinotify help user to create the callback function triggered when the monitor event detected by the linux Kernel. User could register the directoried for the watching and bind with the Event with the specified action. Internal Class Yivent could help to collect the statistics and status based on the events registered. That polling one or more directories to determine if anything has changed is the linux kernel interface, which help us control more from application level
the project based on inotify, and removed some unused function and class
Install via pip:
$ sudo pip install Yinotify //linux OS is Mandatory
Simple Usage:
exp1: def printEvent(): print("Action triggered!!") yiSample = Yinotify.Yivent(_target_folder,"IN_ISDIR",printEvent) exp2: def printEvent(arg): print("Action triggered!!",arg) yiSample = Yinotify.Yivent(_target_folder,"IN_ISDIR",printEvent,action_args=("arg1",))
Pytest Example:
def printEvent(timeSlot,case): global result duration = time.time() - timeSlot print("%s:::Action1 triggered!!"%(duration)) result[case] = True return def printEvent2(case): global result print("Action2 triggered!!") result[case] = True return def printEvent3(): global result print("Action3 triggered!!") result["test_events_IN_MOVED"] = True return def test_events_IN_ISDIR(): result["test_events_IN_ISDIR"] = False test1 = Yinotify.Yivent(folder,"IN_ISDIR",printEvent2,action_args=("test_events_IN_ISDIR",)) cmd = "ls %s/" % (folder) print("test_events_IN_ISDIR::"+cmd) os.popen(cmd) n = 0 while n < 2: time.sleep(1) n += 1 del test1 assert result["test_events_IN_ISDIR"] == True print("--------------------------------------------------------") def test_events_IN_OPEN(): result["test_events_IN_OPEN"] = False timeSlot = time.time() test2 = Yinotify.Yivent(folder,"IN_OPEN",printEvent,action_args=(timeSlot,"test_events_IN_OPEN")) cmd = "touch %s/Yijun2" % (folder) print("test_events_IN_OPEN::"+cmd) os.popen(cmd) n = 0 while n < 2: time.sleep(1) n += 1 del test2 assert result["test_events_IN_OPEN"] == True print("--------------------------------------------------------") def test_events_IN_MOVED(): result["test_events_IN_MOVED"] = False test3 = Yinotify.Yivent(folder,"IN_MOVED_FROM,IN_MOVED_TO",printEvent3) cmd = "mv %s/Yijun2 %s/Yijun22" % (folder,folder) print("test_events_IN_MOVED::"+cmd) os.popen(cmd) n = 0 while n < 2: time.sleep(1) n += 1 del test3 assert result["test_events_IN_MOVED"] == True print("--------------------------------------------------------") def test_events_IN_CREATE(): result["test_events_IN_CREATE"] = False timeSlot = time.time() test4 = Yinotify.Yivent(folder,"IN_CREATE",printEvent,action_args=(timeSlot,"test_events_IN_CREATE")) os.mkdir(folder+'/Yijun3') print("test_events_IN_CREATE::os.mkdir(folder+'/Yijun3')") n = 0 while n < 2: time.sleep(1) n += 1 del test4 assert result["test_events_IN_CREATE"] == True print("--------------------------------------------------------") def test_events_IN_DELETE(): result["test_events_IN_DELETE"] = False timeSlot = time.time() test5 = Yinotify.Yivent(folder,"IN_DELETE",printEvent,action_args=(timeSlot,"test_events_IN_DELETE")) os.remove(folder+"/Yijun22") os.rmdir(folder+"/Yijun3") print("test_events_IN_DELETE::os.remove(folder+'/Yijun2')") n = 0 while n < 2: time.sleep(1) n += 1 del test5 assert result["test_events_IN_DELETE"] == True print("--------------------------------------------------------")