
    ۇeh;                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZddlmZ ddlmZ ddlmZ  G d dej                  Z G d d	ej                  Z ej        d
g d          Z ej        dg d          Z ej                     j!        Z"e"dk    rdZ#ndZ#dej$        dej%        ej&        e'df                  fdZ(dej)        ej$                 dej%        e'         dej%        e*         de'de'f
dZ+d Z,dddZ-d Z.dej)        ej$                 fdZ/d  Z0d! Z1 G d" d#e j2                  Z3dd$d%Z4d& Z5 G d' d(e6          Z7d) Z8 G d* d+e'ej9                  Z:d,e;fd-Z<d.e;fd/Z=d0 Z>e:j?        e>e:j@         e<d          e:jA         e<d1          e:jB         e<d1          e:jC         e=d          e:jD         e=d1          iZEd2e:fd3ZFd4 ZGd5efd6ZHd7 ZId8 ZJd9 ZKdS ):    N   )compat)
exceptions)protocolc                   <    e Zd ZdZdZdZdZdZdZe	d             Z
dS )	SSLModer   r               c                 n    t          ||           r|S t          | |                    dd                    S )N-_)
isinstancegetattrreplace)clssslmodes     G/var/www/api/venv/lib/python3.11/site-packages/asyncpg/connect_utils.pyparsezSSLMode.parse)   s7    gs## 	NsGOOC55666    N)__name__
__module____qualname__disableallowpreferrequire	verify_caverify_fullclassmethodr    r   r   r   r   !   sK        GEFGIK7 7 [7 7 7r   r   c                       e Zd ZdZdZdS )SSLNegotiationpostgresdirectN)r   r   r   r%   r&   r"   r   r   r$   r$   0   s        HFFFr   r$   ConnectionParameters
userpassworddatabasesslr   ssl_negotiationserver_settingstarget_session_attrs
krbsrvnamegsslibConnectionConfigurationcommand_timeoutstatement_cache_sizemax_cached_statement_lifetimemax_cacheable_statement_sizeWindowszpgpass.confz.pgpasspassfilereturn.c                    g }	 |                                  sg S |                                 s)t          j        d                    |                      g S t
          dk    r\|                                 j        t          j        t          j	        z  z  r)t          j        d                    |                      g S | 
                    d          5 }|D ]}|                                }|r|                    d          r.|                    dd          }|                    t          d t!          j        d	|d
          D                                  	 d d d            n# 1 swxY w Y   n# t$          $ r Y nw xY w|S )Nz&password file {!r} is not a plain filer8   zWpassword file {!r} has group or world access; permissions should be u=rw (0600) or lessrt#\\
c              3   B   K   | ]}|                     d d          V  dS )r?   r>   N)r   .0ps     r   	<genexpr>z&_read_password_file.<locals>.<genexpr>y   sD       % % IIdE**% % % % % %r   z(?<!\\):r   )maxsplit)existsis_filewarningswarnformat_systemstatst_modeS_IRWXGS_IRWXOopenstrip
startswithr   appendtupleresplitIOError)r9   passtabflines       r   _read_password_filer[   X   s    G!   	I!! 	M8??IIK K K Ii}}&$,*EF @@F A" A"# # #
 	]]4   	A  zz|| ts33  ||E400u % %Xk4!DDD% % %        	 	 	 	 	 	 	 	 	 	 	 	 	 	 	     NsH   E5 <E5 A&E5 >E5 B	E)E5 )E--E5 0E-1E5 5
FFhostsportsr+   r)   c                 (   t          |           }|sdS t          ||          D ]m\  }}|                    d          rd}|D ]N\  }}	}
}}|dk    r||k    r|	dk    r|	t          |          k    r/|
dk    r|
|k    r<|dk    r||k    rI|c c S ndS )zParse the pgpass file and return the matching password.

    :return:
        Password string, if found, ``None`` otherwise.
    N/	localhost*)r[   ziprR   str)r9   r\   r]   r+   r)   rX   hostportphostpport	pdatabasepuser	ppasswords                r   _read_password_from_pgpassrk      s     "(++G t%''  
