Skip to content

Commit 22d0bb6

Browse files
committed
test: ✅ test dictConfig external reference support
1 parent ec424ae commit 22d0bb6

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

tests/test_dictconfig.py

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
### IMPORTS
2+
### ============================================================================
3+
## Future
4+
from __future__ import annotations
5+
6+
## Standard Library
7+
from dataclasses import dataclass
8+
import io
9+
import json
10+
import logging
11+
import logging.config
12+
from typing import Any, Generator
13+
14+
## Installed
15+
import pytest
16+
17+
### SETUP
18+
### ============================================================================
19+
_LOGGER_COUNT = 0
20+
EXT_VAL = 999
21+
22+
LOGGING_CONFIG = {
23+
"version": 1,
24+
"disable_existing_loggers": False,
25+
"formatters": {
26+
"default": {
27+
"()": "pythonjsonlogger.json.JsonFormatter",
28+
"static_fields": {"ext-val": "ext://tests.test_dictconfig.EXT_VAL"},
29+
}
30+
},
31+
"handlers": {
32+
"default": {
33+
"level": "DEBUG",
34+
"formatter": "default",
35+
"class": "logging.StreamHandler",
36+
"stream": "ext://sys.stdout", # Default is stderr
37+
},
38+
},
39+
"loggers": {
40+
"": {"handlers": ["default"], "level": "WARNING", "propagate": False}, # root logger
41+
},
42+
}
43+
44+
45+
@dataclass
46+
class LoggingEnvironment:
47+
logger: logging.Logger
48+
buffer: io.StringIO
49+
50+
def load_json(self) -> Any:
51+
return json.loads(self.buffer.getvalue())
52+
53+
54+
@pytest.fixture
55+
def env() -> Generator[LoggingEnvironment, None, None]:
56+
global _LOGGER_COUNT # pylint: disable=global-statement
57+
_LOGGER_COUNT += 1
58+
logging.config.dictConfig(LOGGING_CONFIG)
59+
default_formatter = logging.root.handlers[0].formatter
60+
logger = logging.getLogger(f"pythonjsonlogger.tests.{_LOGGER_COUNT}")
61+
logger.setLevel(logging.DEBUG)
62+
buffer = io.StringIO()
63+
handler = logging.StreamHandler(buffer)
64+
handler.setFormatter(default_formatter)
65+
logger.addHandler(handler)
66+
yield LoggingEnvironment(logger=logger, buffer=buffer)
67+
logger.removeHandler(handler)
68+
logger.setLevel(logging.NOTSET)
69+
buffer.close()
70+
return
71+
72+
73+
### TESTS
74+
### ============================================================================
75+
def test_external_reference_support(env: LoggingEnvironment):
76+
env.logger.info("hello")
77+
log_json = env.load_json()
78+
79+
assert log_json["ext-val"] == EXT_VAL
80+
return

0 commit comments

Comments
 (0)