§
    y›j  ã                  óz   — d dl mZ d dlZd dlmZ d dlmZ d dlm	Z	m
Z
mZmZ d dlmZmZ dZ G d„ d	e¦  «        ZdS )
é    )ÚannotationsN)ÚMapping)ÚAny)ÚResolvedVariableÚVariableAlreadyExistsErrorÚVariableNotFoundErrorÚVariableProvider)ÚVariableConfigÚVariablesConfig)ÚLocalVariableProviderc                  óP   — e Zd ZdZdd„Z	 	 ddd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dS ) r   z´Variable provider that resolves values from a local in-memory configuration.

    This provider stores a mutable `VariablesConfig` and supports both read and write operations.
    Úconfigr   c                óD   — || _         t          j        ¦   «         | _        dS )z™Create a new local variable provider.

        Args:
            config: A VariablesConfig instance to use for variable resolution and mutation.
        N)Ú_configÚ	threadingÚLockÚ_lock©Úselfr   s     úT/home/lighthouse/health/venv/lib/python3.11/site-packages/logfire/variables/local.pyÚ__init__zLocalVariableProvider.__init__   s   € ð ˆŒÝ”^Ñ%Ô%ˆŒ
ˆ
ˆ
ó    NÚvariable_nameÚstrÚtargeting_keyú
str | NoneÚ
attributesúMapping[str, Any] | NoneÚreturnúResolvedVariable[str | None]c                ó|   — | j         5  | j                             |||¦  «        cddd¦  «         S # 1 swxY w Y   dS )aD  Resolve a variable's serialized value from the local configuration.

        Args:
            variable_name: The name of the variable to resolve.
            targeting_key: Optional key for deterministic label selection (e.g., user ID).
                If not provided and there is an active trace, its trace ID is used to ensure
                the same value is used across a trace.
            attributes: Optional attributes for condition-based targeting rules.

        Returns:
            A ResolvedVariable containing the serialized value (or None if not found).
        N)r   r   Úresolve_serialized_value)r   r   r   r   s       r   Úget_serialized_valuez*LocalVariableProvider.get_serialized_value!   sœ   € ð$ ŒZð 	cð 	cØ”<×8Ò8¸ÈÐWaÑbÔbð	cð 	cð 	cð 	cñ 	cô 	cð 	cð 	cð 	cð 	cð 	cð 	cøøøð 	cð 	cð 	cð 	cð 	cð 	cs   ˆ1±5¸5ÚnameúVariableConfig | Nonec                óx   — | j         5  | j                             |¦  «        cddd¦  «         S # 1 swxY w Y   dS )ao  Retrieve the full configuration for a variable.

        This method supports alias-based lookup, so you can pass either the
        variable's current name or any of its configured aliases.

        Args:
            name: The name (or alias) of the variable.

        Returns:
            The VariableConfig if found, or None if the variable doesn't exist.
        N)r   r   Ú_get_variable_config©r   r$   s     r   Úget_variable_configz)LocalVariableProvider.get_variable_config6   sƒ   € ð ŒZð 	;ð 	;Ø”<×4Ò4°TÑ:Ô:ð	;ð 	;ð 	;ð 	;ñ 	;ô 	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;øøøð 	;ð 	;ð 	;ð 	;ð 	;ð 	;s   ˆ/¯3¶3c                ó   — | j         S )z†Retrieve all variable configurations.

        Returns:
            A VariablesConfig containing all variable configurations.
        )r   )r   s    r   Úget_all_variables_configz.LocalVariableProvider.get_all_variables_configE   s   € ð Œ|Ðr   r
   c                óô   — | j         5  |j        | j        j        v rt	          d|j        › d�¦  «        ‚|| j        j        |j        <   | j                             ¦   «          ddd¦  «         n# 1 swxY w Y   |S )a  Create a new variable configuration.

        Args:
            config: The configuration for the new variable.

        Returns:
            The created VariableConfig.

        Raises:
            VariableAlreadyExistsError: If a variable with this name already exists.
        ú
Variable 'z' already existsN)r   r$   r   Ú	variablesr   Ú_invalidate_alias_mapr   s     r   Úcreate_variablez%LocalVariableProvider.create_variableM   s»   € ð ŒZð 	1ð 	1ØŒ{˜dœlÔ4Ð4Ð4Ý0Ð1[¸f¼kÐ1[Ð1[Ð1[Ñ\Ô\Ð\Ø28ˆDŒLÔ" 6¤;Ñ/ØŒL×.Ò.Ñ0Ô0Ð0ð		1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1ð
 ˆs   ˆAA-Á-A1Á4A1c                óÖ   — | j         5  || j        j        vrt          d|› d�¦  «        ‚|| j        j        |<   | j                             ¦   «          ddd¦  «         n# 1 swxY w Y   |S )aB  Update an existing variable configuration.

        Args:
            name: The name of the variable to update.
            config: The new configuration for the variable.

        Returns:
            The updated VariableConfig.

        Raises:
            VariableNotFoundError: If the variable does not exist.
        r-   ú' not foundN©r   r   r.   r   r/   )r   r$   r   s      r   Úupdate_variablez%LocalVariableProvider.update_variable`   sµ   € ð ŒZð 	1ð 	1Ø˜4œ<Ô1Ð1Ð1Ý+Ð,J¸Ð,JÐ,JÐ,JÑKÔKÐKØ+1ˆDŒLÔ" 4Ñ(ØŒL×.Ò.Ñ0Ô0Ð0ð		1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1ð
 ˆs   ˆA
AÁA"Á%A"ÚNonec                óÔ   — | j         5  || j        j        vrt          d|› d�¦  «        ‚| j        j        |= | j                             ¦   «          ddd¦  «         dS # 1 swxY w Y   dS )zÂDelete a variable configuration.

        Args:
            name: The name of the variable to delete.

        Raises:
            VariableNotFoundError: If the variable does not exist.
        r-   r2   Nr3   r(   s     r   Údelete_variablez%LocalVariableProvider.delete_variablet   s»   € ð ŒZð 	1ð 	1Ø˜4œ<Ô1Ð1Ð1Ý+Ð,J¸Ð,JÐ,JÐ,JÑKÔKÐKØ”Ô& tÐ,ØŒL×.Ò.Ñ0Ô0Ð0ð		1ð 	1ð 	1ñ 	1ô 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1ð 	1øøøð 	1ð 	1ð 	1ð 	1ð 	1ð 	1s   ˆAAÁA!Á$A!)r   r   )NN)r   r   r   r   r   r   r   r    )r$   r   r   r%   )r   r   )r   r
   r   r
   )r$   r   r   r
   r   r
   )r$   r   r   r5   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r#   r)   r+   r0   r4   r7   © r   r   r   r      s¼   € € € € € ðð ð
&ð &ð &ð &ð %)Ø/3ð	cð cð cð cð cð*;ð ;ð ;ð ;ðð ð ð ðð ð ð ð&ð ð ð ð(1ð 1ð 1ð 1ð 1ð 1r   r   )Ú
__future__r   Ú_annotationsr   Úcollections.abcr   Útypingr   Úlogfire.variables.abstractr   r   r   r	   Úlogfire.variables.configr
   r   Ú__all__r   r<   r   r   ú<module>rD      sâ   ðØ 2Ð 2Ð 2Ð 2Ð 2Ð 2à Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð EÐ DÐ DÐ DÐ DÐ DÐ DÐ Dà
$€ðo1ð o1ð o1ð o1ð o1Ð,ñ o1ô o1ð o1ð o1ð o1r   