d??3 	D9@ 	 	5E5)UI||||T 2 2CI$9$9|| 	 4r   c                 H   t          t                    rct                    t          |           k    rBt          j        d                    t                    t          |                               n(fdt          t          |                     D             S )Nz+could not match {} port numbers to {} hostsc                     g | ]}S r"   r"   )rB   r   re   s     r   
<listcomp>z'_validate_port_spec.<locals>.<listcomp>   s    000000r   )r   listlenr   ClientConfigurationErrorrJ   range)r\   re   s    `r   _validate_port_specrs      s    $ 1 t99E

""5=DDIIs5zz+ +, , , #
 1000eCJJ//000Kr   Funquotec                   d| v r|                      d          }n| g}g }g }|sht          j                            d          }|r4d|v r d |                     d          D             }nt	          |          }nd}t          ||          }nt          ||          }t          |          D ]?\  }}	|	d         dk    r|	}
d}n|	d         dk    rit          j        d	|	          }|r+|	                    d
          }
|	                    d          }n@t          j        d                    |	                    |	                    d          \  }
}}|rt          j                            |
          }
|                    |
           |sb|rE|rt          j                            |          }|                    t	          |                     $|                    ||                    A|s|}||fS )N,PGPORTc                 ,    g | ]}t          |          S r"   intrA   s     r   rn   z#_parse_hostlist.<locals>.<listcomp>   s    DDD1ADDDr   8  r   r_    [z(?:\[([^\]]+)\])(?::([0-9]+))?r   r	   z0invalid IPv6 address in the connection URI: {!r}:)rV   osenvirongetr{   rs   	enumeraterU   matchgroupr   rq   rJ   	partitionurllibr   ru   rS   )hostlistre   ru   	hostspecsr\   hostlist_portsportspecdefault_portihostspecaddrhostspec_portmr   s                 r   _parse_hostlistr      s"   
hNN3''		J	EN 4:>>(++ 	 hDDs0C0CDDD"8}}L*9lCC #9d33 ++ 7 78A;#DMMa[C:HEEA wwqzz !

 9FMM     &.%7%7%<%<"D!] 	.<''--DT 	7 7 H$*L$8$8$G$GM%%c-&8&89999%%l1o666 $;r   c                     |                      d          rt          j        d|            	 t          j        |                     dd                   S # t          $ r t          j        d|            w xY w)NSSLzUnsupported TLS version: .r   zNo such TLS version: )rR   r   rq   
ssl_module
TLSVersionr   KeyError)tls_versions    r   _parse_tls_versionr      s    e$$ 
1555
 
 	

$[%8%8c%B%BCC 
 
 
11K11
 
 	

s   %A "A6c                     	 t           j                                        }n# t          t          f$ r Y d S w xY w|dz  | z                                  S )Nz.postgresql)pathlibPathhomeRuntimeErrorr   resolve)filenamehomedirs     r   _dot_postgresql_pathr     sa    ,##%%(#   tt m#h.77999s   ! 66c                   - d }d x}x}x}x}-d x}}d }| rt           j                            |           }|j        dvr,t	          j        d                    |j                            |j        r2d|j        v r|j                            d          \  }}}n|j        }d}ndx}}|r|                    d          \  }}}ndx}}|s|rt          ||d          \  }}|j
        rG|E|j
        }|                    d          r
|d	d          }t           j                            |          }|!|rt           j                            |          }|!|rt           j                            |          }|j        rt           j                            |j        d
          }|                                D ]%\  }}t!          |t"                    r|d         ||<   &d|v r8|                    d          }|s!|rd |                    d          D             }d|v r,|                    d          }|s|rt          ||          \  }}d|v r|                    d          }||}d|v r|                    d          }||}d|v r|                    d          }||}d|v r|                    d          }||}d|v r|                    d          }||}d|v r|                    d          }||}d|v r|                    d          }d|v r|                    d          }d|v r|                    d          }d|v r|                    d          }d|v r|                    d          }d|v r|                    d          -d|v r|                    d          }d|v r|                    d          }d|v r|                    d          }|
