mirror of
https://github.com/langgenius/dify.git
synced 2026-07-26 06:08:38 +08:00
22 lines
661 B
Python
22 lines
661 B
Python
"""Utilities for propagating OpenTelemetry context across execution boundaries."""
|
|
|
|
import functools
|
|
from collections.abc import Callable
|
|
|
|
from opentelemetry import context as otel_context
|
|
|
|
|
|
def propagate_context[**P, R](func: Callable[P, R]) -> Callable[P, R]:
|
|
"""Capture the current context and attach it whenever ``func`` executes."""
|
|
captured_context = otel_context.get_current()
|
|
|
|
@functools.wraps(func)
|
|
def wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
|
|
token = otel_context.attach(captured_context)
|
|
try:
|
|
return func(*args, **kwargs)
|
|
finally:
|
|
otel_context.detach(token)
|
|
|
|
return wrapper
|