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