aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy
diff options
context:
space:
mode:
Diffstat (limited to 'mitmproxy')
-rw-r--r--mitmproxy/addonmanager.py30
-rw-r--r--mitmproxy/command.py6
-rw-r--r--mitmproxy/master.py21
-rw-r--r--mitmproxy/test/taddons.py11
4 files changed, 16 insertions, 52 deletions
diff --git a/mitmproxy/addonmanager.py b/mitmproxy/addonmanager.py
index 7c446c80..9d0e7069 100644
--- a/mitmproxy/addonmanager.py
+++ b/mitmproxy/addonmanager.py
@@ -8,7 +8,6 @@ from mitmproxy import exceptions
from mitmproxy import eventsequence
from mitmproxy import controller
from mitmproxy import flow
-from mitmproxy import log
from . import ctx
import pprint
@@ -38,9 +37,6 @@ def cut_traceback(tb, func_name):
class StreamLog:
- """
- A class for redirecting output using contextlib.
- """
def __init__(self, lg):
self.log = lg
@@ -183,9 +179,8 @@ class AddonManager:
Add addons to the end of the chain, and run their load event.
If any addon has sub-addons, they are registered.
"""
- with self.master.handlecontext():
- for i in addons:
- self.chain.append(self.register(i))
+ for i in addons:
+ self.chain.append(self.register(i))
def remove(self, addon):
"""
@@ -201,8 +196,7 @@ class AddonManager:
raise exceptions.AddonManagerError("No such addon: %s" % n)
self.chain = [i for i in self.chain if i is not a]
del self.lookup[_get_name(a)]
- with self.master.handlecontext():
- self.invoke_addon(a, "done")
+ self.invoke_addon(a, "done")
def __len__(self):
return len(self.chain)
@@ -245,8 +239,7 @@ class AddonManager:
def invoke_addon(self, addon, name, *args, **kwargs):
"""
- Invoke an event on an addon and all its children. This method must
- run within an established handler context.
+ Invoke an event on an addon and all its children.
"""
if name not in eventsequence.Events:
name = "event_" + name
@@ -268,12 +261,11 @@ class AddonManager:
def trigger(self, name, *args, **kwargs):
"""
- Establish a handler context and trigger an event across all addons
+ Trigger an event across all addons.
"""
- with self.master.handlecontext():
- for i in self.chain:
- try:
- with safecall():
- self.invoke_addon(i, name, *args, **kwargs)
- except exceptions.AddonHalt:
- return
+ for i in self.chain:
+ try:
+ with safecall():
+ self.invoke_addon(i, name, *args, **kwargs)
+ except exceptions.AddonHalt:
+ return
diff --git a/mitmproxy/command.py b/mitmproxy/command.py
index 114e882d..35a7f42a 100644
--- a/mitmproxy/command.py
+++ b/mitmproxy/command.py
@@ -95,11 +95,7 @@ class Command:
Call the command with a list of arguments. At this point, all
arguments are strings.
"""
- pargs = self.prepare_args(args)
-
- with self.manager.master.handlecontext():
- ret = self.func(*pargs)
-
+ ret = self.func(*self.prepare_args(args))
if ret is None and self.returntype is None:
return
typ = mitmproxy.types.CommandTypes.get(self.returntype)
diff --git a/mitmproxy/master.py b/mitmproxy/master.py
index 323f73dc..4e17e538 100644
--- a/mitmproxy/master.py
+++ b/mitmproxy/master.py
@@ -1,5 +1,4 @@
import threading
-import contextlib
import asyncio
import logging
@@ -58,6 +57,10 @@ class Master:
self.waiting_flows = []
self.log = log.Log(self)
+ mitmproxy_ctx.master = self
+ mitmproxy_ctx.log = self.log
+ mitmproxy_ctx.options = self.options
+
@property
def server(self):
return self._server
@@ -67,22 +70,6 @@ class Master:
server.set_channel(self.channel)
self._server = server
- @contextlib.contextmanager
- def handlecontext(self):
- # Handlecontexts also have to nest - leave cleanup to the outermost
- if mitmproxy_ctx.master:
- yield
- return
- mitmproxy_ctx.master = self
- mitmproxy_ctx.log = self.log
- mitmproxy_ctx.options = self.options
- try:
- yield
- finally:
- mitmproxy_ctx.master = None
- mitmproxy_ctx.log = None
- mitmproxy_ctx.options = None
-
def start(self):
self.should_exit.clear()
if self.server:
diff --git a/mitmproxy/test/taddons.py b/mitmproxy/test/taddons.py
index 6d439c4a..73e57456 100644
--- a/mitmproxy/test/taddons.py
+++ b/mitmproxy/test/taddons.py
@@ -74,7 +74,6 @@ class context:
options
)
self.options = self.master.options
- self.wrapped = None
if loadcore:
self.master.addons.add(core.Core())
@@ -82,20 +81,10 @@ class context:
for a in addons:
self.master.addons.add(a)
- def ctx(self):
- """
- Returns a new handler context.
- """
- return self.master.handlecontext()
-
def __enter__(self):
- self.wrapped = self.ctx()
- self.wrapped.__enter__()
return self
def __exit__(self, exc_type, exc_value, traceback):
- self.wrapped.__exit__(exc_type, exc_value, traceback)
- self.wrapped = None
return False
@contextlib.contextmanager