Skip to content

Commit 8433db7

Browse files
Allow third-party logger-like objects in set_logger (#688) (#726)
* fix(logger): accept logger-like objects with log(level, message) method (#688) * test(firefox): make cache os_type matrix platform-aware to avoid cross-OS network flakiness
1 parent f00c062 commit 8433db7

3 files changed

Lines changed: 34 additions & 6 deletions

File tree

tests/test_custom_logger.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,23 @@ def test_custom_logger(capsys, create_logger):
3939

4040
# Restore the old logger
4141
set_logger(__old_logger)
42+
43+
44+
def test_custom_logger_accepts_logger_like_object():
45+
records = []
46+
47+
class LoggerLike:
48+
def log(self, level, message):
49+
records.append((level, message))
50+
51+
logger_like = LoggerLike()
52+
set_logger(logger_like)
53+
54+
log_msg = "logger-like object message"
55+
log(log_msg)
56+
57+
assert records
58+
assert records[-1][1] == log_msg
59+
60+
# Restore the old logger
61+
set_logger(__old_logger)

tests/test_firefox_manager.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import os
2+
import platform
23

34
import pytest
45
from selenium import webdriver
@@ -64,7 +65,15 @@ def test_can_download_ff_x64(delete_drivers_dir):
6465
assert os.path.exists(driver_path)
6566

6667

67-
@pytest.mark.parametrize('os_type', ['win32', 'win64', 'linux32', 'linux64'])
68+
def _cache_os_types_for_current_platform():
69+
if platform.system().lower().startswith("win"):
70+
return ["win32", "win64"]
71+
if platform.system().lower().startswith("linux"):
72+
return ["linux32", "linux64"]
73+
return ["mac64"]
74+
75+
76+
@pytest.mark.parametrize('os_type', _cache_os_types_for_current_platform())
6877
@requires_gh_token
6978
def test_can_get_driver_from_cache(os_type):
7079
GeckoDriverManager(os_system_manager=OperationSystemManager(os_type)).install()

webdriver_manager/core/logger.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,14 @@ def set_logger(logger):
1717
1818
Parameters
1919
----------
20-
logger : logging.Logger
21-
The custom logger to use.
20+
logger : object
21+
Any logger-like object that provides a callable ``log(level, message)`` method.
2222
2323
Returns None
2424
"""
2525

26-
# Check if the logger is a valid logger
27-
if not isinstance(logger, logging.Logger):
28-
raise ValueError("The logger must be an instance of logging.Logger")
26+
if not callable(getattr(logger, "log", None)):
27+
raise ValueError("The logger must provide a callable log(level, message) method")
2928

3029
# Bind the logger input to the global logger
3130
global __logger

0 commit comments

Comments
 (0)