aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mitmproxy/addons/script.py26
-rw-r--r--test/mitmproxy/addons/test_script.py8
2 files changed, 21 insertions, 13 deletions
diff --git a/mitmproxy/addons/script.py b/mitmproxy/addons/script.py
index 706146b0..5c0fe2de 100644
--- a/mitmproxy/addons/script.py
+++ b/mitmproxy/addons/script.py
@@ -148,16 +148,26 @@ class ScriptLoader:
@command.command("script.run")
def script_run(self, flows: typing.Sequence[flow.Flow], path: mtypes.Path) -> None:
"""
- Run a script on the specified flows. The script is loaded with
- default options, and all lifecycle events for each flow are
- simulated.
+ Run a script on the specified flows. The script is configured with
+ the current options and all lifecycle events for each flow are
+ simulated. Note that the load event is not invoked.
"""
+ if not os.path.isfile(path):
+ ctx.log.error('No such script: %s' % path)
+ return
try:
- s = Script(path, False)
- for f in flows:
- for evt, arg in eventsequence.iterate(f):
- with addonmanager.safecall():
- ctx.master.addons.invoke_addon(s, evt, arg)
+ mod = load_script(path)
+ if mod:
+ ctx.master.addons.invoke_addon(mod, "running")
+ ctx.master.addons.invoke_addon(
+ mod,
+ "configure",
+ ctx.options.keys()
+ )
+ for f in flows:
+ for evt, arg in eventsequence.iterate(f):
+ with addonmanager.safecall():
+ ctx.master.addons.invoke_addon(mod, evt, arg)
except exceptions.OptionsError as e:
script_error_handler(path, e, msg=str(e))
diff --git a/test/mitmproxy/addons/test_script.py b/test/mitmproxy/addons/test_script.py
index 573b36e7..05472d9a 100644
--- a/test/mitmproxy/addons/test_script.py
+++ b/test/mitmproxy/addons/test_script.py
@@ -173,16 +173,14 @@ class TestCutTraceback:
class TestScriptLoader:
@pytest.mark.asyncio
async def test_script_run(self, tdata):
- rp = tdata.path(
- "mitmproxy/data/addonscripts/recorder/recorder.py"
- )
+ rp = tdata.path("mitmproxy/data/addonscripts/recorder/recorder.py")
sc = script.ScriptLoader()
with taddons.context(sc) as tctx:
sc.script_run([tflow.tflow(resp=True)], rp)
await tctx.master.await_log("recorder response")
debug = [i.msg for i in tctx.master.logs if i.level == "debug"]
assert debug == [
- 'recorder load', 'recorder running', 'recorder configure',
+ 'recorder running', 'recorder configure',
'recorder requestheaders', 'recorder request',
'recorder responseheaders', 'recorder response'
]
@@ -192,7 +190,7 @@ class TestScriptLoader:
sc = script.ScriptLoader()
with taddons.context(sc) as tctx:
sc.script_run([tflow.tflow(resp=True)], "/")
- assert await tctx.master.await_log("/: No such script")
+ assert await tctx.master.await_log("No such script")
def test_simple(self, tdata):
sc = script.ScriptLoader()