aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/script/reloader.py
diff options
context:
space:
mode:
Diffstat (limited to 'libmproxy/script/reloader.py')
-rw-r--r--libmproxy/script/reloader.py22
1 files changed, 18 insertions, 4 deletions
diff --git a/libmproxy/script/reloader.py b/libmproxy/script/reloader.py
index 26691fa3..ad6303a6 100644
--- a/libmproxy/script/reloader.py
+++ b/libmproxy/script/reloader.py
@@ -1,4 +1,5 @@
import os
+import fnmatch
from watchdog.events import PatternMatchingEventHandler
from watchdog.observers import Observer
@@ -24,17 +25,30 @@ def unwatch(script):
class _ScriptModificationHandler(PatternMatchingEventHandler):
- def __init__(self, callback):
+ def __init__(self, callback, pattern='*.py'):
# We could enumerate all relevant *.py files (as werkzeug does it),
# but our case looks like it isn't as simple as enumerating sys.modules.
# This should be good enough for now.
super(_ScriptModificationHandler, self).__init__(
ignore_directories=True,
- patterns=["*.py"]
)
self.callback = callback
+ self.pattern = pattern
def on_modified(self, event):
- self.callback()
+ super(_ScriptModificationHandler, self).on_modified(event)
+ if event.is_directory:
+ files_in_dir = [event.src_path + "/" + \
+ f for f in os.listdir(event.src_path)]
+ if len(files_in_dir) > 0:
+ modifiedFilename = max(files_in_dir, key=os.path.getmtime)
+ else:
+ return
+ else:
+ modifiedFilename = event.src_path
+
+ if fnmatch.fnmatch(os.path.basename(modifiedFilename), self.pattern):
+ self.callback()
+
+__all__ = ["watch", "unwatch"]
-__all__ = ["watch", "unwatch"] \ No newline at end of file