o
    i(                     @   s   U d dl Z d dlmZmZmZmZmZmZ er+zd dlm	Z	 W n e
y*   eZ	Y nw eZ	G dd dZdaee ed< defdd	ZdS )
    N)TYPE_CHECKINGAnyCallableDictListOptional)Observationc                	   @   s   e Zd ZdZddeeeeg ee f  f fddZ	dedeg ee f ddfd	d
Z
dedeeg ee f  fddZdddZdefddZdS )ObservablesRegistryzG
    Global registry for storing callbacks for observable metrics.
    Nregistryc                 C   s   |pi | _ t | _d S N)	_registry	threadingLock_lock)selfr
    r   P/home/ubuntu/.local/lib/python3.10/site-packages/redis/observability/registry.py__init__   s   
zObservablesRegistry.__init__namecallbackreturnc                 C   s@   | j  | j|g | W d   dS 1 sw   Y  dS )z?
        Register a callback for an observable metric.
        N)r   r   
setdefaultappend)r   r   r   r   r   r   register   s   "zObservablesRegistry.registerc                 C   s8   | j  | j|g W  d   S 1 sw   Y  dS )z=
        Get all callbacks for an observable metric.
        N)r   r   get)r   r   r   r   r   r      s   $zObservablesRegistry.getc                 C   s6   | j  | j  W d   dS 1 sw   Y  dS )z%
        Clear the registry.
        N)r   r   clearr   r   r   r   r   &   s   "zObservablesRegistry.clearc                 C   s
   t | jS )z9
        Get the number of registered callbacks.
        )lenr   r   r   r   r   __len__-   s   
zObservablesRegistry.__len__r   )r   N)__name__
__module____qualname____doc__r   strr   r   r   r   r   r   r   intr   r   r   r   r   r	      s    (""
r	   _observables_registry_instancer   c                   C   s   t du r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)
    N)r%   r	   r   r   r   r   !get_observables_registry_instance8   s   r&   )r   typingr   r   r   r   r   r   opentelemetry.metricsr   ImportErrorr	   r%   __annotations__r&   r   r   r   r   <module>   s   
  &