aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfate0 <6829628+fate0@users.noreply.github.com>2017-12-27 01:44:43 +0800
committerMaximilian Hils <git@maximilianhils.com>2017-12-26 18:44:43 +0100
commit5661b40942d0ddcac14a2eb3e8a9ff30b7eaca06 (patch)
tree57300a31a8583e3e6733725769caf5c0d676a368
parente1f4d17ea74beb21069beb958447bb405836227f (diff)
downloadmitmproxy-5661b40942d0ddcac14a2eb3e8a9ff30b7eaca06.tar.gz
mitmproxy-5661b40942d0ddcac14a2eb3e8a9ff30b7eaca06.tar.bz2
mitmproxy-5661b40942d0ddcac14a2eb3e8a9ff30b7eaca06.zip
@concurrent decorator works for class methods. (#2708)
* @concurrent decorator should works for class methods * modify test for @concurrent decorator in class. * add docs
-rw-r--r--mitmproxy/script/concurrent.py16
-rw-r--r--test/mitmproxy/data/addonscripts/concurrent_decorator_class.py2
2 files changed, 10 insertions, 8 deletions
diff --git a/mitmproxy/script/concurrent.py b/mitmproxy/script/concurrent.py
index 1d935585..217fab9d 100644
--- a/mitmproxy/script/concurrent.py
+++ b/mitmproxy/script/concurrent.py
@@ -17,9 +17,14 @@ def concurrent(fn):
"Concurrent decorator not supported for '%s' method." % fn.__name__
)
- def _concurrent(obj):
+ def _concurrent(*args):
+ # When annotating classmethods, "self" is passed as the first argument.
+ # To support both class and static methods, we accept a variable number of arguments
+ # and take the last one as our actual hook object.
+ obj = args[-1]
+
def run():
- fn(obj)
+ fn(*args)
if obj.reply.state == "taken":
if not obj.reply.has_message:
obj.reply.ack()
@@ -29,8 +34,5 @@ def concurrent(fn):
"script.concurrent (%s)" % fn.__name__,
target=run
).start()
- # Support @concurrent for class-based addons
- if "." in fn.__qualname__:
- return staticmethod(_concurrent)
- else:
- return _concurrent
+
+ return _concurrent
diff --git a/test/mitmproxy/data/addonscripts/concurrent_decorator_class.py b/test/mitmproxy/data/addonscripts/concurrent_decorator_class.py
index 2a7d300c..b52f55c5 100644
--- a/test/mitmproxy/data/addonscripts/concurrent_decorator_class.py
+++ b/test/mitmproxy/data/addonscripts/concurrent_decorator_class.py
@@ -5,7 +5,7 @@ from mitmproxy.script import concurrent
class ConcurrentClass:
@concurrent
- def request(flow):
+ def request(self, flow):
time.sleep(0.1)