ó
    Ð]j\  ã                  óÈ   • S r SSKJr  SSKrSSKJr  SSKJr  SSKJ	r	  SSK
Jr  SS	K
Jr  SS
KJrJr  SS jrSS jr\	 " S S5      5       r0 4SS jjr\SS j5       rSS jrg)z5
Internal utilities to manipulate connection strings
é    )ÚannotationsN)Ú	lru_cache)Ú
ip_address)Ú	dataclassé   )Úerrors)Úpq)ÚConnDictÚConnMappingc                ó   ^ • SU 4S jjnU" S5      nU" S5      nU" S5      nU(       aN  U(       aG  [        U5      [        U5      :w  a/  [        R                  " S[        U5       S[        U5       S35      e[        [        U5      [        U5      5      nS[        U5      s=:  a  U:w  a2  O  O/[        R                  " S[        U5       S	[        U5       S
35      eUS::  a  0 T E/$ [        U5      S:X  a  XE-  n/ n[	        U5       HB  n0 T EnU(       a  X'   US'   U(       a  X7   US'   U(       a  XG   US'   UR                  U5        MD     U$ )zN
Split connection parameters with a sequence of hosts into separate attempts.
c                óP   >• [        TU 5      nU(       a  UR                  S5      $ / $ )NÚ,)Ú	get_paramÚsplit)ÚkeyÚvalÚparamss     €ÚT/home/mande/repo/quber/.venv/lib/python3.13/site-packages/psycopg/_conninfo_utils.pyÚ	split_valÚ!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*      sI  ø€ ÷
-ñ �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�*ˆÞØ#™hˆG�F‰OÞØ"+¡,ˆG�JÑÞØ#™hˆG�F‰OØ
�	‰	�'Öñ ð €Ir   c                óª   • X;   a  [        X   5      $ [        U5      =n(       d  g[        R                  R	                  UR
                  5      =nb  U$ g)z]
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   sO   € ð ƒ~Ü�6‘<Ó Ð ô & dÓ+Ð+ˆHÕ+Øä�z‰z�~‰~˜hŸo™oÓ.Ð.ˆÑ;Øˆ
àr   c                  ó8   • \ rS rSr% SrS\S'   S\S'   S\S'   Srg	)
ÚParamDeféW   z?
Information about defaults and env vars for connection params
r   Úkeywordr0   ú
str | NoneÚcompiled© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__Ú__static_attributes__r:   r   r   r5   r5   W   s   ‡ ñð ƒLØƒKØÖr   r5   c                ó†  • U(       dª  [         R                  R                  5       nU H†  n[        UR                  R                  5       UR                  (       a  UR                  R                  5       OSUR                  b  UR                  R                  5       OSS9nXAUR                  '   Mˆ     UR                  U 5      $ )z7
Return the ParamDef of a connection string parameter.
Ú N)r7   r0   r9   )	r	   ÚConninfoÚget_defaultsr5   r7   Údecoder0   r9   r/   )r7   Ú_cacheÚdefsÚdÚcds        r   r,   r,   b   s�   € ö Ü�{‰{×'Ñ'Ó)ˆÛˆAÜØŸ	™	×(Ñ(Ó*Ø,-¯H¯H�q—x‘x—‘Ô(¸"Ø01·
±
Ñ0F˜Ÿ™×*Ñ*Ô,ÈDñˆBð
 "$�2—:‘:Óñ ð �:‰:�gÓÐr   c                ó<   •  [        U 5        g! [         a     gf = f)z7Return True if the string represent a valid ip address.FT)r   Ú
ValueError)Úss    r   Úis_ip_addressrN   s   s'   € ðÜ�1Œð øô ó Ùðús   ‚ Ž
šc                ó,   • [        [        U S5      5      $ )z7Return `true` if `gssencmode` was specified explicitly.Ú
gssencmode)Úboolr   )r   s    r   Úgssapi_requestedrR   }   s   € ä”	˜& ,Ó/Ó0Ð0r   )r   r   r   zlist[ConnDict])r   r   r1   r   r   r8   )r7   r   rG   zdict[str, ParamDef]r   zParamDef | None)rM   r   r   rQ   )r   r
   r   rQ   )r?   Ú
__future__r   r-   Ú	functoolsr   Ú	ipaddressr   Údataclassesr   rC   r   r   r	   Úabcr
   r   r*   r   r5   r,   rN   rR   r:   r   r   Ú<module>rX      sl   ðñõ #ã 	Ý Ý  Ý !å Ý ß &ô-ô`ð( ÷ð ó ðð ?Aö ð" óó ðõ1r   