summaryrefslogtreecommitdiffstats
path: root/powerline/lib/watcher/stat.py
diff options
context:
space:
mode:
Diffstat (limited to 'powerline/lib/watcher/stat.py')
-rw-r--r--powerline/lib/watcher/stat.py44
1 files changed, 44 insertions, 0 deletions
diff --git a/powerline/lib/watcher/stat.py b/powerline/lib/watcher/stat.py
new file mode 100644
index 0000000..0c08971
--- /dev/null
+++ b/powerline/lib/watcher/stat.py
@@ -0,0 +1,44 @@
+# vim:fileencoding=utf-8:noet
+from __future__ import (unicode_literals, division, absolute_import, print_function)
+
+import os
+
+from threading import RLock
+
+from powerline.lib.path import realpath
+
+
+class StatFileWatcher(object):
+ def __init__(self):
+ self.watches = {}
+ self.lock = RLock()
+
+ def watch(self, path):
+ path = realpath(path)
+ with self.lock:
+ self.watches[path] = os.path.getmtime(path)
+
+ def unwatch(self, path):
+ path = realpath(path)
+ with self.lock:
+ self.watches.pop(path, None)
+
+ def is_watching(self, path):
+ with self.lock:
+ return realpath(path) in self.watches
+
+ def __call__(self, path):
+ path = realpath(path)
+ with self.lock:
+ if path not in self.watches:
+ self.watches[path] = os.path.getmtime(path)
+ return True
+ mtime = os.path.getmtime(path)
+ if mtime != self.watches[path]:
+ self.watches[path] = mtime
+ return True
+ return False
+
+ def close(self):
+ with self.lock:
+ self.watches.clear()