Delay RateLimit call after delayed call triggered

This commit is contained in:
shortcutme 2017-11-09 13:32:21 +01:00
parent 9d09890457
commit 5026f1b0a8
No known key found for this signature in database
GPG Key ID: 5B63BAE6CB9613AE
2 changed files with 12 additions and 7 deletions

View File

@ -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)

View File

@ -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