mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-26 18:18:25 +00:00
script: revamp ephemeral script running
Fixes 2838
This commit is contained in:
parent
260f729092
commit
88fe26997c
@ -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))
|
||||
|
||||
|
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user