From 5026f1b0a8bad418fcc9baf0137e5f7ee877513c Mon Sep 17 00:00:00 2001 From: shortcutme Date: Thu, 9 Nov 2017 13:32:21 +0100 Subject: [PATCH] Delay RateLimit call after delayed call triggered --- src/Test/TestRateLimit.py | 14 ++++++++++---- src/util/RateLimit.py | 5 ++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/Test/TestRateLimit.py b/src/Test/TestRateLimit.py index b0a91ba0..62943d6f 100644 --- a/src/Test/TestRateLimit.py +++ b/src/Test/TestRateLimit.py @@ -37,6 +37,7 @@ class TestRateLimit: assert RateLimit.call("counting", allowed_again=0.1, func=obj1.count) == "counted" assert around(time.time() - s, 0.1) # Delays second call within interval assert obj1.counted == 2 + time.sleep(0.1) # Wait the cooldown time # Call 3 times async s = time.time() @@ -50,6 +51,11 @@ class TestRateLimit: assert [thread.value for thread in threads] == ["counted", "counted", "counted"] assert around(time.time() - s, 0.2) + # Wait 0.1s cooldown + assert not RateLimit.isAllowed("counting", 0.1) + time.sleep(0.1) + assert RateLimit.isAllowed("counting", 0.1) + # No queue = instant again s = time.time() assert RateLimit.isAllowed("counting", 0.1) @@ -83,12 +89,12 @@ class TestRateLimit: assert obj1.counted == 2 assert obj1.last_called == "call #4" - # Allowed again instantly - assert RateLimit.isAllowed("counting async", 0.1) + # Just called, not allowed again + assert not RateLimit.isAllowed("counting async", 0.1) s = time.time() - RateLimit.callAsync("counting async", allowed_again=0.1, func=obj1.count, back="call #5").join() + t4 = RateLimit.callAsync("counting async", allowed_again=0.1, func=obj1.count, back="call #5").join() assert obj1.counted == 3 - assert around(time.time() - s, 0.0) + assert around(time.time() - s, 0.1) assert not RateLimit.isAllowed("counting async", 0.1) time.sleep(0.11) assert RateLimit.isAllowed("counting async", 0.1) diff --git a/src/util/RateLimit.py b/src/util/RateLimit.py index 2f1cf2d9..35b592ca 100644 --- a/src/util/RateLimit.py +++ b/src/util/RateLimit.py @@ -37,7 +37,7 @@ def delayLeft(event, allowed_again=10): def callQueue(event): func, args, kwargs, thread = queue_db[event] log.debug("Calling: %s" % event) - del called_db[event] + called(event) del queue_db[event] return func(*args, **kwargs) @@ -78,8 +78,7 @@ def call(event, allowed_again=10, func=None, *args, **kwargs): called(event, time_left) time.sleep(time_left) back = func(*args, **kwargs) - if event in called_db: - del called_db[event] + called(event) return back