diff web/watch.py @ 189:101c66da848d

watcher script
author Matt Johnston <matt@ucc.asn.au>
date Sun, 09 Feb 2014 11:41:13 +0800
parents
children 8318d50d766d
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/watch.py	Sun Feb 09 11:41:13 2014 +0800
@@ -0,0 +1,62 @@
+#!/usr/bin/env python3.3
+
+import pyinotify
+import glob
+import sys
+import fnmatch
+import os
+
+def GlobWatcher(object):
+	def __init__(self, g, watcher):
+		self.glob = g
+		self.watches = []
+		self.watcher = watcher
+
+def add_glob(watcher, g):
+	d = os.path.dirname(g)
+
+	file_watches = add_glob_files
+
+def main():
+	touchf = sys.argv[1]
+
+	watcher = pyinotify.WatchManager()
+	dirpatterns = {}
+	for g in sys.argv[2:]:
+		d = os.path.dirname(g)
+		pattern = os.path.basename(g)
+		dirpatterns.setdefault(d, []).append(pattern)
+
+	print(dirpatterns)
+
+	watchpatterns = {}
+	for d, patterns in dirpatterns.items():
+
+		w = watcher.add_watch(d,
+			(pyinotify.IN_MODIFY
+			|pyinotify.IN_CREATE
+			|pyinotify.IN_DELETE
+			|pyinotify.IN_MOVED_FROM
+			|pyinotify.IN_MOVED_TO))
+
+		wd = w[d]
+		watchpatterns[wd] = patterns
+
+	def triggered(event):
+		if event.name is None:
+			return
+
+		print("%s %s " % (event.name, event.maskname))
+		patterns = watchpatterns[event.wd]
+		for p in patterns:
+			print(p)
+			if fnmatch.fnmatch(event.name, p):
+				print("matched %s" % p)
+				os.utime(touchf, None)
+
+	n = pyinotify.Notifier(watcher, triggered)
+	n.loop()
+
+if __name__ == '__main__':
+	main()
+