@@ -239,6 +239,7 @@ def response_hook(span: Span, status: str, response_headers: List):
239
239
---
240
240
"""
241
241
from logging import getLogger
242
+ from packaging import version as package_version
242
243
from time import time_ns
243
244
from timeit import default_timer
244
245
from typing import Collection
@@ -269,6 +270,13 @@ def response_hook(span: Span, status: str, response_headers: List):
269
270
270
271
_excluded_urls_from_env = get_excluded_urls ("FLASK" )
271
272
273
+ if package_version .parse (flask .__version__ ) >= package_version .parse ("2.2.0" ):
274
+ def _request_ctx_id () -> int :
275
+ # return id(flask.globals.request_ctx)
276
+ return id (flask .globals .request_ctx ._get_current_object ())
277
+ else :
278
+ def _request_ctx_id () -> int :
279
+ return id (flask ._request_ctx_stack .top )
272
280
273
281
def get_default_span_name ():
274
282
try :
@@ -398,7 +406,7 @@ def _before_request():
398
406
activation = trace .use_span (span , end_on_exit = True )
399
407
activation .__enter__ () # pylint: disable=E1101
400
408
flask_request_environ [_ENVIRON_ACTIVATION_KEY ] = activation
401
- flask_request_environ [_ENVIRON_REQCTX_ID_KEY ] = id ( flask . _request_ctx_stack . top )
409
+ flask_request_environ [_ENVIRON_REQCTX_ID_KEY ] = _request_ctx_id ( )
402
410
flask_request_environ [_ENVIRON_SPAN_KEY ] = span
403
411
flask_request_environ [_ENVIRON_TOKEN ] = token
404
412
@@ -440,7 +448,7 @@ def _teardown_request(exc):
440
448
activation = flask .request .environ .get (_ENVIRON_ACTIVATION_KEY )
441
449
442
450
original_reqctx_id = flask .request .environ .get (_ENVIRON_REQCTX_ID_KEY )
443
- current_reqctx_id = id ( flask . _request_ctx_stack . top )
451
+ current_reqctx_id = _request_ctx_id ( )
444
452
if not activation or original_reqctx_id != current_reqctx_id :
445
453
# This request didn't start a span, maybe because it was created in
446
454
# a way that doesn't run `before_request`, like when it is created
0 commit comments