66 lines
2.6 KiB
Python
66 lines
2.6 KiB
Python
from __future__ import annotations
|
|
|
|
import logging
|
|
from typing import TYPE_CHECKING
|
|
|
|
from crawlee._utils.log import LoggerOnce
|
|
|
|
if TYPE_CHECKING:
|
|
import pytest
|
|
|
|
|
|
def test_first_call_logs(caplog: pytest.LogCaptureFixture) -> None:
|
|
logger = logging.getLogger('crawlee.tests.log_dedup_first')
|
|
logger_once = LoggerOnce(logger)
|
|
with caplog.at_level(logging.INFO, logger=logger.name):
|
|
logger_once.log('first', key='k1')
|
|
assert [r.getMessage() for r in caplog.records] == ['first']
|
|
|
|
|
|
def test_duplicate_key_is_suppressed(caplog: pytest.LogCaptureFixture) -> None:
|
|
logger = logging.getLogger('crawlee.tests.log_dedup_duplicate')
|
|
logger_once = LoggerOnce(logger)
|
|
with caplog.at_level(logging.INFO, logger=logger.name):
|
|
logger_once.log('first', key='k1')
|
|
logger_once.log('second', key='k1')
|
|
assert [r.getMessage() for r in caplog.records] == ['first']
|
|
|
|
|
|
def test_distinct_keys_each_log(caplog: pytest.LogCaptureFixture) -> None:
|
|
logger = logging.getLogger('crawlee.tests.log_dedup_distinct')
|
|
logger_once = LoggerOnce(logger)
|
|
with caplog.at_level(logging.INFO, logger=logger.name):
|
|
logger_once.log('msg-a', key='k1')
|
|
logger_once.log('msg-b', key='k2')
|
|
assert [r.getMessage() for r in caplog.records] == ['msg-a', 'msg-b']
|
|
|
|
|
|
def test_separate_instances_have_independent_state(caplog: pytest.LogCaptureFixture) -> None:
|
|
logger = logging.getLogger('crawlee.tests.log_dedup_independent')
|
|
logger_once_a = LoggerOnce(logger)
|
|
logger_once_b = LoggerOnce(logger)
|
|
with caplog.at_level(logging.INFO, logger=logger.name):
|
|
logger_once_a.log('from-a', key='k1')
|
|
logger_once_b.log('from-b', key='k1')
|
|
assert [r.getMessage() for r in caplog.records] == ['from-a', 'from-b']
|
|
|
|
|
|
def test_default_level_is_info(caplog: pytest.LogCaptureFixture) -> None:
|
|
logger = logging.getLogger('crawlee.tests.log_dedup_default_level')
|
|
logger_once = LoggerOnce(logger)
|
|
with caplog.at_level(logging.DEBUG, logger=logger.name):
|
|
logger_once.log('msg', key='k')
|
|
assert caplog.records[-1].levelno == logging.INFO
|
|
|
|
|
|
def test_log_emits_at_specified_level(caplog: pytest.LogCaptureFixture) -> None:
|
|
logger = logging.getLogger('crawlee.tests.log_dedup_levels')
|
|
logger_once = LoggerOnce(logger)
|
|
with caplog.at_level(logging.DEBUG, logger=logger.name):
|
|
logger_once.log('warn-msg', key='k_warn', level=logging.WARNING)
|
|
logger_once.log('error-msg', key='k_error', level=logging.ERROR)
|
|
|
|
levels = {r.getMessage(): r.levelno for r in caplog.records}
|
|
assert levels['warn-msg'] == logging.WARNING
|
|
assert levels['error-msg'] == logging.ERROR
|