Skip to content

Commit 8f970c9

Browse files
Reduce repeated HTTP requests by caching resolved driver version (#656) (#721)
* fix(cache): cache resolved driver version to avoid repeated metadata requests
1 parent 5897f01 commit 8f970c9

2 files changed

Lines changed: 42 additions & 2 deletions

File tree

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from webdriver_manager.core.driver_cache import DriverCacheManager
2+
3+
4+
class OSMock:
5+
def get_os_type(self):
6+
return "linux64"
7+
8+
def get_browser_version_from_os(self, _browser_type=None):
9+
return "120.0.6099.71"
10+
11+
12+
class DriverMock:
13+
def __init__(self):
14+
self.version_calls = 0
15+
16+
def get_name(self):
17+
return "chromedriver"
18+
19+
def get_browser_type(self):
20+
return "google-chrome"
21+
22+
def get_browser_version_from_os(self):
23+
return "120.0.6099.71"
24+
25+
def get_driver_version_to_download(self):
26+
self.version_calls += 1
27+
return "120.0.6099.109"
28+
29+
30+
def test_driver_version_lookup_is_cached_within_cache_manager(tmp_path):
31+
cache = DriverCacheManager(root_dir=str(tmp_path), os_system_manager=OSMock())
32+
driver = DriverMock()
33+
34+
cache.get_cache_key_driver_version(driver)
35+
cache.get_cache_key_driver_version(driver)
36+
cache._DriverCacheManager__get_path(driver)
37+
cache._DriverCacheManager__get_metadata_key(driver)
38+
39+
assert driver.version_calls == 1

webdriver_manager/core/driver_cache.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,14 +194,15 @@ def __get_metadata_key(self, driver: Driver):
194194
def get_cache_key_driver_version(self, driver: Driver):
195195
if self._cache_key_driver_version:
196196
return self._cache_key_driver_version
197-
return driver.get_driver_version_to_download()
197+
self._cache_key_driver_version = driver.get_driver_version_to_download()
198+
return self._cache_key_driver_version
198199

199200
def __get_path(self, driver: Driver):
200201
if self._driver_binary_path is None:
201202
self._driver_binary_path = os.path.join(
202203
self._drivers_directory,
203204
driver.get_name(),
204205
self.get_os_type(),
205-
driver.get_driver_version_to_download(),
206+
self.get_cache_key_driver_version(driver),
206207
)
207208
return self._driver_binary_path

0 commit comments

Comments
 (0)