@@ -74,6 +74,7 @@ def __call__(self, request):
74
74
else :
75
75
ASGIRequest = None
76
76
77
+ # try/except block exclusive for optional ASGI imports.
77
78
try :
78
79
from opentelemetry .instrumentation .asgi import asgi_getter
79
80
from opentelemetry .instrumentation .asgi import (
@@ -166,7 +167,7 @@ def process_request(self, request):
166
167
return
167
168
168
169
is_asgi_request = _is_asgi_request (request )
169
- if is_asgi_request and not _is_asgi_supported :
170
+ if not _is_asgi_supported and is_asgi_request :
170
171
return
171
172
172
173
# pylint:disable=W0212
@@ -175,9 +176,11 @@ def process_request(self, request):
175
176
request_meta = request .META
176
177
177
178
if is_asgi_request :
179
+ carrier = request .scope
178
180
carrier_getter = asgi_getter
179
181
collect_request_attributes = asgi_collect_request_attributes
180
182
else :
183
+ carrier = request_meta
181
184
carrier_getter = wsgi_getter
182
185
collect_request_attributes = wsgi_collect_request_attributes
183
186
@@ -191,36 +194,25 @@ def process_request(self, request):
191
194
),
192
195
)
193
196
194
- if is_asgi_request :
195
- attributes = collect_request_attributes (request .scope )
196
- else :
197
- attributes = collect_request_attributes (request_meta )
197
+ attributes = collect_request_attributes (carrier )
198
198
199
199
if span .is_recording ():
200
+ attributes = extract_attributes_from_object (
201
+ request , self ._traced_request_attrs , attributes
202
+ )
200
203
if is_asgi_request :
201
- # ASGI requests include extra attributes in request.scope.headers. For this reason,
202
- # we need to build an object with the union of `request` and `request.scope.headers`
203
- # contents, for the extract_attributes_from_object function to be able to retrieve
204
- # attributes from it.
204
+ # ASGI requests include extra attributes in request.scope.headers.
205
205
attributes = extract_attributes_from_object (
206
206
types .SimpleNamespace (
207
207
** {
208
- ** request .__dict__ ,
209
- ** {
210
- name .decode ("latin1" ): value .decode ("latin1" )
211
- for name , value in request .scope .get (
212
- "headers" , []
213
- )
214
- },
208
+ name .decode ("latin1" ): value .decode ("latin1" )
209
+ for name , value in request .scope .get ("headers" , [])
215
210
}
216
211
),
217
212
self ._traced_request_attrs ,
218
213
attributes ,
219
214
)
220
- else :
221
- attributes = extract_attributes_from_object (
222
- request , self ._traced_request_attrs , attributes
223
- )
215
+
224
216
for key , value in attributes .items ():
225
217
span .set_attribute (key , value )
226
218
@@ -268,7 +260,7 @@ def process_response(self, request, response):
268
260
return response
269
261
270
262
is_asgi_request = _is_asgi_request (request )
271
- if is_asgi_request and not _is_asgi_supported :
263
+ if not _is_asgi_supported and is_asgi_request :
272
264
return response
273
265
274
266
activation = request .META .pop (self ._environ_activation_key , None )
0 commit comments