|}
d|v r|                    d          }||}d |v r|                    d           }||}|r|	|}	ni ||	}	|s4t(          j                            d!          } | rt          | |          \  }}|sd"g}t.          d#k    rd"g}ng d$}t!          |t"          t0          f          s|g}||}|sXt(          j                            d%          }!|!r4d|!v r d& |!                    d          D             }nKt3          |!          }n;d'}n8t!          |t"          t0          f          rd( |D             }nt3          |          }t5          ||          }|)t)          j        d)          }|st9          j                    }|t)          j        d*          }|t)          j        d+          }||}|t	          j        d,          |t	          j        d-          |e|t)          j        d.          }|#t=          j                    }"|"r|"t@          z  }nd }ntC          j"        |          }|tG          |||||/          }g }#d0}$tI          ||          D ]\  }%}&|%                    d          rMd1|%vr3t(          j
        %                    |%d2                    |&                    }%|#&                    |%           g|#&                    |%|&f           d}$|#st	          j'        d3          |t)          j        d4          }||$rd5}||rtP          j)        ntP          j*        }'n|t(          j                            d6          }|[	 tQ          |          }'nV# tV          $ r= d7%                    d8 tP          D                       }(t	          j        d9|(           d w xY wtP          j*        }'t!          |tX          tZ          f          r	 tZ                              |          })nZ# t\          $ rM d7%                    d: tZ          D                       }(t	          j        d;                    |(                    d w xY w|)tZ          j/        k     rd0}nta          j1        t`          j2                  }|)tZ          j3        k    |_4        |)tZ          j5        k     rt`          j6        |_7        n|t)          j        d<          }|r(|8                    |=           t`          j9        |_7        n	 tu          d>          }||8                    |=           nt	          j        d?          	 t`          j9        |_7        n# t          j        tv          tx          f$ rg |)tZ          j5        k    r(|d@}dA}*nd }*t	          j        dB| dCdD| dE|*F          |)tZ          j5        k    rt`          j6        |_7        n
J dG            Y nw xY w|t)          j        dH          }|r1|8                    |=           |xj=        t`          j>        z  c_=        nZtu          dI          }|I	 |8                    |=           |xj=        t`          j>        z  c_=        n# tv          tx          f$ r Y nw xY w|t)          j        dJ          }|s'tu          dK          }||?                                sd }-sd-|t)          j        dL          }|r|@                    ||-fdMN           nEtu          dO          }|4	 |@                    ||-fdPN           n# tv          tx          f$ r Y nw xY wt          |dQ          r9t(          j                            dR          }+|+rt          jC        jD        s|+|_E        |t)          j        dS          }|rt          |          |_G        nt          dT          |_G        |t)          j        dU          }|rt          |          |_H        n0|du r ta          jI                    }tZ          j3        })ntZ          jJ        })|	mt!          |	t                    rDt          dV |	D                       r+t          dW |	M                                D                       st	          j        dX          |
t)          j        dYt          jO                  }
	 t          |
          }
nF# tV          $ r9 t	          j        dZ                    t          jP        jM        |
                    d w xY w|t)          j        d[          }|%t)          j        d\          }|t.          d#k    rd]nd^}|d_vr't	          j        d`                    |                    t          |||||)|'|	|
||a
  
        },|#|,fS )bN>   r%   
