def test_the_requests_module_name_configuration_value_should_have_the_expected_effect():
    rr = RespectfulRequester()

    RespectfulRequester.configure(requests_module_name="r")

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

    rr._validate_request_func(request_func)

    RespectfulRequester.configure_default()
def test_the_instance_should_be_able_to_wait_for_a_request_to_be_allowed_on_a_registered_realm():
    rr = RespectfulRequester()

    RespectfulRequester.configure(safety_threshold=0)

    rr.register_realm("TEST123", max_requests=1, timespan=2)

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

    rr.request(request_func, "TEST123", wait=True)
    rr.request(request_func, "TEST123", wait=True)
    rr.request(request_func, "TEST123", wait=True)

    rr.unregister_realm("TEST123")

    RespectfulRequester.configure_default()
def test_the_safety_threshold_configuration_value_should_have_the_expected_effect():
    rr = RespectfulRequester()

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

    RespectfulRequester.configure(safety_threshold=10)

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

    rr.request(request_func, "TEST123")

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

    RespectfulRequester.configure_default()

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

    RespectfulRequester.configure(safety_threshold=20)
    RespectfulRequester.configure(requests_module_name="r")
    RespectfulRequester.configure(redis={"host": "0.0.0.0", "port": 6379, "database": 1})

    RespectfulRequester.configure_default()

    assert rr._config()["safety_threshold"] == 10
    assert rr._config()["requests_module_name"] == "requests"
    assert rr._config()["redis"]["host"] == "localhost"
    assert rr._config()["redis"]["database"] == 0
Esempio n. 5
0
OH_API_BASE = OPENHUMANS_OH_BASE_URL + '/api/direct-sharing'
OH_DIRECT_UPLOAD = OH_API_BASE + '/project/files/upload/direct/'
OH_DIRECT_UPLOAD_COMPLETE = OH_API_BASE + '/project/files/upload/complete/'
OH_DELETE_FILES = OH_API_BASE + '/project/files/delete/'

# Requests Respectful (rate limiting, waiting)
if REMOTE is True:
    from urllib.parse import urlparse
    url_object = urlparse(os.getenv('REDIS_URL'))
    logger.info('Connecting to redis at %s:%s', url_object.hostname,
                url_object.port)
    RespectfulRequester.configure(redis={
        "host": url_object.hostname,
        "port": url_object.port,
        "password": url_object.password,
        "database": 0
    },
                                  safety_threshold=5)

# This creates a Realm called "source" that allows 60 requests per minute maximum.
rr = RespectfulRequester()
rr.register_realm("Source", max_requests=60, timespan=60)

# Applications installed
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    db = init_db()
else:
    from models import db  # noqa

redis_url = os.getenv('REDIS_URL', 'redis://localhost:6379')
url_object = urlparse.urlparse(redis_url)

logger.info('Connecting to redis at %s:%s',
            url_object.hostname,
            url_object.port)

RespectfulRequester.configure(
    redis={
        'host': url_object.hostname,
        'port': url_object.port,
        'password': url_object.password,
        'database': 0,
    },
    safety_threshold=5)

requests = RespectfulRequester()
requests.register_realm('fitbit', max_requests=3600, timespan=3600)
requests.update_realm('fitbit', max_requests=3600, timespan=3600)

# Only use cached data if cached less than CACHE_MAX before now.
# Cache target dates older than CACHE_MIN before now.
# Based on these settings 23 URLs won't be cached, and full data retrieval
# requires around 6 to 7 hours per year of data.
CACHE_MAX = timedelta(weeks=1)
CACHE_MIN = timedelta(days=1)
Esempio n. 7
0
def test_the_class_should_validate_provided_configuration_values():
    with pytest.raises(RequestsRespectfulConfigError):
        RespectfulRequester.configure(redis="REDIS")

    with pytest.raises(RequestsRespectfulConfigError):
        RespectfulRequester.configure(redis=dict())

    with pytest.raises(RequestsRespectfulConfigError):
        RespectfulRequester.configure(redis={
            "host": "localhost",
            "port": 6379
        })

    RespectfulRequester.configure(redis={
        "host": "localhost",
        "port": 6379,
        "database": 0
    })

    with pytest.raises(RequestsRespectfulConfigError):
        RespectfulRequester.configure(safety_threshold="SAFETY")

    with pytest.raises(RequestsRespectfulConfigError):
        RespectfulRequester.configure(safety_threshold=-15)

    RespectfulRequester.configure(safety_threshold=10)

    with pytest.raises(RequestsRespectfulConfigError):
        RespectfulRequester.configure(requests_module_name=100)

    RespectfulRequester.configure(requests_module_name="requests")

    RespectfulRequester.configure_default()
def test_the_class_should_validate_provided_configuration_values():
    with pytest.raises(RequestsRespectfulConfigError):
        RespectfulRequester.configure(redis="REDIS")

    with pytest.raises(RequestsRespectfulConfigError):
        RespectfulRequester.configure(redis=dict())

    with pytest.raises(RequestsRespectfulConfigError):
        RespectfulRequester.configure(redis={"host": "localhost", "port": 6379})

    RespectfulRequester.configure(redis={"host": "localhost", "port": 6379, "database": 0})

    with pytest.raises(RequestsRespectfulConfigError):
        RespectfulRequester.configure(safety_threshold="SAFETY")

    with pytest.raises(RequestsRespectfulConfigError):
        RespectfulRequester.configure(safety_threshold=-15)

    RespectfulRequester.configure(safety_threshold=10)

    with pytest.raises(RequestsRespectfulConfigError):
        RespectfulRequester.configure(requests_module_name=100)

    RespectfulRequester.configure(requests_module_name="requests")

    RespectfulRequester.configure_default()