diff options
author | fate0 <6829628+fate0@users.noreply.github.com> | 2017-12-27 01:44:43 +0800 |
---|---|---|
committer | Maximilian Hils <git@maximilianhils.com> | 2017-12-26 18:44:43 +0100 |
commit | 5661b40942d0ddcac14a2eb3e8a9ff30b7eaca06 (patch) | |
tree | 57300a31a8583e3e6733725769caf5c0d676a368 | |
parent | e1f4d17ea74beb21069beb958447bb405836227f (diff) | |
download | mitmproxy-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.py | 16 | ||||
-rw-r--r-- | test/mitmproxy/data/addonscripts/concurrent_decorator_class.py | 2 |
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) |