o
    3Ih                     @  s   d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlmZ d dlmZ eeZd'ddZe Zd(ddZd)d*ddZ	d)d+ddZd,ddZd-ddZd.d"d#Zed$Zed%Zg d&ZdS )/    )annotationsN)Token)environ)uuid4)Context_RuntimeContext)OTEL_PYTHON_CONTEXT)entry_pointsreturnr   c               	   C  sh   d} t t| }ztttd|d  W S  ty3   t	d||  tttd| d   Y S w )zWInitialize the RuntimeContext

    Returns:
        An instance of RuntimeContext.
    contextvars_contextopentelemetry_context)groupnamez*Failed to load context: %s, fallback to %s)
r   getr   nextiterr	   load	Exceptionlogger	exception)default_contextconfigured_context r   ^/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/opentelemetry/context/__init__.py_load_runtime_context   s<   
r   keynamestrc                 C  s   | d t t  S )ae  To allow cross-cutting concern to control access to their local state,
    the RuntimeContext API provides a function which takes a keyname as input,
    and returns a unique key.
    Args:
        keyname: The key name is for debugging purposes and is not required to be unique.
    Returns:
        A unique string representing the newly created key.
    -)r   r   )r   r   r   r   
create_keyI   s   	r   keycontexttyping.Optional[Context]'object'c                 C  s   |dur	| | S t  | S )av  To access the local state of a concern, the RuntimeContext API
    provides a function which takes a context and a key as input,
    and returns a value.

    Args:
        key: The key of the value to retrieve.
        context: The context from which to retrieve the value, if None, the current context is used.

    Returns:
        The value associated with the key.
    N)r   get_current)r   r    r   r   r   	get_valueU   s   r$   valuer   c                 C  s&   |du rt  }| }||| < t|S )a  To record the local state of a cross-cutting concern, the
    RuntimeContext API provides a function which takes a context, a
    key, and a value as input, and returns an updated context
    which contains the new value.

    Args:
        key: The key of the entry to set.
        value: The value of the entry to set.
        context: The context to copy, if None, the current context is used.

    Returns:
        A new `Context` containing the value set.
    N)r#   copyr   )r   r%   r    
new_valuesr   r   r   	set_valued   s
   r(   c                   C  s   t  S )zTo access the context associated with program execution,
    the Context API provides a function which takes no arguments
    and returns a Context.

    Returns:
        The current `Context` object.
    )_RUNTIME_CONTEXTr#   r   r   r   r   r#   {   s   r#   Token[Context]c                 C  s
   t | S )a  Associates a Context with the caller's current execution unit. Returns
    a token that can be used to restore the previous Context.

    Args:
        context: The Context to set as current.

    Returns:
        A token that can be used with `detach` to reset the context.
    )r)   attach)r    r   r   r   r+      s   

r+   tokenNonec                 C  s0   zt |  W dS  ty   td Y dS w )zResets the Context associated with the caller's current execution unit
    to the value it had before attaching a specified Context.

    Args:
        token: The Token that was returned by a previous call to attach a Context.
    zFailed to detach contextN)r)   detachr   r   r   )r,   r   r   r   r.      s
   r.   suppress_instrumentationsuppress_http_instrumentation)r   r+   r   r.   r#   r$   r(   )r
   r   )r   r   r
   r   )N)r   r   r    r!   r
   r"   )r   r   r%   r"   r    r!   r
   r   )r
   r   )r    r   r
   r*   )r,   r*   r
   r-   )
__future__r   loggingtypingcontextvarsr   osr   uuidr   opentelemetry.context.contextr   r   #opentelemetry.environment_variablesr   &opentelemetry.util._importlib_metadatar	   	getLogger__name__r   r   r)   r   r$   r(   r#   r+   r.   _SUPPRESS_INSTRUMENTATION_KEY"_SUPPRESS_HTTP_INSTRUMENTATION_KEY__all__r   r   r   r   <module>   s0   

'



