§
    YŠtj\  ã                  óÐ   — d 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	 ddl
mZ dd	l
mZ dd
lmZmZ d d„Zd!d„Ze	 G d„ d¦  «        ¦   «         Zi fd"d„Zed#d„¦   «         Zd$d„ZdS )%z5
Internal utilities to manipulate connection strings
é    )ÚannotationsN)Ú	lru_cache)Ú
ip_address)Ú	dataclassé   )Úerrors)Úpq)ÚConnDictÚConnMappingÚparamsr   Úreturnúlist[ConnDict]c                óî  ‡ — dˆ fd„} |d¦  «        } |d¦  «        } |d¦  «        }|rW|rUt          |¦  «        t          |¦  «        k    r5t          j        d	t          |¦  «        › d
t          |¦  «        › d�¦  «        ‚t          t          |¦  «        t          |¦  «        ¦  «        }dt          |¦  «        cxk     r|k    r8n n5t          j        d	t          |¦  «        › dt          |¦  «        › d�¦  «        ‚|dk    ri ‰ ¥gS t          |¦  «        dk    r||z  }g }t	          |¦  «        D ]B}i ‰ ¥}|r||         |d<   |r||         |d<   |r||         |d<   |                     |¦  «         ŒC|S )zV
    Split connection parameters with a sequence of hosts into separate attempts.
    ÚkeyÚstrr   ú	list[str]c                óV   •— t          ‰| ¦  «        }|r|                     d¦  «        ng S )Nú,)Ú	get_paramÚsplit)r   Úvalr   s     €úU/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/psycopg/_conninfo_utils.pyÚ	split_valz!split_attempts.<locals>.split_val   s+   ø€ Ý˜ Ñ$Ô$ˆØ!$Ð,ˆs�yŠy˜‰~Œ~ˆ~¨"Ð,ó    ÚhostÚhostaddrÚportzcould not match z host names with z hostaddr valuesr   z port numbers to z hosts)r   r   r   r   )ÚlenÚeÚOperationalErrorÚmaxÚrangeÚappend)	r   r   ÚhostsÚ	hostaddrsÚportsÚnhostsÚrvÚiÚattempts	   `        r   Úsplit_attemptsr+      sã  ø€ ð
-ð -ð -ð -ð -ð -ð ˆI�fÑÔ€EØ�	˜*Ñ%Ô%€IØˆI�fÑÔ€Eàð 
�ð 
�s 5™zœz­S°©^¬^Ò;Ð;ÝÔ ð6�s 5™zœzð 6ð 6Ý˜‘^”^ð6ð 6ð 6ñ
ô 
ð 	
õ
 •�U‘”�S ™^œ^Ñ,Ô,€Fà�3ˆu‰:Œ:ÐÐÒÐ˜ÒÐÐÐÐÝÔ ØN�s 5™zœzÐNÐN½CÀ¹J¼JÐNÐNÐNñ
ô 
ð 	
ð
 �‚{€{Ø�6�
ˆ|Ðå
ˆ5�z„z�Q‚€Ø�‰ˆð 
€BÝ�6‰]Œ]ð ð ˆØ�V�*ˆØð 	'Ø# AœhˆG�F‰OØð 	/Ø"+¨A¤,ˆG�JÑØð 	'Ø# AœhˆG�F‰OØ
�	Š	�'ÑÔÐÐà€Ir   Únamer   ú
str | Nonec                ó®   — || v rt          | |         ¦  «        S t          |¦  «        x}sdS t          j                             |j        ¦  «        x}�|S dS )zi
    Return a value from a connection string.

    The value may be also specified in a PG* env var.
    N)r   Úget_param_defÚosÚenvironÚgetÚenvvar)r   r,   ÚparamdefÚenvs       r   r   r   C   s`   € ð ˆv€~€~Ý�6˜$”<Ñ Ô Ð õ & dÑ+Ô+Ð+ˆHð ØˆtåŒz�~Š~˜hœoÑ.Ô.Ð.ˆÐ;Øˆ
àˆ4r   c                  ó2   — e Zd ZU dZded<   ded<   ded<   dS )ÚParamDefzG
    Information about defaults and env vars for connection params
    r   Úkeywordr3   r-   ÚcompiledN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© r   r   r7   r7   W   s<   € € € € € € ðð ð €L€L�LØ€K€K�KØÐÐÑÐÐr   r7   r8   Ú_cacheúdict[str, ParamDef]úParamDef | Nonec                ó\  — |s–t           j                             ¦   «         }|D ]u}t          |j                             ¦   «         |j        r|j                             ¦   «         nd|j        �|j                             ¦   «         nd¬¦  «        }|||j        <   Œv|                     | ¦  «        S )z?
    Return the ParamDef of a connection string parameter.
    Ú N)r8   r3   r9   )	r	   ÚConninfoÚget_defaultsr7   r8   Údecoder3   r9   r2   )r8   r@   ÚdefsÚdÚcds        r   r/   r/   b   s®   € ð ð $ÝŒ{×'Ò'Ñ)Ô)ˆØð 	$ð 	$ˆAÝØœ	×(Ò(Ñ*Ô*Ø,-¬HÐ<�q”x—’Ñ(Ô(Ð(¸"Ø01´
Ð0F˜œ×*Ò*Ñ,Ô,Ð,ÈDðñ ô ˆBð
 "$ˆF�2”:ÑÐà�:Š:�gÑÔÐr   ÚsÚboolc                óJ   — 	 t          | ¦  «         n# t          $ r Y dS w xY wdS )z7Return True if the string represent a valid ip address.FT)r   Ú
ValueError)rK   s    r   Úis_ip_addressrO   s   s;   € ðÝ�1‰ŒˆˆøÝð ð ð Øˆuˆuðøøøàˆ4s   ‚ ’
 Ÿ r
   c                ó<   — t          t          | d¦  «        ¦  «        S )z7Return `true` if `gssencmode` was specified explicitly.Ú
gssencmode)rL   r   )r   s    r   Úgssapi_requestedrR   }   s   € å•	˜& ,Ñ/Ô/Ñ0Ô0Ð0r   )r   r   r   r   )r   r   r,   r   r   r-   )r8   r   r@   rA   r   rB   )rK   r   r   rL   )r   r
   r   rL   )r=   Ú
__future__r   r0   Ú	functoolsr   Ú	ipaddressr   Údataclassesr   rD   r   r   r	   Úabcr
   r   r+   r   r7   r/   rO   rR   r?   r   r   ú<module>rX      sX  ððð ð #Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø !Ð !Ð !Ð !Ð !Ð !à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &ð-ð -ð -ð -ð`ð ð ð ð( ðð ð ð ð ñ ô ñ „ðð ?Að ð ð ð ð ð" ðð ð ñ „ðð1ð 1ð 1ð 1ð 1ð 1r   