39
39
"""
40
40
# pylint: disable=no-value-for-parameter
41
41
42
+ from __future__ import annotations
43
+
42
44
import logging
43
- from typing import Collection
45
+ from types import CodeType
46
+ from typing import Any , Callable , Collection , TypeVar
44
47
45
48
import jinja2
49
+ from jinja2 .environment import Template
46
50
from wrapt import wrap_function_wrapper as _wrap
47
51
48
52
from opentelemetry .instrumentation .instrumentor import BaseInstrumentor
49
53
from opentelemetry .instrumentation .jinja2 .package import _instruments
50
54
from opentelemetry .instrumentation .jinja2 .version import __version__
51
55
from opentelemetry .instrumentation .utils import unwrap
52
- from opentelemetry .trace import SpanKind , get_tracer
56
+ from opentelemetry .trace import SpanKind , Tracer , get_tracer
53
57
54
58
logger = logging .getLogger (__name__ )
55
59
56
60
ATTRIBUTE_JINJA2_TEMPLATE_NAME = "jinja2.template_name"
57
61
ATTRIBUTE_JINJA2_TEMPLATE_PATH = "jinja2.template_path"
58
62
DEFAULT_TEMPLATE_NAME = "<memory>"
59
63
64
+ R = TypeVar ("R" )
65
+
60
66
61
- def _with_tracer_wrapper (func ):
67
+ def _with_tracer_wrapper (
68
+ func : Callable [
69
+ [Tracer , Callable [..., R ], Any , list [Any ], dict [str , Any ]], R
70
+ ],
71
+ ) -> Callable [
72
+ [Tracer ], Callable [[Callable [..., R ], Any , list [Any ], dict [str , Any ]], R ]
73
+ ]:
62
74
"""Helper for providing tracer for wrapper functions."""
63
75
64
- def _with_tracer (tracer ):
65
- def wrapper (wrapped , instance , args , kwargs ):
76
+ def _with_tracer (
77
+ tracer : Tracer ,
78
+ ) -> Callable [[Callable [..., R ], Any , list [Any ], dict [str , Any ]], R ]:
79
+ def wrapper (
80
+ wrapped : Callable [..., R ],
81
+ instance : Any ,
82
+ args : list [Any ],
83
+ kwargs : dict [str , Any ],
84
+ ) -> R :
66
85
return func (tracer , wrapped , instance , args , kwargs )
67
86
68
87
return wrapper
@@ -71,7 +90,13 @@ def wrapper(wrapped, instance, args, kwargs):
71
90
72
91
73
92
@_with_tracer_wrapper
74
- def _wrap_render (tracer , wrapped , instance , args , kwargs ):
93
+ def _wrap_render (
94
+ tracer : Tracer ,
95
+ wrapped : Callable [..., Any ],
96
+ instance : Template ,
97
+ args : list [Any ],
98
+ kwargs : dict [str , Any ],
99
+ ):
75
100
"""Wrap `Template.render()` or `Template.generate()`"""
76
101
with tracer .start_as_current_span (
77
102
"jinja2.render" ,
@@ -84,7 +109,13 @@ def _wrap_render(tracer, wrapped, instance, args, kwargs):
84
109
85
110
86
111
@_with_tracer_wrapper
87
- def _wrap_compile (tracer , wrapped , _ , args , kwargs ):
112
+ def _wrap_compile (
113
+ tracer : Tracer ,
114
+ wrapped : Callable [..., CodeType ],
115
+ _ ,
116
+ args : list [Any ],
117
+ kwargs : dict [str , Any ],
118
+ ) -> CodeType :
88
119
with tracer .start_as_current_span (
89
120
"jinja2.compile" ,
90
121
kind = SpanKind .INTERNAL ,
@@ -100,7 +131,13 @@ def _wrap_compile(tracer, wrapped, _, args, kwargs):
100
131
101
132
102
133
@_with_tracer_wrapper
103
- def _wrap_load_template (tracer , wrapped , _ , args , kwargs ):
134
+ def _wrap_load_template (
135
+ tracer : Tracer ,
136
+ wrapped : Callable [..., Template ],
137
+ _ ,
138
+ args : list [Any ],
139
+ kwargs : dict [str , Any ],
140
+ ) -> Template :
104
141
with tracer .start_as_current_span (
105
142
"jinja2.load" ,
106
143
kind = SpanKind .INTERNAL ,
@@ -128,7 +165,7 @@ class Jinja2Instrumentor(BaseInstrumentor):
128
165
def instrumentation_dependencies (self ) -> Collection [str ]:
129
166
return _instruments
130
167
131
- def _instrument (self , ** kwargs ):
168
+ def _instrument (self , ** kwargs : Any ):
132
169
tracer_provider = kwargs .get ("tracer_provider" )
133
170
tracer = get_tracer (
134
171
__name__ ,
@@ -146,7 +183,7 @@ def _instrument(self, **kwargs):
146
183
_wrap_load_template (tracer ),
147
184
)
148
185
149
- def _uninstrument (self , ** kwargs ):
186
+ def _uninstrument (self , ** kwargs : Any ):
150
187
unwrap (jinja2 .Template , "render" )
151
188
unwrap (jinja2 .Template , "generate" )
152
189
unwrap (jinja2 .Environment , "compile" )
0 commit comments