
    ,h\                        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     R/var/www/html/Ai_home/venv/lib/python3.13/site-packages/psycopg/_conninfo_utils.py	split_val!split_attempts.<locals>.split_val   s$    $!$syy~,",    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s5zS^;  s5zl +^$$46
 	

 US^,F3u:  s5zl*;CJ<vN
 	

 {6
|
5zQ 
B6]V*#hGFO"+,GJ#hGFO
		'  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+zz~~hoo..;
r   c                  8    \ rS rSr% SrS\S'   S\S'   S\S'   Srg	)
ParamDefW   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		((*,-HHqxx("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   