
    Oǻi(                         U d dl Z d dlmZmZmZmZmZmZ er	 d dlm	Z	 neZ	 G d d      Zdaee   ed<   defdZy# e
$ r eZ	Y $w xY w)	    N)TYPE_CHECKINGAnyCallableDictListOptional)Observationc            	           e Zd ZdZddeeeeg ee   f      f   fdZ	dedeg ee   f   ddfdZ
dedeeg ee   f      fd	Zdd
ZdefdZy)ObservablesRegistryzG
    Global registry for storing callbacks for observable metrics.
    Nregistryc                 L    |xs i | _         t        j                         | _        y N)	_registry	threadingLock_lock)selfr   s     Z/opt/lhia/marcimex/agent/venv/lib/python3.12/site-packages/redis/observability/registry.py__init__zObservablesRegistry.__init__   s    !R^^%
    namecallbackreturnc                     | j                   5  | j                  j                  |g       j                  |       ddd       y# 1 sw Y   yxY w)z?
        Register a callback for an observable metric.
        N)r   r   
setdefaultappend)r   r   r   s      r   registerzObservablesRegistry.register   sC     ZZ 	ANN%%dB/66x@	A 	A 	As   ,AAc                 ~    | j                   5  | j                  j                  |g       cddd       S # 1 sw Y   yxY w)z=
        Get all callbacks for an observable metric.
        N)r   r   get)r   r   s     r   r   zObservablesRegistry.get   s4     ZZ 	0>>%%dB/	0 	0 	0s   3<c                 z    | j                   5  | j                  j                          ddd       y# 1 sw Y   yxY w)z%
        Clear the registry.
        N)r   r   clearr   s    r   r!   zObservablesRegistry.clear&   s0     ZZ 	#NN  "	# 	# 	#s   1:c                 ,    t        | j                        S )z9
        Get the number of registered callbacks.
        )lenr   r"   s    r   __len__zObservablesRegistry.__len__-   s     4>>""r   r   )r   N)__name__
__module____qualname____doc__r   strr   r   r   r   r   r   r!   intr%    r   r   r   r      s    &c4T#Y0G+H&H!I &AS AHRc],C A A0 0Xb$s)m%< = 0## #r   r   _observables_registry_instancer   c                  .    t         
t               a t         S )aJ  
    Get the global observables registry singleton instance.

    This is the Pythonic way to get the singleton instance.

    Returns:
        The global ObservablesRegistry singleton

    Example:
        >>>
        >>> registry = get_observables_registry_instance()
        >>> registry.register('my_metric', my_callback)
    )r-   r   r,   r   r   !get_observables_registry_instancer/   8   s      &-)<)>&))r   )r   typingr   r   r   r   r   r   opentelemetry.metricsr	   ImportErrorr   r-   __annotations__r/   r,   r   r   <module>r4      sf     E E 5 K"# "#L AE )< = D*+> *_  s   = AA