diff options
Diffstat (limited to 'libmproxy/script/reloader.py')
-rw-r--r-- | libmproxy/script/reloader.py | 22 |
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 |