diff options
Diffstat (limited to 'libmproxy')
-rw-r--r-- | libmproxy/flow.py | 8 | ||||
-rw-r--r-- | libmproxy/script/reloader.py | 22 |
2 files changed, 22 insertions, 8 deletions
diff --git a/libmproxy/flow.py b/libmproxy/flow.py index f02b5767..5e4ca5f6 100644 --- a/libmproxy/flow.py +++ b/libmproxy/flow.py @@ -666,7 +666,7 @@ class FlowMaster(controller.Master): script.reloader.unwatch(script_obj) self.scripts.remove(script_obj) - def load_script(self, command, use_reloader=False): + def load_script(self, command, use_reloader=True): """ Loads a script. Returns an error description if something went wrong. @@ -1040,14 +1040,14 @@ class FlowMaster(controller.Master): s.unload() except script.ScriptException as e: ok = False - self.add_event('Error reloading "{}": {}'.format(s.filename, str(e))) + self.add_event('Error reloading "{}": {}'.format(s.filename, str(e)), 'error') try: s.load() except script.ScriptException as e: ok = False - self.add_event('Error reloading "{}": {}'.format(s.filename, str(e))) + self.add_event('Error reloading "{}": {}'.format(s.filename, str(e)), 'error') else: - self.add_event('"{}" reloaded.'.format(s.filename)) + self.add_event('"{}" reloaded.'.format(s.filename), 'info') return ok def shutdown(self): 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 |