
    *Jf                        U 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 d	dlmZ dZded<   d!dZd"dZe G d d                      Zi fd#dZ e            d$d             ZdS )%z5
Internal utilities to manipulate connection strings
    )annotationsN)Any)	lru_cache)
ip_address)	dataclass)	TypeAlias   )pq)errorszdict[str, Any]r   ConnDictparams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 gS t          |          dk    r||z  }g }t	          |          D ]R}                                 }|r||         |d<   |r||         |d<   |r||         |d<   |                    |           S|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     Z/home/alex/cs2snipeproduction/venv/lib/python3.11/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   r   r   r   )leneOperationalErrormaxrangecopyappend)	r   r   hosts	hostaddrsportsnhostsrviattempts	   `        r   split_attemptsr-      s   
- - - - - - IfE	*%%IIfE 
 
s5zzS^^;; 6s5zz 6 6^^6 6 6
 
 	

 US^^,,F3u:: Ns5zzNNCJJNNN
 
 	

 {{x
5zzQ 
B6]]  ++-- 	'#AhGFO 	/"+A,GJ 	'#AhGFO
		'Ir   namer   
str | Nonec                    || v rt          | |                   S t          |          }|sdS t          j                            |j                  }||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   F   s_     v~~6$<    T""H t
*..
)
)C

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   keywordr5   r/   compiledN)__name__
__module____qualname____doc____annotations__ r   r   r9   r9   \   s<           LLLKKKr   r9   r:   _cachedict[str, ParamDef]ParamDef | Nonec                \   |st           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)r:   r5   r;   )	r
   Conninfoget_defaultsr9   r:   decoder5   r;   r4   )r:   rB   defsdcds        r   r1   r1   g   s      ${'')) 	$ 	$A	((**,-H<qx((("01
0F**,,,D  B
 "$F2:::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)rM   s    r   is_ip_addressrQ   x   s;    1   uu4s    
  )r   r   r   r   )r   r   r.   r   r   r/   )r:   r   rB   rC   r   rD   )rM   r   r   rN   )r?   
__future__r   r2   typingr   	functoolsr   	ipaddressr   dataclassesr   typing_extensionsr   rF   r
   r   r    r   r@   r-   r   r9   r1   rQ   rA   r   r   <module>rX      sl     # " " " " " 				                         ! ! ! ! ! ! ' ' ' ' ' '            & & & & &- - - -`   ,         ?A     "      r   