postgresqlzQinvalid DSN: scheme is expected to be either "postgresql" or "postgres", got {!r}@r}   r   Trt   r_   r   )strict_parsingre   c                 ,    g | ]}t          |          S r"   rz   rA   s     r   rn   z/_parse_connect_dsn_and_args.<locals>.<listcomp>E  s    ;;;qCFF;;;r   rw   rd   dbnamer+   r)   r*   r9   r   sslcertsslkeysslrootcertsslnegotiationsslcrlsslpasswordssl_min_protocol_versionssl_max_protocol_versionr/   r0   r1   PGHOSTr`   r8   )z/run/postgresqlz/var/run/postgresqlz/tmpz/private/tmpr`   rx   c                 ,    g | ]}t          |          S r"   rz   rA   s     r   rn   z/_parse_connect_dsn_and_args.<locals>.<listcomp>  s    <<<1A<<<r   r|   c                 ,    g | ]}t          |          S r"   rz   rA   s     r   rn   z/_parse_connect_dsn_and_args.<locals>.<listcomp>  s    %%%1A%%%r   PGUSER
PGPASSWORD
PGDATABASEz-could not determine user name to connect withz/could not determine database name to connect to
PGPASSFILE)r\   r]   r+   r)   r9   Fz	.s.PGSQL.z.s.PGSQL.{}z6could not determine the database address to connect to	PGSSLMODEr   PGSSLNEGOTIATIONz, c              3   L   K   | ]}|j                             d d          V   dS r   r   Nnamer   rB   r   s     r   rD   z._parse_connect_dsn_and_args.<locals>.<genexpr>  sF       " " FNN3,," " " " " "r   z+`sslnegotiation` parameter must be one of: c              3   L   K   | ]}|j                             d d          V   dS r   r   r   s     r   rD   z._parse_connect_dsn_and_args.<locals>.<genexpr>  s2      HH1afnnS#66HHHHHHr   z&`sslmode` parameter must be one of: {}PGSSLROOTCERT)cafilezroot.crtzDcannot determine location of user PostgreSQL configuration directoryz~/.postgresql/root.crtzCould not determine location of user home directory (HOME is either unset, inaccessible, or does not point to a valid directory)zroot certificate file "z&" does not exist or cannot be accessedz4Provide the certificate file directly or make sure "z" exists and is readable.)hintdetailunreachablePGSSLCRLzroot.crlPGSSLKEYzpostgresql.key	PGSSLCERTc                       S Nr"   r   s   r   <lambda>z-_parse_connect_dsn_and_args.<locals>.<lambda>x  s    k r   )keyfiler*   zpostgresql.crtc                       S r   r"   r   s   r   r   z-_parse_connect_dsn_and_args.<locals>.<lambda>  s    [ r   keylog_filenameSSLKEYLOGFILEPGSSLMINPROTOCOLVERSIONzTLSv1.2PGSSLMAXPROTOCOLVERSIONc              3   @   K   | ]}t          |t                    V  d S r   r   rc   )rB   ks     r   rD   z._parse_connect_dsn_and_args.<locals>.<genexpr>  s,      @@1Jq#&&@@@@@@r   c              3   @   K   | ]}t          |t                    V  d S r   r   )rB   vs     r   rD   z._parse_connect_dsn_and_args.<locals>.<genexpr>  s,      II1Jq#&&IIIIIIr   z:server_settings is expected to be None or a Dict[str, str]PGTARGETSESSIONATTRSz<target_session_attrs is expected to be one of {!r}, got {!r}PGKRBSRVNAMEPGGSSLIBsspigssapi>   r   r   z<gsslib parameter must be either 'gssapi' or 'sspi', got {!r}r(   )Rr   r   urlparseschemer   rq   rJ   netlocr   r   pathrR   ru   queryparse_qsitemsr   ro   poprV   r   r   r   rK   rT   r{   rs   getenvgetpassgetuserr   get_pg_home_directoryr   r   r   rk   rb   joinrS   InternalClientErrorr$   r&   r%   
ValueErrorrc   r   AttributeErrorr   r   
SSLContextPROTOCOL_TLS_CLIENTr    check_hostnamer   	CERT_NONEverify_modeload_verify_locationsCERT_REQUIREDr   FileNotFoundErrorNotADirectoryErrorverify_flagsVERIFY_CRL_CHECK_CHAINrF   load_cert_chainhasattrsysflagsignore_environmentr   r   minimum_versionmaximum_versioncreate_default_contextr   dictallvaluesSessionAttributeany__members___ConnectionParameters).dsnrd   re   r)   r*   r9   r+   r,   
direct_tlsr.   r/   r0   r1   
auth_hostsr   r   r   r   r   r   r   parseddsn_authr   dsn_hostspecdsn_userdsn_passworddsn_databaser   keyvaldsn_target_session_attrsr   r   r   addrshave_tcp_addrshrC   sslnegmodesr   r   
keylogfileparamsr   s.                                                @r   _parse_connect_dsn_and_argsr    s    J<@@G@f@{@Vk:>>7N
 DC&&s++= :::577=vfm7L7LN N N = 	)fm##,2M,C,CC,H,H)!\\%}&((H| 	)(0(:(:3(?(?%Ha&((H| 	K 	K(tTJJJJD$; 	:8+!;L&&s++ 0+ABB/|++L99H<H<<''11D|++L99H< _	CL))&,t)LLE!KKMM ) )Sc4(( )!$RE#Jii'' < <;;CIIcNN;;;Dii'' < <!0d!;!;JD$5  ii))#"HU""ii
