Skip to content

Commit 2c8bbe6

Browse files
authored
Refactor max idle time (#220)
* Add exception handle for refactor max_idle_time * Add unittest for refactor max_idle_time * Add default MAX_IDLE_TIME value
1 parent fc9ca2f commit 2c8bbe6

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed

src/scrapy_redis/defaults.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,4 @@
2626
START_URLS_KEY = '%(name)s:start_urls'
2727
START_URLS_AS_SET = False
2828
START_URLS_AS_ZSET = False
29+
MAX_IDLE_TIME = 0

src/scrapy_redis/spiders.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,16 @@ def setup_redis(self, crawler=None):
8686
self.fetch_data = self.pop_list_queue
8787
self.count_size = self.server.llen
8888

89-
self.max_idle_time = settings.getint("MAX_IDLE_TIME_BEFORE_CLOSE")
89+
if self.max_idle_time is None:
90+
self.max_idle_time = settings.getint(
91+
"MAX_IDLE_TIME_BEFORE_CLOSE",
92+
defaults.MAX_IDLE_TIME
93+
)
94+
95+
try:
96+
self.max_idle_time = int(self.max_idle_time)
97+
except (TypeError, ValueError):
98+
raise ValueError("max_idle_time must be an integer")
9099

91100
# The idle signal is called when the spider has no requests left,
92101
# that's when we will schedule new requests from redis queue

tests/test_spiders.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,13 @@ def test_invalid_batch_size(self):
5656
self.myspider.setup_redis()
5757
assert "redis_batch_size" in str(excinfo.value)
5858

59+
def test_invalid_idle_time(self):
60+
self.myspider.max_idle_time = 'x'
61+
self.myspider.crawler = get_crawler()
62+
with pytest.raises(ValueError) as excinfo:
63+
self.myspider.setup_redis()
64+
assert "max_idle_time" in str(excinfo.value)
65+
5966
@mock.patch('scrapy_redis.spiders.connection')
6067
def test_via_from_crawler(self, connection):
6168
server = connection.from_settings.return_value = mock.Mock()
@@ -82,12 +89,13 @@ def test_from_crawler_with_spider_arguments(spider_cls):
8289
crawler, 'foo',
8390
redis_key='key:%(name)s',
8491
redis_batch_size='2000',
92+
max_idle_time='100',
8593
)
8694
assert spider.name == 'foo'
8795
assert spider.redis_key == 'key:foo'
8896
assert spider.redis_batch_size == 2000
89-
90-
97+
assert spider.max_idle_time == 100
98+
9199
class MockRequest(mock.Mock):
92100
def __init__(self, url, **kwargs):
93101
super(MockRequest, self).__init__()

0 commit comments

Comments
 (0)