
     i                       d dl mZ d dlZd dlZd dlZd dlm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Z)dQdZ*dRd!Z+d" Z,d#d$d%Z-d& Z.dSd'Z/d( Z0d) Z1 G d* d+ej2                  Z3 ej4        d,ej5        j2        -          Z6d#d.dTd;Z7d< Z8 G d= d>e9          Z:d? Z; G d@ dAe<ej=                  Z>dUdCZ?dVdEZ@dF ZAe>jB        eAe>jC         e?d#          e>jD         e?dG          e>jE         e?dG          e>jF         e@d#          e>jG         e@dG          iZHdWdIZIdJ ZJdXdMZKdN ZLdO ZMdP ZNdS )Y    )annotationsN)Callable   )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     O/var/www/html/gemini/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&   3   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.pgpassz.pg_service.confpassfilepathlib.Pathreturn#typing.List[typing.Tuple[str, ...]]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 filer:   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 )rC   rB   N)r   .0ps     r   	<genexpr>z&_read_password_file.<locals>.<genexpr>   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)r;   passtabflines       r   _read_password_filer_   ^   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typing.Optional[pathlib.Path]hoststyping.List[str]portstyping.List[int]r-   strr+   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_   ziprV   re   )r;   ra   rc   r-   r+   r\   hostportphostpport	pdatabasepuser	ppasswords                r   _read_password_from_pgpassrr      s     "(++G t%''  
d??3 	D9@ 	 	5E5)UI||||T 2 2CI$9$9|| 	 4r   c                   t          t                    rvt                    dk    rct                    t          |           k    rBt          j        d                    t                    t          |                               nyt          t                    r<t                    dk    r)fdt          t          |                     D             n(fdt          t          |                     D             S )Nr   z+could not match {} port numbers to {} hostsc                     g | ]
}d          S )r   r$   rF   r   rl   s     r   
<listcomp>z'_validate_port_spec.<locals>.<listcomp>   s    333AQ333r   c                    g | ]}S r$   r$   ru   s     r   rv   z'_validate_port_spec.<locals>.<listcomp>   s    000000r   )r   listlenr   ClientConfigurationErrorrN   range)ra   rl   s    `r   _validate_port_specr|      s    $ 
1#d))a-- t99E

""5=DDIIs5zz+ +, , , # 
D$		 1CIINN3333s5zz!2!23330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$   intrE   s     r   rv   z#_parse_hostlist.<locals>.<listcomp>   s    DDD1ADDDr   8  r   rg    [z(?:\[([^\]]+)\])(?::([0-9]+))?r   r   z0invalid IPv6 address in the connection URI: {!r}:)rZ   osenvirongetr   r|   	enumeraterY   matchgroupr   rz   rN   	partitionurllibr   r~   rW   )hostlistrl   r~   	hostspecsra   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: )rV   r   rz   
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                ^!  2 d }d x}x}x}x}2d x}}d }| rCt           j                            |           }d }|j        rt           j                            |j        d          }|                                D ]%\  }}t          |t                    r|d         ||<   &d|v r|                    d          }|s|r|}|	}|t          j
        d          }|#t          j                    }|r|t          z  }nd }n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                            |!          }|rcd|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          2d|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 ||}||t7          j                    }$|$                    |           ||$                                v ra|$|         }%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          }2|2d|%v r|%                    d          }||}d|%v r|%                    d          }||}d |%v r|%                    d           }#||#}d!|%v r|%                    d!          }||}d"|%v r|%                    d"          }||}|st          j                             d$          }|s4t          j                             d%          }&|&rt-          |&|          \  }}|sd&g}tB          d'k    rd&g}ng d(}t          |t          tD          f          s|g}||}|sXt          j                             d)          }'|'r4d|'v r d* |'                    d          D             }nKtG          |'          }n;d+}n8t          |t          tD          f          rd, |D             }ntG          |          }tI          ||          }|)t          j
        d-          }|stK          j&                    }|t          j
        d.          }|t          j
        d/          }||}|t#          j        d0          |t#          j        d1          |e|t          j
        d2          }|#t          j                    }|r|tN          z  }nd }nt          j        |          }|tQ          |||||3          }g }(d4})tS          ||          D ]\  }*}+|*                    d          rMd5|*vr3t          j        *                    |*d6                    |+                    }*|(+                    |*           g|(+                    |*|+f           d})|(st#          j,        d7          |t          j
        d8          }||)rd9}|
|
rtZ          j.        ntZ          j/        },n|t          j                             d:          }|[	 t[          |          },nV# t`          $ r= d;*                    d< tZ          D                       }-t#          j        d=|-           d w xY wtZ          j/        },t          |tb          td          f          r	 td                              |          }.nZ# tf          $ rM d;*                    d> td          D                       }-t#          j        d?                    |-                    d w xY w|.td          j4        k     rd4}ntk          j6        tj          j7                  }|.td          j8        k    |_9        |.td          j:        k     rtj          j;        |_<        n|t          j
        d@          }|r(|=                    |A           tj          j>        |_<        n	 t          dB          }||=                    |A           nt#          j        dC          	 tj          j>        |_<        n# t"          j        t          t          f$ rg |.td          j:        k    r(|dD}dE}/nd }/t#          j        dF| dGdH| dI|/J          |.td          j:        k    rtj          j;        |_<        n