++#"Hii''<DU""ii
++#"HU""ii
++#"HE!!ii	**;CE!!))I..5  8,,%%#ii665((!&+;!<!<5  8,,%%#ii66)U22+099., ,( *U22+099., ,( &..+099*, ,( (/+C(u$$ii--%!$J5  ii))> F C"*&+OO&B&B/&BO 9:>>(++ 	9(488JD$ 9!]
i=DD9 9 9D dT5M** v
 :>>(++ 	h<<s(;(;<<<8}}DD	D4-	(	( %%%%% 4yytT**D|y"" 	%?$$D9\**9\**|1;= = 	= 1=? ? 	? y..H244G  "Z/|H--H1 !!# # #H
 END$ 	" 	"1<< 	"!##GLLM$8$8$;$;<<LLOOOO LL!Q   !NN F,DF F 	F {i$$
{~{%/LN!!^5L 	 !Z^^,>??N%	'77   		 " "+" " "   !9I%II  $,F#W~&& G"	mmC((GG 	 	 	IIHHHHHHHE58??FF 	 W]""CC'
(FGGC!(G,?!?C((","6&"$)O"<"<K *C--[-AAA&0&>COO&C&::&F&F&255[5IIII","E!E# #  JF +5*B9 #;)* 8 8 8
 #W_44*2.F%7 !' *.","E!C+ !C !C !C&?6A&? &? &? (.# # #  %77.8.BCOO7-777 ,O38> >Yz22F B--V-<<<$$
(II$$$1*==F)	B55V5DDD  ,, * AB,,, ..  ! ! ! !D	! ~:.. "-.>??%fmmoo%!F ! )K00 ##V6I6I6I6I $     //?@@&++#$*%8%8%8%8 ,    
 ./AB    s-.. 5Z^^O<<
 5ci&B 5*4C''/+-95N+O+O(' D&8,' '## '9&C&C#'/+-95N+O+O(' &8,' '# 
/11%/"?D11 #@@@@@@@ # II0F0F0H0HIIIII # 1    	  #!y"$4$8 
  
	/0DEE   1 ,35I 
 
 	 Y~..
~:&&>&)33VVF'''1) ) 	) #HxS'1f. . .F &=s^   ,\< <A^0_ A`"<d B f"!f" h1 1iik- -l l<r Asc                     t                      }dD ]J}||         }|t          |t                    s|dk     r#t          d                    ||                    K|k	 t          |t                    rt          t          |          }|dk    rt          n1# t          $ r$ t          d                    |                    d w xY wt          | ||||||||||||          \  }}t          |||	|
          }|||fS )N>   r5   r7   r6   r   z4{} is expected to be greater or equal to 0, got {!r}zGinvalid command_timeout value: expected greater than 0 float (got {!r}))r  rd   re   r)   r*   r9   r,   r	  r+   r.   r/   r0   r1   r3   )localsr   boolr   rJ   floatr  _ClientConfiguration)r  rd   re   r)   r*   r9   r+   r4   r5   r6   r7   r,   r	  r.   r/   r0   r1   
local_varsvar_namevar_valr  r  configs                          r   _parse_connect_argumentsr%    su    J- E E X&?j$77?7Q;;**0&7*C*CE E E <G
 "
	0/400 !  #O44O!##   $ 	0 	0 	0;;A6#<% <%& & ,00	0 0dDH#'1f. . .ME6 "'1&C%A	D D DF &&  s   8B .Cc                        e Zd Zd Zd Zd ZdS )TLSUpgradeProtoc                 f    t          |          | _        || _        || _        || _        || _        d S r   )_create_futureon_datard   re   ssl_contextssl_is_advisory)selflooprd   re   r+  r,  s         r   __init__zTLSUpgradeProto.__init__  s5    %d++		&.r   c                 \   |dk    r| j                             d           d S | j        r<| j        j        t
          j        k    r"|dk    r| j                             d           d S | j                             t          d	                    | j
        | j                                       d S )N   ST   NFz9PostgreSQL server at "{host}:{port}" rejected SSL upgrade)rd   re   )r*  
set_resultr,  r+  r   r   r   set_exceptionConnectionErrorrJ   rd   re   )r-  datas     r   data_receivedzTLSUpgradeProto.data_received  s    4<<L##D)))))" 	: ,
0DDD
 L##E*****L&&++16!YTY ,2 ,8 ,89 9: : : : :r   c                     | j                                         s-|t          d          }| j                             |           d S d S )Nz!unexpected connection_lost() call)r*  doner5  r4  r-  excs     r   connection_lostzTLSUpgradeProto.connection_lost  sQ    |  "" 	,{%&IJJL&&s+++++	, 	,r   N)r   r   r   r/  r7  r<  r"   r   r   r'  r'    sA        / / /: : :$, , , , ,r   r'  )r,  c                  K                        fd           d {V \  }}|                    t          j        ddd                     	 |j         d {V }n/# t
          t          j        f$ r |                                  w xY wt          d          r|rP	 
                    ||           d {V }	n1# t
          t          j        f$ r |                                  w xY w|}	 |             }
||
_        |
                    |	           |	                    |
           |	|
fS t          j        j         |           }|rt          j        |          }t!          |          }|                                }t%          |           |                                 	  ||           d {V \  }	}
||
_        |	|
fS # t
          t          j        f$ r |                                  w xY w)	Nc                  *    t                     S r   )r'  )rd   r.  re   r+  r,  s   r   r   z(_create_ssl_connection.<locals>.<lambda>#  s    dD +_> > r   z!ll   i/	start_tls)server_hostname)r,   rA  sock)create_connectionwritestructpackr*  	ExceptionasyncioCancelledErrorcloser   r@  is_sslconnection_madeset_protocol	functoolspartial_get_socketdup_set_nodelay)protocol_factoryrd   re   r.  r+  r,  trprdo_ssl_upgradenew_trpg_protoconn_factoryrC  s    `````       r   _create_ssl_connectionr[    s      ))	> 	> 	> 	> 	> 	> 	> 	>d       FB
 HHV[8,,---!z))))))w-.   



 t[!! $ 	#~~K  .  ?  ? ? ? ? ? ? ?w56   


 F##%%(  (((H%%%x ("$46 6  	E$,+tE E EL 2xxzzT



	%1\t%<%<%<<<<<<<FH,HO8##712 	 	 	JJLLL	s$   A' ',B)C	 	,C53G ,G?c                 $  K   |J |}t          |j                  rF|                                }t          j        |          r| d {V }|                    |          }| |||||f}|j        t          j        k    r|}	|                    d           }n@|j        t          j        k    r|                    d           }	nt          |dg|R   d {V S 	 t          |dg|R   d {V S # t          $ r Y nw xY wt          |	dg|R   d {V S )N)r*   )r,   FT)callabler*   inspectisawaitable_replacer   r   r   r   __connect_addr_RetryConnectSignal)
r   r.  r  r$  connection_classrecord_classparams_inputr*   argsparams_retrys
             r   _connect_addrrh  V  sz      L   4??$$x(( 	&%~~~~~~H(33$ 0,MD ~&&T**	7>	)	)400 $FE9D9999999999#FD848888888888     e;d;;;;;;;;;;s   C. .
C;:C;c                       e Zd ZdS )rb  N)r   r   r   r"   r   r   rb  rb  ~  s        Dr   rb  c                 >   K   t                     fd}t          t                    r                    |          }	nq j        r* j        t          j        u r j        |gR d j        i}	n@ j        r+t          |gR  j         j
        t          j        k    d}	n j        |gR  }	|	 d {V \  }
}	  d {V  n# t          j        t          j        f$ r^ |
                                 |rF j
        t          j        k    r|j        r j
        t          j        k    r|j        rt'                       t(          t*          j        f$ r |
                                  w xY w |||
||          }|                    |           |S )Nc                  4    t          j                   S r   )r   Protocol)r   	connectedr.  r  rd  s   r   r   z __connect_addr.<locals>.<lambda>  s    H-it5 5 r   r,   r.  r+  r,  )r)  r   rc   create_unix_connectionr,   r-   r$   r&   rD  r[  r   r   r   r   &InvalidAuthorizationSpecificationErrorConnectionDoesNotExistErrorrK  r   rL  rb  rH  rI  rJ  set_connection)r  retryr   r.  r$  rc  rd  re  proto_factory	connectorrU  rV  conrm  s   ` ``  `      @r   ra  ra    s6      t$$I5 5 5 5 5 5 5 5M $ A//tDD			 A..2GGG +D*
 
 
 
&,j
 
		 
 A*> > >'+"Ngn<> > >		 +D*=@4@@@	______FB!9.    	


  	Ngm++BI+Ngn,,, &''' w-.   



 
2r4v|
D
DCcJs   	C B#E5c                   &    e Zd ZdZdZdZdZdZdZdS )r  r  primarystandbyzprefer-standbyz
read-writez	read-onlyN)	r   r   r   r  rx  ry  prefer_standby
read_write	read_onlyr"   r   r   r  r    s,        
CGG%NJIIIr   r  should_be_in_hot_standbyc                       fd}|S )a  
    If the server didn't report "in_hot_standby" at startup, we must determine
    the state by checking "SELECT pg_catalog.pg_is_in_recovery()".
    If the server allows a connection and states it is in recovery it must
    be a replica/standby server.
    c                    K   |                                  }t          |dd           }||dk    }n|                     d           d {V }|k    S )Nin_hot_standbyonz%SELECT pg_catalog.pg_is_in_recovery())get_settingsr   fetchval)
