Ë
    êëj\  ã                  ó¼   — 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y)z5
Internal utilities to manipulate connection strings
é    )ÚannotationsN)Ú	lru_cache)Ú
ip_address)Ú	dataclassé   )Úerrors)Úpq)ÚConnDictÚConnMappingc                ó`  ‡ — dˆ fd„} |d«      } |d«      } |d«      }|rG|rEt        |«      t        |«      k7  r.t        j                  dt        |«      › dt        |«      › d�«      ‚t        t        |«      t        |«      «      }dt        |«      cxk  r|k7  r1n n.t        j                  dt        |«      › d	t        |«      › d
�«      ‚|dk  ri ‰ ¥gS t        |«      dk(  r||z  }g }t	        |«      D ]5  }i ‰ ¥}|r||   |d<   |r||   |d<   |r||   |d<   |j                  |«       Œ7 |S )zV
    Split connection parameters with a sequence of hosts into separate attempts.
    c                óF   •— t        ‰| «      }|r|j                  d«      S g S )NÚ,)Ú	get_paramÚsplit)ÚkeyÚvalÚparamss     €ú^/var/www/html/kelly/kelly-backend/venv/lib/python3.12/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   ÚstrÚreturnz	list[str])ÚlenÚeÚOperationalErrorÚmaxÚrangeÚappend)	r   r   ÚhostsÚ	hostaddrsÚportsÚnhostsÚrvÚiÚattempts	   `        r   Úsplit_attemptsr)      sQ  ø€ õ
-ñ �fÓ€EÙ˜*Ó%€IÙ�fÓ€Eá‘œs 5›z¬S°«^Ò;Ü× Ñ Øœs 5›z˜lð +Ü˜“^Ð$Ð$4ð6ó
ð 	
ô
 ”�U“œS ›^Ó,€FàŒ3ˆu‹:Ô˜ÕÜ× Ñ Øœs 5›z˜lÐ*;¼CÀ»J¸<ÀvÐNó
ð 	
ð
 �‚{Ø�6�
ˆ|Ðä
ˆ5ƒz�Q‚Ø�‰ˆð 
€BÜ�6Ž]ˆØ�V�*ˆÙØ# A™hˆG�F‰OÙØ"+¨A¡,ˆG�JÑÙØ# A™hˆG�F‰OØ
�	‰	�'Õð ð €Ir   c                óž   — || v rt        | |   «      S t        |«      x}syt        j                  j	                  |j
                  «      x}�|S y)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   ÚnameÚparamdefÚenvs       r   r   r   C   sS   € ð ˆv�~Ü�6˜$‘<Ó Ð ô & dÓ+Ð+ˆHÐ+Øä�z‰z�~‰~˜hŸo™oÓ.Ð.ˆÐ;Øˆ
àr   c                  ó0   — e Zd ZU dZded<   ded<   ded<   y)ÚParamDefzG
    Information about defaults and env vars for connection params
    r   Úkeywordr/   ú
str | NoneÚcompiledN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© r   r   r4   r4   W   s   … ñð ƒLØƒKØÔr   r4   c                ót  — |s¦t         j                  j                  «       }|D ]ƒ  }t        |j                  j                  «       |j                  r|j                  j                  «       nd|j                  �|j                  j                  «       nd¬«      }|||j                  <   Œ… |j                  | «      S )z?
    Return the ParamDef of a connection string parameter.
    Ú N)r5   r/   r7   )	r	   ÚConninfoÚget_defaultsr4   r5   Údecoder/   r7   r.   )r5   Ú_cacheÚdefsÚdÚcds        r   r+   r+   b   s�   € ñ Ü�{‰{×'Ñ'Ó)ˆÛˆAÜØŸ	™	×(Ñ(Ó*Ø,-¯HªH�q—x‘x—‘Ô(¸"Ø01·
±
Ð0F˜Ÿ™×*Ñ*Ô,ÈDôˆBð
 "$ˆF�2—:‘:Òð ð �:‰:�gÓÐr   c                ó:   — 	 t        | «       y# t        $ r Y yw xY w)z7Return True if the string represent a valid ip address.FT)r   Ú
ValueError)Úss    r   Úis_ip_addressrJ   s   s'   € ðÜ�1Œð øô ò Ùðús   ‚ Ž	™c                ó,   — t        t        | d«      «      S )z7Return `true` if `gssencmode` was specified explicitly.Ú
gssencmode)Úboolr   )r   s    r   Úgssapi_requestedrN   }   s   € ä”	˜& ,Ó/Ó0Ð0r   )r   r   r   zlist[ConnDict])r   r   r0   r   r   r6   )r5   r   rC   zdict[str, ParamDef]r   zParamDef | None)rI   r   r   rM   )r   r
   r   rM   )r;   Ú
__future__r   r,   Ú	functoolsr   Ú	ipaddressr   Údataclassesr   r?   r   r   r	   Úabcr
   r   r)   r   r4   r+   rJ   rN   r=   r   r   Ú<module>rT      sl   ðñõ #ã 	Ý Ý  Ý !å Ý ß &ó-ó`ð( ÷ð ó ðð ?Aô ð" òó ðô1r   