
    i\                        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     w/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/venv/lib/python3.12/site-packages/psycopg/_conninfo_utils.py	split_valz!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)      sV   
- fE*%IfEs5zS^;  s5zl +^$$46
 	

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

 {6
|
5zQ 
B6] V*#AhGFO"+A,GJ#AhGFO
		' 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+zz~~hoo..;
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   |st         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		((*,-HHqxx("01

0F**,DB
 "$F2::	$ ::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   