16
16
class PatchedLogger (typing .Protocol ):
17
17
"""Class which enables using type checkers to find wrong logger usage."""
18
18
19
- def debug (self , msg : str , * , _ : Any = None , ** kwargs : Any ) -> Any :
19
+ def debug (self , msg : str , * , _ : Any = None , ** kwargs : Any ) -> None :
20
20
...
21
21
22
- def info (self , msg : str , * , _ : Any = None , ** kwargs : Any ) -> Any :
22
+ def info (self , msg : str , * , _ : Any = None , ** kwargs : Any ) -> None :
23
23
...
24
24
25
- def warn (self , msg : str , * , _ : Any = None , ** kwargs : Any ) -> Any :
25
+ def warn (self , msg : str , * , _ : Any = None , ** kwargs : Any ) -> None :
26
26
...
27
27
28
- def warning (self , msg : str , * , _ : Any = None , ** kwargs : Any ) -> Any :
28
+ def warning (self , msg : str , * , _ : Any = None , ** kwargs : Any ) -> None :
29
29
...
30
30
31
- def error (self , msg : str , * , _ : Any = None , ** kwargs : Any ) -> Any :
31
+ def error (self , msg : str , * , _ : Any = None , ** kwargs : Any ) -> None :
32
32
...
33
33
34
- def critical (self , msg : str , * , _ : Any = None , ** kwargs : Any ) -> Any :
34
+ def critical (self , msg : str , * , _ : Any = None , ** kwargs : Any ) -> None :
35
35
...
36
36
37
- def exception (self , msg : str , * , _ : Any = None , ** kwargs : Any ) -> Any :
37
+ def exception (self , msg : str , * , _ : Any = None , ** kwargs : Any ) -> None :
38
38
...
39
39
40
- def fatal (self , msg : str , * , _ : Any = None , ** kwargs : Any ) -> Any :
40
+ def fatal (self , msg : str , * , _ : Any = None , ** kwargs : Any ) -> None :
41
41
...
42
42
43
- def log (self , level : int , msg : str , * , _ : Any = None , ** kwargs : Any ) -> Any :
43
+ def log (self , level : int , msg : str , * , _ : Any = None , ** kwargs : Any ) -> None :
44
44
...
45
45
46
46
def setLevel (self , level : int ) -> None :
47
47
...
48
48
49
49
50
- def patched_log_method (func : typing .Callable ) -> typing .Callable :
50
+ def patch_log_method_to_kwargs_only (func : typing .Callable ) -> typing .Callable :
51
51
"""A decorator to make sure that a function is only called with keyword arguments."""
52
52
53
53
@functools .wraps (func )
54
- def log_only_with_kwargs (msg , * , _ : Any = None , ** kwargs : Any ) -> Any :
54
+ def log_only_with_kwargs (msg , * , _ : Any = None , ** kwargs : Any ) -> Any : # we need the `_` to avoid a syntax error
55
55
existing_extra = kwargs .pop ("extra" , {})
56
56
return func (msg , extra = {** existing_extra , ** kwargs })
57
57
58
58
return log_only_with_kwargs
59
59
60
60
61
- def patched_log_with_level_method (func : typing .Callable ) -> typing .Callable :
61
+ def patch_log_with_level_method_to_kwargs_only (func : typing .Callable ) -> typing .Callable :
62
62
"""A decorator to make sure that a function is only called with keyword arguments."""
63
63
64
64
@functools .wraps (func )
65
- def log_only_with_kwargs (level , msg , * , _ : Any = None , ** kwargs : Any ) -> Any :
65
+ def log_only_with_kwargs (
66
+ level , msg , * , _ : Any = None , ** kwargs : Any # we need the `_` to avoid a syntax error
67
+ ) -> Any :
66
68
existing_extra = kwargs .pop ("extra" , {})
67
69
return func (level , msg , extra = {** existing_extra , ** kwargs })
68
70
@@ -85,15 +87,15 @@ def getLogger(name: str) -> PatchedLogger:
85
87
# We enforce keyword-arguments because
86
88
# - it brings in consistency
87
89
# - it makes structure logging effective, not just an available feature
88
- logger .debug = patched_log_method (logger .debug ) # type: ignore
89
- logger .info = patched_log_method (logger .info ) # type: ignore
90
- logger .warn = patched_log_method (logger .warn ) # type: ignore
91
- logger .warning = patched_log_method (logger .warning ) # type: ignore
92
- logger .error = patched_log_method (logger .error ) # type: ignore
93
- logger .critical = patched_log_method (logger .critical ) # type: ignore
94
- logger .exception = patched_log_method (logger .exception ) # type: ignore
95
- logger .fatal = patched_log_method (logger .fatal ) # type: ignore
96
- logger .log = patched_log_with_level_method (logger .log ) # type: ignore
90
+ logger .debug = patch_log_method_to_kwargs_only (logger .debug ) # type: ignore
91
+ logger .info = patch_log_method_to_kwargs_only (logger .info ) # type: ignore
92
+ logger .warn = patch_log_method_to_kwargs_only (logger .warn ) # type: ignore
93
+ logger .warning = patch_log_method_to_kwargs_only (logger .warning ) # type: ignore
94
+ logger .error = patch_log_method_to_kwargs_only (logger .error ) # type: ignore
95
+ logger .critical = patch_log_method_to_kwargs_only (logger .critical ) # type: ignore
96
+ logger .exception = patch_log_method_to_kwargs_only (logger .exception ) # type: ignore
97
+ logger .fatal = patch_log_method_to_kwargs_only (logger .fatal ) # type: ignore
98
+ logger .log = patch_log_with_level_method_to_kwargs_only (logger .log ) # type: ignore
97
99
98
100
logger .makeRecord = patch_make_records_to_use_kwarg_string_interpolation (logger .makeRecord ) # type: ignore
99
101
0 commit comments