File: test_propagation.py

package info (click to toggle)
loguru 0.7.3-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,556 kB
  • sloc: python: 13,164; javascript: 49; makefile: 14
file content (103 lines) | stat: -rw-r--r-- 2,739 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import logging
import sys
from logging import StreamHandler

import pytest

from loguru import logger

from .conftest import make_logging_logger


class PropagateHandler(logging.Handler):
    def emit(self, record):
        logging.getLogger(record.name).handle(record)


def test_formatting(capsys):
    fmt = (
        "%(name)s - %(filename)s - %(funcName)s - %(levelname)s - "
        "%(levelno)s - %(lineno)d - %(module)s - %(message)s"
    )

    expected = (
        "tests.test_propagation - test_propagation.py - test_formatting - DEBUG - "
        "10 - 30 - test_propagation - This is my message\n"
    )

    with make_logging_logger("tests.test_propagation", StreamHandler(sys.stderr), fmt):
        logger.add(PropagateHandler(), format="{message}")
        logger.debug("This {verb} my {}", "message", verb="is")

    out, err = capsys.readouterr()
    assert out == ""
    assert err == expected


def test_propagate(capsys):
    with make_logging_logger("tests", StreamHandler(sys.stderr)) as logging_logger:
        logging_logger.debug("1")
        logger.debug("2")

        logger.add(PropagateHandler(), format="{message}")

        logger.debug("3")
        logger.trace("4")

    out, err = capsys.readouterr()
    assert out == ""
    assert err == "1\n3\n"


def test_remove_propagation(capsys):
    with make_logging_logger("tests", StreamHandler(sys.stderr)) as logging_logger:
        i = logger.add(PropagateHandler(), format="{message}")

        logger.debug("1")
        logging_logger.debug("2")

        logger.remove(i)

        logger.debug("3")
        logging_logger.debug("4")

    out, err = capsys.readouterr()
    assert out == ""
    assert err == "1\n2\n4\n"


def test_propagate_too_high(capsys):
    with make_logging_logger(
        "tests.test_propagation.deep", StreamHandler(sys.stderr)
    ) as logging_logger:
        logger.add(PropagateHandler(), format="{message}")
        logger.debug("1")
        logging_logger.debug("2")

    out, err = capsys.readouterr()
    assert out == ""
    assert err == "2\n"


@pytest.mark.parametrize("use_opt", [False, True])
def test_exception(capsys, use_opt):
    with make_logging_logger("tests", StreamHandler(sys.stderr)):
        logger.add(PropagateHandler(), format="{message}")

        try:
            1 / 0  # noqa: B018
        except Exception:
            if use_opt:
                logger.opt(exception=True).error("Oops...")
            else:
                logger.exception("Oops...")

    out, err = capsys.readouterr()
    lines = err.strip().splitlines()

    error = "ZeroDivisionError: division by zero"

    assert out == ""
    assert lines[0] == "Oops..."
    assert lines[-1] == error
    assert err.count(error) == 1