From 3d72b64b760da959b5ffd5ea6347335dc6579eeb Mon Sep 17 00:00:00 2001 From: Vlada Dusek Date: Sat, 28 Mar 2026 10:36:04 +0100 Subject: [PATCH] fix: remove double usage_count increment in Session.retire() Co-Authored-By: Claude Opus 4.6 (1M context) --- src/crawlee/sessions/_session.py | 2 -- tests/unit/sessions/test_session.py | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/crawlee/sessions/_session.py b/src/crawlee/sessions/_session.py index b7346e484a..b36d1b4970 100644 --- a/src/crawlee/sessions/_session.py +++ b/src/crawlee/sessions/_session.py @@ -217,8 +217,6 @@ def retire(self) -> None: to use `mark_bad` method. """ self._error_score += self._max_error_score - self._usage_count += 1 - # Note: We emit an event here because of the Puppeteer in TS implementation. def is_blocked_status_code( self, diff --git a/tests/unit/sessions/test_session.py b/tests/unit/sessions/test_session.py index 98af9c06a5..5d1ca29383 100644 --- a/tests/unit/sessions/test_session.py +++ b/tests/unit/sessions/test_session.py @@ -82,9 +82,27 @@ def test_multiple_marks(session: Session) -> None: def test_retire_method(session: Session) -> None: """Test that retire method properly sets the session as unusable.""" + initial_usage_count = session.usage_count session.retire() assert not session.is_usable assert session.error_score == 3.0 + assert session.usage_count == initial_usage_count + + +def test_mark_good_at_usage_limit_no_double_increment() -> None: + """Test that mark_good at max usage count does not double-increment usage_count via retire.""" + session = Session(max_usage_count=5, usage_count=4) + session.mark_good() + assert session.usage_count == 5 + assert not session.is_usable + + +def test_mark_bad_at_usage_limit_no_double_increment() -> None: + """Test that mark_bad at max usage count does not double-increment usage_count via retire.""" + session = Session(max_usage_count=5, usage_count=4) + session.mark_bad() + assert session.usage_count == 5 + assert not session.is_usable def test_retire_on_blocked_status_code(session: Session) -> None: