Esempio n. 1
0
def test_the_instance_should_be_able_to_unregister_multiple_realms():
    rr = RespectfulRequester()

    realm_tuples = [
        ["TEST123", 100, 300],
        ["TEST234", 200, 600],
        ["TEST345", 300, 900],
    ]

    rr.register_realms(realm_tuples)

    request_func = lambda: requests.get("http://google.com")
    rr._perform_request(request_func, realms=["TEST123", "TEST234", "TEST345"])

    rr.unregister_realms(["TEST123", "TEST234", "TEST345"])

    assert rr.redis.get(rr._realm_redis_key("TEST123")) is None
    assert not rr.redis.sismember("%s:REALMS" % rr.redis_prefix, "TEST123")
    assert not len(
        rr.redis.keys("%s:REQUESTS:%s:*" % (rr.redis_prefix, "TEST123")))

    assert rr.redis.get(rr._realm_redis_key("TEST234")) is None
    assert not rr.redis.sismember("%s:REALMS" % rr.redis_prefix, "TEST234")
    assert not len(
        rr.redis.keys("%s:REQUESTS:%s:*" % (rr.redis_prefix, "TEST234")))

    assert rr.redis.get(rr._realm_redis_key("TEST345")) is None
    assert not rr.redis.sismember("%s:REALMS" % rr.redis_prefix, "TEST345")
    assert not len(
        rr.redis.keys("%s:REQUESTS:%s:*" % (rr.redis_prefix, "TEST345")))
def test_the_instance_should_be_able_to_unregister_multiple_realms():
    rr = RespectfulRequester()

    realm_tuples = [
        ["TEST123", 100, 300],
        ["TEST234", 200, 600],
        ["TEST345", 300, 900],
    ]

    rr.register_realms(realm_tuples)

    request_func = lambda: requests.get("http://google.com")
    rr._perform_request(request_func, realms=["TEST123", "TEST234", "TEST345"])

    rr.unregister_realms(["TEST123", "TEST234", "TEST345"])

    assert rr.redis.get(rr._realm_redis_key("TEST123")) is None
    assert not rr.redis.sismember("%s:REALMS" % rr.redis_prefix, "TEST123")
    assert not len(rr.redis.keys("%s:REQUESTS:%s:*" % (rr.redis_prefix, "TEST123")))

    assert rr.redis.get(rr._realm_redis_key("TEST234")) is None
    assert not rr.redis.sismember("%s:REALMS" % rr.redis_prefix, "TEST234")
    assert not len(rr.redis.keys("%s:REQUESTS:%s:*" % (rr.redis_prefix, "TEST234")))

    assert rr.redis.get(rr._realm_redis_key("TEST345")) is None
    assert not rr.redis.sismember("%s:REALMS" % rr.redis_prefix, "TEST345")
    assert not len(rr.redis.keys("%s:REQUESTS:%s:*" % (rr.redis_prefix, "TEST345")))
def test_the_instance_should_return_a_rate_limit_exception_if_the_request_is_not_allowed_on_a_registered_realm():
    rr = RespectfulRequester()

    rr.register_realm("TEST123", max_requests=0, timespan=5)

    request_func = lambda: requests.get("http://google.com")

    with pytest.raises(RequestsRespectfulRateLimitedError):
        rr._perform_request(request_func, "TEST123")

    rr.unregister_realm("TEST123")
def test_the_instance_should_be_able_to_unregister_a_realm():
    rr = RespectfulRequester()

    rr.register_realm("TEST123", max_requests=100, timespan=300)

    request_func = lambda: requests.get("http://google.com")
    rr._perform_request(request_func, "TEST123")

    rr.unregister_realm("TEST123")

    assert rr.redis.get(rr._realm_redis_key("TEST123")) is None
    assert not rr.redis.sismember("%s:REALMS" % rr.redis_prefix, "TEST123")
    assert not len(rr.redis.keys("%s:REQUESTS:%s:*" % (rr.redis_prefix, "TEST123")))
def test_the_instance_should_be_able_to_determine_the_amount_of_requests_performed_in_a_timespan_for_a_registered_realm():
    rr = RespectfulRequester()

    rr.register_realm("TEST123", max_requests=1000, timespan=5)

    assert rr._requests_in_timespan("TEST123") == 0

    request_func = lambda: requests.get("http://google.com")

    rr._perform_request(request_func, "TEST123")
    rr._perform_request(request_func, "TEST123")
    rr._perform_request(request_func, "TEST123")

    assert rr._requests_in_timespan("TEST123") == 3

    rr.unregister_realm("TEST123")
def test_the_instance_should_perform_the_request_if_it_is_allowed_to_on_a_registered_realm():
    rr = RespectfulRequester()

    rr.register_realm("TEST123", max_requests=1000, timespan=5)

    request_func = lambda: requests.get("http://google.com")
    assert type(rr._perform_request(request_func, "TEST123")) == requests.Response

    rr.unregister_realm("TEST123")