J dK            Y nw xY w|t          j
        dL          }|r1|=                    |A           |xjB        tj          jC        z  c_B        nZt          dM          }|I	 |=                    |A           |xjB        tj          jC        z  c_B        n# t          t          f$ r Y nw xY w|t          j
        dN          }|s't          dO          }||D                                sd }2sd	2|t          j
        dP          }|r|E                    ||2fdQR           nEt          dS          }|4	 |E                    ||2fdTR           n# t          t          f$ r Y nw xY wt          |dU          r9t          j                             dV          }0|0rt          jH        jI        s|0|_J        |t          j
        dW          }|rt          |          |_L        nt          dX          |_L        |t          j
        dY          }|rt          |          |_M        n0|du r tk          jN                    }td          j8        }.ntd          jO        }.|mt          |t                    rDt          dZ |D                       r+t          d[ |R                                D                       st#          j        d\          |t          j
        d]t          jT                  }	 t          |          }nF# t`          $ r9 t#          j        d^                    t          jU        jR        |                    d w xY w|t          j
        d_          }|%t          j
        d`          }|tB          d'k    rdandb}|dcvr't#          j        dd                    |                    t          |||||.|,||||e
  
        }1|(|1fS )fNT)strict_parsingservicePGSERVICEFILE>   r'   
postgresqlzQinvalid DSN: scheme is expected to be either "postgresql" or "postgres", got {!r}@r   r   r}   rg   r   rl   c                ,    g | ]}t          |          S r$   r   rE   s     r   rv   z/_parse_connect_dsn_and_args.<locals>.<listcomp>d  s    ;;;qCFF;;;r   r   rk   dbnamer-   r+   r,   r;   r   sslcertsslkeysslrootcertsslnegotiationsslcrlsslpasswordssl_min_protocol_versionssl_max_protocol_versionr1   r2   r3   c                ,    g | ]}t          |          S r$   r   rE   s     r   rv   z/_parse_connect_dsn_and_args.<locals>.<listcomp>  s    ???1A???r   	PGSERVICEPGHOSTrh   r:   )z/run/postgresqlz/var/run/postgresqlz/tmpz/private/tmprh   r   c                ,    g | ]}t          |          S r$   r   rE   s     r   rv   z/_parse_connect_dsn_and_args.<locals>.<listcomp>D  s    <<<1A<<<r   r   c                ,    g | ]}t          |          S r$   r   rE   s     r   rv   z/_parse_connect_dsn_and_args.<locals>.<listcomp>K  s    %%%1A%%%r   PGUSER
PGPASSWORD
PGDATABASEz-could not determine user name to connect withz/could not determine database name to connect to
PGPASSFILE)ra   rc   r-   r+   r;   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   rF   r   s     r   rH   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   rH   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>  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   re   )rF   ks     r   rH   z._parse_connect_dsn_and_args.<locals>.<genexpr>3  s,      @@1Jq#&&@@@@@@r   c              3  @   K   | ]}t          |t                    V  d S r   r   )rF   vs     r   rH   z._parse_connect_dsn_and_args.<locals>.<genexpr>4  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*   )Wr   r   urlparsequeryparse_qsitemsr   rx   popr   getenvr   get_pg_home_directoryPG_SERVICEFILEr   r   schemer   rz   rN   netlocr   r   pathrV   r~   rZ   configparserConfigParserreadsectionsr   r   rO   rX   r   r|   getpassgetuserr   rr   rj   joinrW   InternalClientErrorr&   r(   r'   
ValueErrorre   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_CHAINrJ   load_cert_chainhasattrsysflagsignore_environmentr   r   minimum_versionmaximum_versioncreate_default_contextr   dictallvaluesSessionAttributeany__members___ConnectionParameters)3dsnrk   rl   r+   r,   r;   r-   r.   r   servicefile
direct_tlsr0   r1   r2   r3   
auth_hostsr   r   r   r   r   r   r   parsedr   keyvalconnection_service_filer   dsn_authr   dsn_hostspecdsn_userdsn_passworddsn_databasedsn_target_session_attrs
pg_serviceservice_paramsr   r   addrshave_tcp_addrshrG   sslnegmodesr   r   
keylogfileparamsr   s3                                                     @r   _parse_connect_dsn_and_argsr1    s    J<@@G@f@{@Vk:>>7N
 I%&&s++< 		"L))&,t)LLE!KKMM ) )Sc4(( )!$RE#JE!!ii	** "3 "!G"-"*&(i&@&@#"*244G /*1N*B''*.''&-l3J&K&K#= :::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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E!!ii	**?!G C"*&+OO&B&B/&BO".73F%244JOO3444*--////!+G!4^++(,,V44C @C @??		#???^++(,,V44C @C @%4S$%?%?
d~--(,,X66C'#&//(,,Z88C'#&^++(,,V44C|"//(,,Z88C'#&//(,,Z88C'#&..(,,Y77C{!..(,,Y77C"%~--(,,X66C~!$ N22(,,];;C"*&)#~55(,,-=>>C%-),~--(,,X66C~!$ N22(,,];;C"*&)-??(,,2 C 07360-??(,,2 C 07360)^;;/=/A/A.0 0, ,3/G,>11(,,\::C!)%(
~--(,,X66C~!$ .*..-- 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_   j Akl# #Am:(<q7 7B s:9s:v	 	vv)y yy$ $AA@'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>   r7   r9   r8   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  rk   rl   r+   r,   r;   r.   r  r-   r0   r1   r2   r3   r   r  r5   )localsr   boolr   rN   floatr1  _ClientConfiguration)r  rk   rl   r+   r,   r;   r-   r6   r7   r8   r9   r.   r  r0   r1   r2   r3   r   r  
local_varsvar_namevar_valr*  r0  configs                            r   _parse_connect_argumentsr;  ^  sz    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[2 2 2ME6 "'1&C%A	D D DF &&  s   8B .Cc                  &    e Zd ZddZddZddZdS )TLSUpgradeProtoloopasyncio.AbstractEventLooprk   re   rl   r   ssl_contextssl_module.SSLContextssl_is_advisoryr4  r=   Nonec                f    t          |          | _        || _        || _        || _        || _        d S r   )_create_futureon_datark   rl   r@  rB  )selfr>  rk   rl   r@  rB  s         r   __init__zTLSUpgradeProto.__init__  s7     &d++		&.r   databytesc                \   |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)rk   rl   )rF  
set_resultrB  r@  r  r   r  set_exceptionConnectionErrorrN   rk   rl   )rG  rI  s     r   data_receivedzTLSUpgradeProto.data_received  s    4<<L##D)))))" 	: ,
0DDD
 L##E*****L&&++16!YTY ,2 ,8 ,89 9: : : : :r   exctyping.Optional[Exception]c                    | j                                         s-|t          d          }| j                             |           d S d S )Nz!unexpected connection_lost() call)rF  donerP  rO  rG  rR  s     r   connection_lostzTLSUpgradeProto.connection_lost  sQ    |  "" 	,{%&IJJL&&s+++++	, 	,r   N)r>  r?  rk   re   rl   r   r@  rA  rB  r4  r=   rC  )rI  rJ  r=   rC  )rR  rS  r=   rC  )r   r   r   rH  rQ  rW  r$   r   r   r=  r=    sP        / / / /: : : :$, , , , , ,r   r=  _ProctolFactoryR)bound)rB  protocol_factoryCallable[[], _ProctolFactoryR]rk   rl   r   r>  r?  r@  rA  rB  r4  1typing.Tuple[asyncio.Transport, _ProctolFactoryR]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|rT	 
                    ||           d {V }	|	J 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=  )rk   r>  rl   r@  rB  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packrF  	ExceptionasyncioCancelledErrorcloser  r`  is_sslconnection_madeset_protocol	functoolspartial_get_socketdup_set_nodelay)rZ  rk   rl   r>  r@  rB  trprdo_ssl_upgradenew_trpg_protoconn_factoryrc  s    `````       r   _create_ssl_connectionrz    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 ,C97G ,H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>  r0  r:  connection_classrecord_classparams_inputr,   argsparams_retrys
             r   _connect_addrr    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 )r  N)r   r   r   r$   r   r   r  r  &  s        Dr   r  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>  r0  r  s   r   r   z __connect_addr.<locals>.<lambda>6  s    H-it5 5 r   r.   r>  r@  rB  )rE  r   re   create_unix_connectionr.   r/   r&   r(   rd  rz  r   r
   r   r   &InvalidAuthorizationSpecificationErrorConnectionDoesNotExistErrorrk  r   rl  r  rh  ri  rj  set_connection)r0  retryr   r>  r:  r  r  r  proto_factory	connectorrt  ru  conr  s   ` ``  `      @r   r  r  *  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  r  r  prefer_standby
read_write	read_onlyr$   r   r   r  r  u  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        |          }	d }|rt          j         |||	                     n)# d }|rt          j         |||	                     w w xY w|	r|	S |
p&t          j        d                    |                    )N)r   r>  r0  r:  r  r  c                R   K   t          j        fd| D             ddi d {V  d S )Nc              3  H   K   | ]}|u|                                 V  d S r   )rk  )rF   cchosens     r   rH   z6_connect.<locals>._close_candidates.<locals>.<genexpr>  s/      >>avoo!''))oooo>>r   return_exceptionsT)ri  gather)connsr  s    `r   _close_candidatesz#_connect.<locals>._close_candidates  sb      .>>>>U>>>"&          r   z=None of the hosts match the target attribute requirement {!r}r$   )ri  get_event_loopr;  r1   r  rW   r  OSErrorr  r  randomchoicecreate_taskr   TargetServerAttributeNotMatchedrN   )r>  r  r  kwargsr*  r0  r:  target_attr
candidateschosen_connection
last_errorr   connexr  s                  r   _connectr    s     |%''4>>v>>E66-KJJB 	> 	>D *!!%5!-         !!$''',T;???????? (,%E       





  .===*=$*M*$=$=!	 	 	
  	B!!*.?@@B B B	 	 	
  	B!!*.?@@B B B B	B  !  
 
B	vk""  s5   C) ABC) 
BBC) B)C) )&Dr0  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)rE  on_disconnectrl  )rG  r>  s    r   rH  z%_cancel.<locals>.CancelProto.__init__  s    !/!5!5DDKKKr   c                p    | j                                         s| j                             d           d S d S r  )r  rU  rN  rV  s     r   rW  z,_cancel.<locals>.CancelProto.connection_lost  s@    %**,, 4"--d333334 4r   N)r   r   r   rH  rW  r>  s   r   CancelProtor    s=        	  	  	  	  	 	4 	4 	4 	4 	4r   r  r  z!llll   i.)ri  r  r   re   r  r.   r   r
   r   rz  r   rd  rs  rq  rf  rg  re  r  rk  )	r>  r   r0  backend_pidbackend_secretr  rt  ru  msgs	   `        r   _cancelr    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_inforP  rN   )	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    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   rE  rE    sS    * }  ) ) )~4(((((()s    55)r;   r<   r=   r>   )
r;   r`   ra   rb   rc   rd   r-   re   r+   re   )r=   r`   )rZ  r[  rk   re   rl   r   r>  r?  r@  rA  rB  r4  r=   r\  )r  r4  )r  r4  )r  r  )r0  r  )O
__future__r   ri  r   collectionscollections.abcr   enumro  r   r   r   platformr  rY   r  r.   r   rP   rf  r  typingurllib.parser   rL   r}  r   r   r   r   IntEnumr
   StrEnumr&   
namedtupler  r6  unamesystemrO   r   r   r_   rr   r|   r   r   r   r1  r;  r  r=  TypeVar	protocolsrX  rz  r  rh  r  r  re   Enumr  r  r  r  r  r  r  r  r  r  r  r  r  r  rq  rs  rE  r$   r   r   <module>r     s   # " " " " "          $ $ $ $ $ $       				    				        



                         7 7 7 7 7dl 7 7 7    V^   
 /.      .{-     (.


! iJJJ $( ( ( (V" " " "J    05 = = = = =@

 

 

: : : :G	 G	 G	T.! .! .!b%, %, %, %, %,g& %, %, %,P "6>g/8    "? ? ? ? ? ?D%< %< %<P	 	 	 	 	) 	 	 	H H HV    sDI      *     
 +44U;;44T::#%;%;D%A%A!2!25!9!9 1 1$ 7 7 % % % %
/ / /d# # # #L  C C C
    r   