aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/script/script.py
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2016-02-15 14:58:46 +0100
committerMaximilian Hils <git@maximilianhils.com>2016-02-15 14:58:46 +0100
commit33fa49277a821b9d38e8c9bf0bcf2adcfa2f6f04 (patch)
tree31914a601302579ff817504019296fd7e9e46765 /libmproxy/script/script.py
parent36f34f701991b5d474c005ec45e3b66e20f326a8 (diff)
downloadmitmproxy-33fa49277a821b9d38e8c9bf0bcf2adcfa2f6f04.tar.gz
mitmproxy-33fa49277a821b9d38e8c9bf0bcf2adcfa2f6f04.tar.bz2
mitmproxy-33fa49277a821b9d38e8c9bf0bcf2adcfa2f6f04.zip
move mitmproxy
Diffstat (limited to 'libmproxy/script/script.py')
-rw-r--r--libmproxy/script/script.py100
1 files changed, 0 insertions, 100 deletions
diff --git a/libmproxy/script/script.py b/libmproxy/script/script.py
deleted file mode 100644
index 55778851..00000000
--- a/libmproxy/script/script.py
+++ /dev/null
@@ -1,100 +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.
-import os
-import shlex
-import traceback
-import sys
-from ..exceptions import ScriptException
-
-
-class Script(object):
-
- """
- Script object representing an inline script.
- """
-
- def __init__(self, command, context):
- self.command = command
- self.args = self.parse_command(command)
- self.ctx = context
- self.ns = None
- self.load()
-
- @property
- def filename(self):
- return self.args[0]
-
- @staticmethod
- def parse_command(command):
- if not command or not command.strip():
- raise ScriptException("Empty script command.")
- if os.name == "nt": # Windows: escape all backslashes in the path.
- backslashes = shlex.split(command, posix=False)[0].count("\\")
- command = command.replace("\\", "\\\\", backslashes)
- args = shlex.split(command)
- args[0] = os.path.expanduser(args[0])
- if not os.path.exists(args[0]):
- raise 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 ScriptException("Not a file: %s" % args[0])
- return args
-
- 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:
- self.unload()
- script_dir = os.path.dirname(os.path.abspath(self.args[0]))
- self.ns = {'__file__': os.path.abspath(self.args[0])}
- sys.path.append(script_dir)
- try:
- execfile(self.args[0], self.ns, self.ns)
- except Exception as e:
- # Python 3: use exception chaining, https://www.python.org/dev/peps/pep-3134/
- raise ScriptException(traceback.format_exc(e))
- finally:
- sys.path.pop()
- return self.run("start", self.args)
-
- 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 ScriptException("Script not loaded.")
- f = self.ns.get(name)
- if f:
- try:
- return f(self.ctx, *args, **kwargs)
- except Exception as e:
- raise ScriptException(traceback.format_exc(e))
- else:
- return None