o
    6	f                     @  s   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dZd&ddZeG dd dZi fd'dd Ze d(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           	        s&  d fdd}|d}|d}|d	}|r/|r/t |t |kr/td
t | dt | dtt |t |}dt |  k rD|krVn ntd
t | dt | d|dkr] gS t |dkrg||9 }g }t|D ]#}  }|r{|| |d< |r|| |d< |r|| |d	< || qm|S )zV
    Split connection parameters with a sequence of hosts into separate attempts.
    keystrr   	list[str]c                   s   t  | }|r|dS g S )N,)	get_paramsplit)r   valr    P/home/ertert/spirit/venv/lib/python3.10/site-packages/psycopg/_conninfo_utils.py	split_val   s   
z!split_attempts.<locals>.split_valhosthostaddrportzcould not match z host names with z hostaddr valuesr   z port numbers to z hostsN)r   r   r   r   )leneOperationalErrormaxrangecopyappend)	r   r   hosts	hostaddrsportsnhostsrviattemptr   r   r   split_attempts   s<   r+   namer   
str | Nonec                 C  sB   || v r
t | | S t|}|sdS tj|j}|dur|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envr   r   r   r   F   s   r   c                   @  s*   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   keywordr2   r-   compiledN)__name__
__module____qualname____doc____annotations__r   r   r   r   r5   \   s
   
 r5   r6   _cachedict[str, ParamDef]ParamDef | Nonec                 C  sd   |s-t j }|D ]#}t|j |jr|j nd|jdur#|j ndd}|||j< q	|| S )z?
    Return the ParamDef of a connection string parameter.
     N)r6   r2   r7   )	r	   Conninfoget_defaultsr5   r6   decoder2   r7   r1   )r6   r=   defsdcdr   r   r   r.   g   s   

r.   sboolc                 C  s$   zt |  W dS  ty   Y dS w )z7Return True if the string represent a valid ip address.FT)r   
ValueError)rG   r   r   r   is_ip_addressx   s   
rJ   )r   r   r   r   )r   r   r,   r   r   r-   )r6   r   r=   r>   r   r?   )rG   r   r   rH   )r;   
__future__r   r/   typingr   	functoolsr   	ipaddressr   dataclassesr   typing_extensionsr   r@   r	   r
   r   r   r<   r+   r   r5   r.   rJ   r   r   r   r   <module>   s$    

0
