wg-backend-django/dell-env/lib/python3.11/site-packages/dash/_watch.py
2023-10-30 14:40:43 +07:00

37 lines
1.0 KiB
Python

import collections
import os
import re
import time
def watch(folders, on_change, pattern=None, sleep_time=0.1):
pattern = re.compile(pattern) if pattern else None
watched = collections.defaultdict(lambda: -1)
def walk():
walked = []
for folder in folders:
for current, _, files in os.walk(folder):
for f in files:
if pattern and not pattern.search(f):
continue
path = os.path.join(current, f)
info = os.stat(path)
new_time = info.st_mtime
if new_time > watched[path] > 0:
on_change(path, new_time, False)
watched[path] = new_time
walked.append(path)
# Look for deleted files
for w in [x for x in watched.keys() if x not in walked]:
del watched[w]
on_change(w, -1, True)
while True:
walk()
time.sleep(sleep_time)