connectionsettingshot_standby_statusis_in_hot_standbyr}  s       r   can_be_usedz+_accept_in_hot_standby.<locals>.can_be_used  s      **,,$X/?FF) 2d :&0&9&97' ' ! ! ! ! ! ! !$<<<r   r"   )r}  r  s   ` r   _accept_in_hot_standbyr    s$    	= 	= 	= 	= 	= r   should_be_read_onlyc                       fd}|S )zJ
    Verify the server has not set default_transaction_read_only=True
    c                    K   |                                  }t          |dd          }|dk    rS  t                    |            d {V S )Ndefault_transaction_read_onlyoffr  )r  r   r  )r  r  is_readonlyr  s      r   r  z&_accept_read_only.<locals>.can_be_used  sg      **,,h(GOO$&&@+,?@@LLLLLLLLLr   r"   )r  r  s   ` r   _accept_read_onlyr    s)    M M M M M r   c                 
   K   dS NTr"   )r   s    r   _accept_anyr    s      4r   Tattrc                 B   K   t           |         } ||            d {V S r   )target_attrs_check)r  r  can_uses      r   _can_use_connectionr    s2       &G$$$$$$$$$r   c           	      *  K   | t          j                    } t          di |\  }}}|j        }g }d d }	|D ]f}
	 t	          |
| ||||           d {V }|                    |           t          ||           d {V r| n@N# t          $ r}|}	Y d }~_d }~ww xY w|t          j	        k    r|rt          j        |          t          j        fd|D             ddi d {V  rS |	p&t          j        d                    |                    )N)r   r.  r  r$  rc  rd  c              3   H   K   | ]}|u|                                 V  d S r   )rK  )rB   cchosen_connections     r   rD   z_connect.<locals>.<genexpr>,  s6      	F	F14E+E+E!''))+E+E+E+E	F	Fr   return_exceptionsTz=None of the hosts match the target attribute requirement {!r}r"   )rI  get_event_loopr%  r/   rh  rS   r  OSErrorr  rz  randomchoicegatherr   TargetServerAttributeNotMatchedrJ   )r.  rc  rd  kwargsr  r  r$  target_attr
candidates
last_errorr   connexr  s                @r   _connectr    s     |%''4>>v>>E66-KJJ : :	&!1)        D d###({;;;;;;;; $(!  	 	 	JJJJJJ	 *999j9 &j 9 9
.	F	F	F	FZ	F	F	F        
  !  
 
B	vk""  s   AB
BBBr  c                    K    G  fddt           j                  }t          |t                    r                      ||           d {V \  }}n|j        rI|j        t          j        k    r4t          |g|R  |j        |j        t          j
        k    d d {V \  }}n3  j        |g|R   d {V \  }}t          t          |                     t          j        ddd||          }	 |                    |           |j         d {V  |                                 d S # |                                 w xY w)Nc                        e Zd Z fdZd ZdS )_cancel.<locals>.CancelProtoc                 >    t                    | _        d| _        d S )NF)r)  on_disconnectrL  )r-  r.  s    r   r/  z%_cancel.<locals>.CancelProto.__init__>  s    !/!5!5DDKKKr   c                 p    | j                                         s| j                             d           d S d S r  )r  r9  r3  r:  s     r   r<  z,_cancel.<locals>.CancelProto.connection_lostB  s@    %**,, 4"--d333334 4r   N)r   r   r   r/  r<  r.  s   r   CancelProtor  <  s=        	  	  	  	  	 	4 	4 	4 	4 	4r   r  rn  z!llll   i.)rI  rl  r   rc   ro  r,   r   r   r   r[  r   rD  rS  rQ  rF  rG  rE  r  rK  )	r.  r   r  backend_pidbackend_secretr  rU  rV  msgs	   `        r   _cancelr  9  s     4 4 4 4 4 4 4g& 4 4 4 $ *22;EEEEEEEEBB: 
	*&.GM991BB B "J &'. @B B B B B B B B BFB 241$"$ $ $ $ $ $ $ $ $FBR))) +gr8[.
I
IC










s   /"D' 'D=c                 x    |                      d          }|"t          d                    |                     |S )Nsocketz+could not get the socket for transport {!r})get_extra_infor5  rJ   )	transportrC  s     r   rQ  rQ  _  sE    ##H--D|9@@KKM M 	MKr   c                     t          t          d          r| j        t          j        k    r-|                     t          j        t          j        d           d S d S )NAF_UNIXr   )r   r  familyr  
setsockoptIPPROTO_TCPTCP_NODELAYrB  s    r   rS  rS  h  sN    69%% C)F)F*F,>BBBBB *G)Fr   c                 p    	 | j         } |            S # t          $ r t          j        |           cY S w xY w)Nr  )create_futurer   rI  Future)r.  r  s     r   r)  r)  m  sS    * }  ) ) )~4(((((()s    55)LrI  collectionsenumrO  r   r   r   platformr  rU   r  r,   r   rL   rF  r   typingurllib.parser   rH   r^  r}   r   r   r   IntEnumr   StrEnumr$   
namedtupler  r   unamesystemrK   r   r   ListTuplerc   r[   Optionalr{   rk   rs   r   r   r   r  r%  rl  r'  r[  rh  rH  rb  ra  Enumr  r  r  r  r  r  rx  ry  rz  r{  r|  r  r  r  r  rQ  rS  r)  r"   r   r   <module>r     s              				    				        



                         7 7 7 7 7dl 7 7 7    V^   
 /.      .{-     (.


! iJJJ(', (;v|CH-.( ( ( (V"_W\2"{3" {3" 	"
 " " " "J   05 = = = = =@

 

 

:fogl&C : : : :@ @ @F,! ,! ,!^, , , , ,g& , , ,D EJ4 4 4 4 4n%< %< %<P	 	 	 	 	) 	 	 	H H HV    sDI   T    *4      
 +44U;;44T::#%;%;D%A%A!2!25!9!9 1 1$ 7 7 %0@ % % % %
) ) )X#)> # # # #L  C C C
    r   