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  | 
