From fdd151ba5dbe65acd6a6de1b9733832716cb4331 Mon Sep 17 00:00:00 2001 From: Thalisson Fernandes Date: Wed, 12 Mar 2025 22:41:48 -0300 Subject: [PATCH 1/3] fix: add delay after closing browser and improve temp directory cleanup --- pydoll/browser/base.py | 1 + pydoll/browser/managers.py | 9 ++++----- tests/test_browser_managers.py | 13 +++++++------ 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/pydoll/browser/base.py b/pydoll/browser/base.py index e0677319..334d11d4 100644 --- a/pydoll/browser/base.py +++ b/pydoll/browser/base.py @@ -234,6 +234,7 @@ async def stop(self): if await self._is_browser_running(): await self._execute_command(BrowserCommands.CLOSE) self._browser_process_manager.stop_process() + await asyncio.sleep(1) # small delay to ensure browser is closed self._temp_directory_manager.cleanup() else: raise exceptions.BrowserNotRunning('Browser is not running') diff --git a/pydoll/browser/managers.py b/pydoll/browser/managers.py index 27377cfb..5c64b002 100644 --- a/pydoll/browser/managers.py +++ b/pydoll/browser/managers.py @@ -201,7 +201,7 @@ def __init__(self, temp_dir_factory=TemporaryDirectory): temporary directories. Defaults to TemporaryDirectory. """ self._temp_dir_factory = temp_dir_factory - self._temp_dirs = [] + self._temp_dirs: list[temp_dir_factory] = [] def create_temp_dir(self): """ @@ -213,7 +213,7 @@ def create_temp_dir(self): Returns: TemporaryDirectory: The created temporary directory instance. """ - temp_dir = self._temp_dir_factory() + temp_dir = self._temp_dir_factory(delete=False) # avoid auto-deletion self._temp_dirs.append(temp_dir) return temp_dir @@ -222,15 +222,14 @@ def cleanup(self): Cleans up all temporary directories created by this manager. This method removes all temporary directories created with - create_temp_dir, suppressing any OS errors that might occur - during deletion. + create_temp_dir. Returns: None """ for temp_dir in self._temp_dirs: with suppress(OSError): - shutil.rmtree(temp_dir.name) + temp_dir.cleanup() class BrowserOptionsManager: diff --git a/tests/test_browser_managers.py b/tests/test_browser_managers.py index c14f37e7..ddef4899 100644 --- a/tests/test_browser_managers.py +++ b/tests/test_browser_managers.py @@ -20,7 +20,10 @@ def proxy_options(): def temp_manager(): mock_dir = MagicMock() mock_dir.name = '/fake/temp/dir' - return TempDirectoryManager(temp_dir_factory=lambda: mock_dir) + mock_dir.cleanup = MagicMock() + return TempDirectoryManager( + temp_dir_factory=lambda delete: mock_dir + ) @pytest.fixture @@ -101,12 +104,10 @@ def test_cleanup_temp_dirs(temp_manager): mock_dir2 = MagicMock() temp_manager._temp_dirs = [mock_dir1, mock_dir2] - with patch('shutil.rmtree') as mock_rmtree: - temp_manager.cleanup() + temp_manager.cleanup() - assert mock_rmtree.call_count == 2 - mock_rmtree.assert_any_call(mock_dir1.name) - mock_rmtree.assert_any_call(mock_dir2.name) + assert mock_dir1.cleanup.call_count == 1 + assert mock_dir2.cleanup.call_count == 1 def test_initialize_options_with_none(): From d1db0fbf0f3b82624d293a566eb354a32ef629ee Mon Sep 17 00:00:00 2001 From: Thalisson Fernandes Date: Wed, 12 Mar 2025 22:43:05 -0300 Subject: [PATCH 2/3] style: fix comment formatting for consistency in browser module --- pydoll/browser/base.py | 2 +- pydoll/browser/managers.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/pydoll/browser/base.py b/pydoll/browser/base.py index 334d11d4..fa30b91f 100644 --- a/pydoll/browser/base.py +++ b/pydoll/browser/base.py @@ -234,7 +234,7 @@ async def stop(self): if await self._is_browser_running(): await self._execute_command(BrowserCommands.CLOSE) self._browser_process_manager.stop_process() - await asyncio.sleep(1) # small delay to ensure browser is closed + await asyncio.sleep(1) # small delay to ensure browser is closed self._temp_directory_manager.cleanup() else: raise exceptions.BrowserNotRunning('Browser is not running') diff --git a/pydoll/browser/managers.py b/pydoll/browser/managers.py index 5c64b002..10b34bb2 100644 --- a/pydoll/browser/managers.py +++ b/pydoll/browser/managers.py @@ -1,5 +1,4 @@ import os -import shutil import subprocess from contextlib import suppress from tempfile import TemporaryDirectory @@ -213,7 +212,7 @@ def create_temp_dir(self): Returns: TemporaryDirectory: The created temporary directory instance. """ - temp_dir = self._temp_dir_factory(delete=False) # avoid auto-deletion + temp_dir = self._temp_dir_factory(delete=False) # avoid auto-deletion self._temp_dirs.append(temp_dir) return temp_dir From 14c0372f11c0299b6c040badc46640f20a6519d7 Mon Sep 17 00:00:00 2001 From: Thalison Fernandes Date: Wed, 12 Mar 2025 22:47:24 -0300 Subject: [PATCH 3/3] test: update tests/test_browser_managers.py Co-authored-by: qodo-merge-pro[bot] <151058649+qodo-merge-pro[bot]@users.noreply.github.com> --- tests/test_browser_managers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_browser_managers.py b/tests/test_browser_managers.py index ddef4899..1232d9a0 100644 --- a/tests/test_browser_managers.py +++ b/tests/test_browser_managers.py @@ -22,7 +22,7 @@ def temp_manager(): mock_dir.name = '/fake/temp/dir' mock_dir.cleanup = MagicMock() return TempDirectoryManager( - temp_dir_factory=lambda delete: mock_dir + temp_dir_factory=lambda **kwargs: mock_dir )