Skip to content

Commit d2f36ef

Browse files
authored
#7 Emitter raises TypeError when trying to build tags (#8)
* Closes #7 * Disable flake8 DAR checks
1 parent a82bb6d commit d2f36ef

4 files changed

Lines changed: 54 additions & 2 deletions

File tree

logging_loki/emitter.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import functools
66
import logging
77
import time
8+
from logging.config import ConvertingDict
89
from typing import Any
910
from typing import Dict
1011
from typing import List
@@ -87,7 +88,8 @@ def format_label(self, label: str) -> str:
8788

8889
def build_tags(self, record: logging.LogRecord) -> Dict[str, Any]:
8990
"""Return tags that must be send to Loki with a log record."""
90-
tags = copy.deepcopy(self.tags)
91+
tags = dict(self.tags) if isinstance(self.tags, ConvertingDict) else self.tags
92+
tags = copy.deepcopy(tags)
9193
tags[self.level_tag] = record.levelname.lower()
9294
tags[self.logger_tag] = record.name
9395

setup.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ max-imports = 15
1313
exclude =
1414
.tox
1515
logging_loki/__init__.py
16-
ignore = D100,D104
16+
ignore = D100,D104,DAR
1717
per-file-ignores =
1818
logging_loki/const.py:WPS226
1919
tests/*:D,S101,WPS118,WPS202,WPS204,WPS210,WPS226,WPS442

tests/test_emitter_v0.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import logging
44
import time
5+
from logging.config import dictConfig as loggingDictConfig
6+
from queue import Queue
57
from typing import Tuple
68
from unittest.mock import MagicMock
79

@@ -156,3 +158,26 @@ def test_session_is_closed(emitter_v0):
156158
emitter.close()
157159
session().close.assert_called_once()
158160
assert emitter._session is None # noqa: WPS437
161+
162+
163+
def test_can_build_tags_from_converting_dict(emitter_v0):
164+
logger_name = "converting_dict_tags_v0"
165+
config = {
166+
"version": 1,
167+
"disable_existing_loggers": False,
168+
"handlers": {
169+
logger_name: {
170+
"class": "logging_loki.LokiQueueHandler",
171+
"queue": Queue(-1),
172+
"url": emitter_url,
173+
"tags": {"test": "test"},
174+
"version": "0",
175+
},
176+
},
177+
"loggers": {logger_name: {"handlers": [logger_name], "level": "DEBUG"}},
178+
}
179+
loggingDictConfig(config)
180+
181+
logger = logging.getLogger(logger_name)
182+
emitter: LokiEmitterV0 = logger.handlers[0].handler.emitter
183+
emitter.build_tags(create_record())

tests/test_emitter_v1.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# -*- coding: utf-8 -*-
22

33
import logging
4+
from logging.config import dictConfig as loggingDictConfig
5+
from queue import Queue
46
from typing import Tuple
57
from unittest.mock import MagicMock
68

@@ -151,3 +153,26 @@ def test_session_is_closed(emitter_v1):
151153
emitter.close()
152154
session().close.assert_called_once()
153155
assert emitter._session is None # noqa: WPS437
156+
157+
158+
def test_can_build_tags_from_converting_dict(emitter_v1):
159+
logger_name = "converting_dict_tags_v1"
160+
config = {
161+
"version": 1,
162+
"disable_existing_loggers": False,
163+
"handlers": {
164+
logger_name: {
165+
"class": "logging_loki.LokiQueueHandler",
166+
"queue": Queue(-1),
167+
"url": emitter_url,
168+
"tags": {"test": "test"},
169+
"version": "1",
170+
},
171+
},
172+
"loggers": {logger_name: {"handlers": [logger_name], "level": "DEBUG"}},
173+
}
174+
loggingDictConfig(config)
175+
176+
logger = logging.getLogger(logger_name)
177+
emitter: LokiEmitterV1 = logger.handlers[0].handler.emitter
178+
emitter.build_tags(create_record())

0 commit comments

Comments
 (0)