aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2016-01-18 12:21:21 +0100
committerMaximilian Hils <git@maximilianhils.com>2016-01-18 12:21:21 +0100
commit7eb9bf818c6ab0b4fa341d741ead0a4199805473 (patch)
treea5b148925f1ffefcbe726c075890037a952d86bc /libmproxy
parent0f54f2990c0a32960ec5c82c620f79c68ad5f4b6 (diff)
parent8aeed2032d369fa7e818d3a4cb46d440ec3569a4 (diff)
downloadmitmproxy-7eb9bf818c6ab0b4fa341d741ead0a4199805473.tar.gz
mitmproxy-7eb9bf818c6ab0b4fa341d741ead0a4199805473.tar.bz2
mitmproxy-7eb9bf818c6ab0b4fa341d741ead0a4199805473.zip
Merge pull request #881 from MatthewShao/Fix#846
Fix #846
Diffstat (limited to 'libmproxy')
-rw-r--r--libmproxy/flow.py8
-rw-r--r--libmproxy/script/reloader.py26
2 files changed, 20 insertions, 14 deletions
diff --git a/libmproxy/flow.py b/libmproxy/flow.py
index 8e066191..1f28166f 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 handle_tcp_message(self, m):
diff --git a/libmproxy/script/reloader.py b/libmproxy/script/reloader.py
index 26691fa3..e81bdef6 100644
--- a/libmproxy/script/reloader.py
+++ b/libmproxy/script/reloader.py
@@ -1,6 +1,12 @@
import os
-from watchdog.events import PatternMatchingEventHandler
-from watchdog.observers import Observer
+import sys
+from watchdog.events import RegexMatchingEventHandler
+if sys.platform == 'darwin':
+ from watchdog.observers.polling import PollingObserver as Observer
+else:
+ from watchdog.observers import Observer
+# The OSX reloader in watchdog 0.8.3 breaks when unobserving paths.
+# We use the PollingObserver instead.
_observers = {}
@@ -9,7 +15,8 @@ def watch(script, callback):
if script in _observers:
raise RuntimeError("Script already observed")
script_dir = os.path.dirname(os.path.abspath(script.args[0]))
- event_handler = _ScriptModificationHandler(callback)
+ script_name = os.path.basename(script.args[0])
+ event_handler = _ScriptModificationHandler(callback, filename=script_name)
observer = Observer()
observer.schedule(event_handler, script_dir)
observer.start()
@@ -23,18 +30,17 @@ def unwatch(script):
observer.join()
-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.
+class _ScriptModificationHandler(RegexMatchingEventHandler):
+ def __init__(self, callback, filename='.*'):
+
super(_ScriptModificationHandler, self).__init__(
ignore_directories=True,
- patterns=["*.py"]
+ regexes=['.*'+filename]
)
self.callback = callback
def on_modified(self, event):
self.callback()
-__all__ = ["watch", "unwatch"] \ No newline at end of file
+__all__ = ["watch", "unwatch"]
+