Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/structlog/_generic.py: 50%
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# SPDX-License-Identifier: MIT OR Apache-2.0
2# This file is dual licensed under the terms of the Apache License, Version
3# 2.0, and the MIT License. See the LICENSE file in the root of this
4# repository for complete details.
6"""
7Generic bound logger that can wrap anything.
8"""
10from __future__ import annotations
12from functools import partial
13from typing import Any
15from structlog._base import BoundLoggerBase
18class BoundLogger(BoundLoggerBase):
19 """
20 A generic BoundLogger that can wrap anything.
22 Every unknown method will be passed to the wrapped *logger*. If that's too
23 much magic for you, try `structlog.stdlib.BoundLogger` or
24 `structlog.twisted.BoundLogger` which also take advantage of knowing the
25 wrapped class which generally results in better performance.
27 Not intended to be instantiated by yourself. See
28 :func:`~structlog.wrap_logger` and :func:`~structlog.get_logger`.
29 """
31 def __getattr__(self, method_name: str) -> Any:
32 """
33 If not done so yet, wrap the desired logger method & cache the result.
34 """
35 if method_name == "__deepcopy__":
36 return None
38 wrapped = partial(self._proxy_to_logger, method_name)
39 setattr(self, method_name, wrapped)
41 return wrapped
43 def __getstate__(self) -> dict[str, Any]:
44 """
45 Our __getattr__ magic makes this necessary.
46 """
47 return self.__dict__
49 def __setstate__(self, state: dict[str, Any]) -> None:
50 """
51 Our __getattr__ magic makes this necessary.
52 """
53 for k, v in state.items():
54 setattr(self, k, v)