1
|
|
|
# -*- coding: utf-8 -*- |
2
|
|
|
|
3
|
1 |
|
from contextlib import contextmanager |
4
|
|
|
|
5
|
1 |
|
from .context import ( |
6
|
|
|
direct_injector, static_injector, auto_injector, hybrid_injector, |
7
|
|
|
) |
8
|
1 |
|
from .proxy import LoggerProxy |
9
|
|
|
|
10
|
|
|
|
11
|
1 |
|
@contextmanager |
12
|
|
|
def _get_proxy(logger, injector_context): |
13
|
|
|
with injector_context as injector: |
14
|
|
|
yield LoggerProxy(logger, injector) |
15
|
|
|
|
16
|
|
|
|
17
|
1 |
|
class IsotopicLogger(object): |
18
|
|
|
|
19
|
1 |
|
__slots__ = ['_original', ] |
20
|
|
|
|
21
|
1 |
|
def __init__(self, logger): |
22
|
|
|
self._original = logger |
23
|
|
|
|
24
|
1 |
|
def __getattr__(self, name): |
25
|
|
|
return getattr(self._original, name) |
26
|
|
|
|
27
|
1 |
|
def direct(self, *args, **kwargs): |
28
|
|
|
return self._get_proxy(direct_injector, *args, **kwargs) |
29
|
|
|
|
30
|
1 |
|
def static(self, *args, **kwargs): |
31
|
|
|
return self._get_proxy(static_injector, *args, **kwargs) |
32
|
|
|
|
33
|
1 |
|
def auto(self, *args, **kwargs): |
34
|
|
|
return self._get_proxy(auto_injector, *args, **kwargs) |
35
|
|
|
|
36
|
1 |
|
def hybrid(self, *args, **kwargs): |
37
|
|
|
return self._get_proxy(hybrid_injector, *args, **kwargs) |
38
|
|
|
|
39
|
1 |
|
def _get_proxy(self, context_factory, *args, **kwargs): |
40
|
|
|
context = context_factory(*args, **kwargs) |
41
|
|
|
return _get_proxy(self._original, context) |
42
|
|
|
|