aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/script
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2016-07-14 14:39:07 +1200
committerAldo Cortesi <aldo@nullcube.com>2016-07-14 19:54:15 +1200
commita6821aad8e9296640c3efd4275e8922dd7c6e43b (patch)
tree83ab7d1df26981042e55951b6613dfc80ecf4d9b /mitmproxy/script
parenta3a22fba337fc4ac750b8c18663233920a0d646b (diff)
downloadmitmproxy-a6821aad8e9296640c3efd4275e8922dd7c6e43b.tar.gz
mitmproxy-a6821aad8e9296640c3efd4275e8922dd7c6e43b.tar.bz2
mitmproxy-a6821aad8e9296640c3efd4275e8922dd7c6e43b.zip
Zap old scripts infrastructure, fix concurrency tests
Diffstat (limited to 'mitmproxy/script')
-rw-r--r--mitmproxy/script/__init__.py6
-rw-r--r--mitmproxy/script/reloader.py47
-rw-r--r--mitmproxy/script/script.py136
3 files changed, 0 insertions, 189 deletions
diff --git a/mitmproxy/script/__init__.py b/mitmproxy/script/__init__.py
index 9a3985ab..e75f282a 100644
--- a/mitmproxy/script/__init__.py
+++ b/mitmproxy/script/__init__.py
@@ -1,11 +1,5 @@
-from . import reloader
from .concurrent import concurrent
-from .script import Script
-from ..exceptions import ScriptException
__all__ = [
- "Script",
"concurrent",
- "ScriptException",
- "reloader"
]
diff --git a/mitmproxy/script/reloader.py b/mitmproxy/script/reloader.py
deleted file mode 100644
index 857d76cd..00000000
--- a/mitmproxy/script/reloader.py
+++ /dev/null
@@ -1,47 +0,0 @@
-from __future__ import absolute_import, print_function, division
-
-import os
-
-from watchdog.events import RegexMatchingEventHandler
-
-from watchdog.observers.polling import PollingObserver as Observer
-# We occasionally have watchdog errors on Windows, Linux and Mac when using the native observers.
-# After reading through the watchdog source code and issue tracker,
-# we may want to replace this with a very simple implementation of our own.
-
-_observers = {}
-
-
-def watch(script, callback):
- if script in _observers:
- raise RuntimeError("Script already observed")
- script_dir = os.path.dirname(os.path.abspath(script.path))
- script_name = os.path.basename(script.path)
- event_handler = _ScriptModificationHandler(callback, filename=script_name)
- 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()
- observer.join()
-
-
-class _ScriptModificationHandler(RegexMatchingEventHandler):
-
- def __init__(self, callback, filename='.*'):
-
- super(_ScriptModificationHandler, self).__init__(
- ignore_directories=True,
- regexes=['.*' + filename]
- )
- self.callback = callback
-
- def on_modified(self, event):
- self.callback()
-
-__all__ = ["watch", "unwatch"]
diff --git a/mitmproxy/script/script.py b/mitmproxy/script/script.py
deleted file mode 100644
index db4909ca..00000000
--- a/mitmproxy/script/script.py
+++ /dev/null
@@ -1,136 +0,0 @@
-"""
-The script object representing mitmproxy inline scripts.
-Script objects know nothing about mitmproxy or mitmproxy's API - this knowledge is provided
-by the mitmproxy-specific ScriptContext.
-"""
-# Do not import __future__ here, this would apply transitively to the inline scripts.
-from __future__ import absolute_import, print_function, division
-
-import os
-import shlex
-import sys
-import contextlib
-
-import six
-from typing import List # noqa
-
-from mitmproxy import exceptions
-
-
-@contextlib.contextmanager
-def scriptenv(path, args):
- # type: (str, List[str]) -> None
- oldargs = sys.argv
- script_dir = os.path.dirname(os.path.abspath(path))
-
- sys.argv = [path] + args
- sys.path.append(script_dir)
- try:
- yield
- finally:
- sys.argv = oldargs
- sys.path.pop()
-
-
-class Script(object):
- """
- Script object representing an inline script.
- """
-
- def __init__(self, command):
- self.command = command
- self.path, self.args = self.parse_command(command)
- self.ns = None
-
- def __enter__(self):
- self.load()
- return self
-
- def __exit__(self, exc_type, exc_val, exc_tb):
- if exc_val:
- return False # re-raise the exception
- self.unload()
-
- @staticmethod
- def parse_command(command):
- # type: (str) -> Tuple[str,List[str]]
- """
- Returns a (path, args) tuple.
- """
- if not command or not command.strip():
- raise exceptions.ScriptException("Empty script command.")
- # Windows: escape all backslashes in the path.
- if os.name == "nt": # pragma: no cover
- backslashes = shlex.split(command, posix=False)[0].count("\\")
- command = command.replace("\\", "\\\\", backslashes)
- args = shlex.split(command) # pragma: no cover
- args[0] = os.path.expanduser(args[0])
- if not os.path.exists(args[0]):
- raise exceptions.ScriptException(
- ("Script file not found: %s.\r\n"
- "If your script path contains spaces, "
- "make sure to wrap it in additional quotes, e.g. -s \"'./foo bar/baz.py' --args\".") %
- args[0])
- elif os.path.isdir(args[0]):
- raise exceptions.ScriptException("Not a file: %s" % args[0])
- return args[0], args[1:]
-
- def load(self):
- """
- Loads an inline script.
-
- Returns:
- The return value of self.run("start", ...)
-
- Raises:
- ScriptException on failure
- """
- if self.ns is not None:
- raise exceptions.ScriptException("Script is already loaded")
- self.ns = {'__file__': os.path.abspath(self.path)}
-
- with scriptenv(self.path, self.args):
- try:
- with open(self.path) as f:
- code = compile(f.read(), self.path, 'exec')
- exec(code, self.ns, self.ns)
- except Exception:
- six.reraise(
- exceptions.ScriptException,
- exceptions.ScriptException.from_exception_context(),
- sys.exc_info()[2]
- )
- return self.run("start")
-
- def unload(self):
- try:
- return self.run("done")
- finally:
- self.ns = None
-
- def run(self, name, *args, **kwargs):
- """
- Runs an inline script hook.
-
- Returns:
- The return value of the method.
- None, if the script does not provide the method.
-
- Raises:
- ScriptException if there was an exception.
- """
- if self.ns is None:
- raise exceptions.ScriptException("Script not loaded.")
- f = self.ns.get(name)
- if f:
- try:
- with scriptenv(self.path, self.args):
- return f(*args, **kwargs)
- except Exception:
- six.reraise(
- exceptions.ScriptException,
- exceptions.ScriptException.from_exception_context(),
- sys.exc_info()[2]
- )
- else:
- return None