From e72663be081b8ef534b4ef43b90807c55d15b8fb Mon Sep 17 00:00:00 2001 From: MatthewShao Date: Tue, 12 Jan 2016 11:45:03 +0800 Subject: Fix script reloader on OS X. --- libmproxy/script/reloader.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'libmproxy/script/reloader.py') 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 -- cgit v1.2.3