diff options
author | Maximilian Hils <git@maximilianhils.com> | 2015-11-14 05:57:02 +0100 |
---|---|---|
committer | Maximilian Hils <git@maximilianhils.com> | 2015-11-14 05:57:02 +0100 |
commit | 0d98b9dcc58f62c6fcb1ab597456b13a24ea88a3 (patch) | |
tree | 198546e0afd357073814376be02e9fd94afdd160 /libmproxy/script/reloader.py | |
parent | 4499ab61c04d765fc191227e25af0ee1cc98a83a (diff) | |
download | mitmproxy-0d98b9dcc58f62c6fcb1ab597456b13a24ea88a3.tar.gz mitmproxy-0d98b9dcc58f62c6fcb1ab597456b13a24ea88a3.tar.bz2 mitmproxy-0d98b9dcc58f62c6fcb1ab597456b13a24ea88a3.zip |
finalize script reloading :tada:
Diffstat (limited to 'libmproxy/script/reloader.py')
-rw-r--r-- | libmproxy/script/reloader.py | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/libmproxy/script/reloader.py b/libmproxy/script/reloader.py new file mode 100644 index 00000000..b867238f --- /dev/null +++ b/libmproxy/script/reloader.py @@ -0,0 +1,37 @@ +import os +from watchdog.events import PatternMatchingEventHandler +from watchdog.observers import Observer + +_observers = {} + + +def watch(script, callback): + script_dir = os.path.dirname(os.path.abspath(script.args[0])) + event_handler = _ScriptModificationHandler(callback) + observer = Observer() + observer.schedule(event_handler, script_dir) + observer.start() + _observers[script] = observer + + +def unwatch(script): + observer = _observers.pop(script, None) + if observer: + observer.stop() + + +class _ScriptModificationHandler(PatternMatchingEventHandler): + def __init__(self, callback): + # 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 + + def on_modified(self, event): + self.callback() + +__all__ = ["watch", "unwatch"]
\ No newline at end of file |