
    $g                        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mZ dd
l
mZ 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)	lru_cache)
ip_address)	dataclass   )pq)ConnDictConnMapping)errorsparamsr
   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i  gS t          |          dk    r||z  }g }t	          |          D ]B}i  }|r||         |d<   |r||         |d<   |r||         |d<   |                    |           C|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     W/var/www/html/netbox-4.1.3/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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
 
 	

 {{6
|
5zzQ 
B6]]  V* 	'#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   C   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   keywordr3   r-   compiledN)__name__
__module____qualname____doc____annotations__ r   r   r7   r7   Y   s<           LLLKKKr   r7   r8   _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)r8   r3   r9   )	r   Conninfoget_defaultsr7   r8   decoder3   r9   r2   )r8   r@   defsdcds        r   r/   r/   d   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)rK   s    r   is_ip_addressrO   u   s;    1   uu4s    
  )r   r
   r   r   )r   r
   r,   r   r   r-   )r8   r   r@   rA   r   rB   )rK   r   r   rL   )r=   
__future__r   r0   	functoolsr   	ipaddressr   dataclassesr   rD   r   abcr	   r
   r   r   r+   r   r7   r/   rO   r?   r   r   <module>rU      sD    # " " " " " 				                   ! ! ! ! ! !       & & & & & & & &      - - - -`   ,         ?A     "      r   