
    :"ri                    (   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jD                  dg d      Z# ejD                  dg d      Z$ ejJ                         jL                  Z'e'dk(  rdZ(ndZ(dZ)	 	 d4dZ*	 	 	 	 	 	 	 	 	 	 d5dZ+d Z,dddZ-d Z.d6dZ/d Z0d Z1 G d dejd                        Z3 ejh                  d ejj                  jd                  !      Z6dd"	 	 	 	 	 	 	 	 	 	 	 	 	 d7d#Z7d$ Z8 G d% d&e9      Z:d' Z; G d( d)e<ejz                        Z>d8d*Z?d9d+Z@d, ZAe>j                  eAe>j                   e?d      e>j                   e?d-      e>j                   e?d-      e>j                   e@d      e>j                   e@d-      iZHd:d.ZId/ ZJd;d0ZKd1 ZLd2 ZMd3 ZNy)<    )annotationsN)Callable   )compat)
exceptions)protocolc                  4    e Zd ZdZdZdZdZdZdZe	d        Z
y)	SSLModer   r               c                V    t        ||       r|S t        | |j                  dd            S )N-_)
isinstancegetattrreplace)clssslmodes     ]/var/www/fortnox.pascalinesoft.com/venv/lib/python3.12/site-packages/asyncpg/connect_utils.pyparsezSSLMode.parse,   s)    gs#NsGOOC566    N)__name__
__module____qualname__disableallowpreferrequire	verify_caverify_fullclassmethodr    r   r   r
   r
   $   s2    GEFGIK7 7r   r
   c                      e Zd ZdZdZy)SSLNegotiationpostgresdirectN)r   r   r   r'   r(   r$   r   r   r&   r&   3   s    HFr   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.confc                   g }	 | j                         sg S | j                         s&t        j                  dj	                  |              g S t
        dk7  rb| j                         j                  t        j                  t        j                  z  z  r&t        j                  dj	                  |              g S | j                  d      5 }|D ]o  }|j                         }|r|j                  d      r'|j                  dd      }|j                  t        d t!        j"                  d	|d
      D                     q 	 d d d        |S # 1 sw Y   |S xY w# t$        $ r Y |S w xY w)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  @   K   | ]  }|j                  d d        yw)r?   r>   N)r   ).0ps     r   	<genexpr>z&_read_password_file.<locals>.<genexpr>   s#      % IIdE*%s   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)passfilepasstabflines       r   _read_password_filer[   ^   sI    G! I!MM8??IK Ii}}&&$,,*EF@@F A"#
 	]]4  	A zz|ts3 ||E40u %XXk4!D%   	  N!	  N  NsB   E 5E A*E 7E A5E>E EE E 	E"!E"c                    t        |       }|syt        ||      D ]_  \  }}|j                  d      rd}|D ]B  \  }}	}
}}|dk7  r||k7  r|	dk7  r|	t        |      k7  r(|
dk7  r|
|k7  r3|dk7  r||k7  r>|c c S  a y)zParse the pgpass file and return the matching password.

    :return:
        Password string, if found, ``None`` otherwise.
    N/	localhost*)r[   ziprQ   str)rW   hostsportsr-   r+   rX   hostportphostpport	pdatabasepuser	ppasswords                r   _read_password_from_pgpassrk      s     "(+G%' 
d??3D9@ 	5E5)UI||T 2CI$9| 	$ r   c                   t        |t              r^t        |      dkD  rPt        |      t        |       k7  r7t        j                  dj                  t        |      t        |                   |S t        |t              r4t        |      dk(  r&t        t        |             D cg c]  }|d   	 }}|S t        t        |             D cg c]  }| }}|S c c}w c c}w )Nr   z+could not match {} port numbers to {} hostsr   )r   listlenr   ClientConfigurationErrorrI   range)rb   re   r   s      r   _validate_port_specrq      s    $#d)a- t9E
"55=DDIs5z+, , K 
D$	CIN!&s5z!23AQ33 K $CJ/000K	 40s   #C		CFunquotec                  d| v r| j                  d      }n| g}g }g }|sht        j                  j                  d      }|r8d|v r(|j                  d      D cg c]  }t	        |       }}nt	        |      }nd}t        ||      }nt        ||      }t        |      D ]  \  }	}
|
d   dk(  r|
}d}n||
d   dk(  r_t        j                  d|
      }|r#|j                  d	      }|j                  d
      }n9t        j                  dj                  |
            |
j                  d      \  }}}|rt        j                  j!                  |      }|j#                  |       |r|r=|rt        j                  j!                  |      }|j#                  t	        |             |j#                  |	           |s|}||fS c c}w )N,PGPORT8  r   r]    [z(?:\[([^\]]+)\])(?::([0-9]+))?r   r   z0invalid IPv6 address in the connection URI: {!r}:)rU   osenvirongetintrq   	enumeraterT   matchgroupr   ro   rI   	partitionurllibr   rs   rR   )hostlistre   rs   	hostspecsrb   hostlist_portsportspecrB   default_portihostspecaddrhostspec_portmr   s                  r   _parse_hostlistr      s   
hNN3'	J	EN::>>(+h08s0CD1ADD"8}L*9lC #9d3 + 78A;#DMa[C:HEAwwqz !
 99FMM   &.%7%7%<"D!]<<''-DT$*LL$8$8$GM%%c-&89%%l1o6?7B $;_  Es   Gc                    | j                  d      rt        j                  d|        	 t        j                  | j                  dd         S # t        $ r t        j                  d|        w xY w)NSSLzUnsupported TLS version: .r   zNo such TLS version: )rQ   r   ro   
ssl_module
TLSVersionr   KeyError)tls_versions    r   _parse_tls_versionr      s|    e$11'}5
 	

$$[%8%8c%BCC 
11#K=1
 	

s   "A "A0c                    	 t         j                  j                         }|dz  | z  j                         S # t        t        f$ r Y y w xY w)Nz.postgresql)pathlibPathhomeRuntimeErrorr   resolve)filenamehomedirs     r   _dot_postgresql_pathr     sM    ,,##% m#h.7799 (# s   6 AAc                  2 d }d x}x}x}x}2d x}}d }| rt         j                  j                  |       }d }|j                  rwt         j                  j	                  |j                  d      }|j                         D ]  \  }}t        |t              s|d   ||<     d|v r|j                  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                               |j(                  r=d|j(                  v r |j(                  j+                  d      \  }}}n|j(                  }d	}nd	x}}|r|j+                  d
      \  } }}!nd	x} }!|s|rt-        ||d      \  }}|j.                  rC|A|j.                  }"|"j1                  d      r|"dd  }"t         j                  j3                  |"      }|!| rt         j                  j3                  |       }|!|!rt         j                  j3                  |!      }|rd|v r<|j                  d      }|s)|r'|j5                  d      D #cg c]  }#t7        |#       }}#d|v r$|j                  d      }|s|rt-        ||      \  }}d|v r|j                  d      }||}d|v r|j                  d      }||}d|v r|j                  d      }||}d|v r|j                  d      }||}d|v r|j                  d      }||}d|v r|j                  d      }||}d|v r|j                  d      }d|v r|j                  d      }d|v r|j                  d      }d|v r|j                  d      }d|v r|j                  d      }d|v r|j                  d      2d|v r|j                  d      }d|v r|j                  d      }d|v r|j                  d      }$||$}d |v r|j                  d       }||}d!|v r|j                  d!      }||}d|v r|j                  d      }||}|r||}ni ||}|Q|Nt9        j:                         }%|%j=                  |       ||%j?                         v r|%|   }&d|&v r<|&j                  d      }|s)|r'|j5                  d      D #cg c]  }#t7        |#       }}#d|&v r$|&j                  d      }|s|rt-        ||      \  }}d|&v r|&j                  d      }||}d|&v r|&j                  d      }||}d|&v r|&j                  d      }||}d|&v r|&j                  d      }||}d|&v r|&j                  d      }||}d|&v r|&j                  d      }||}d|&v r|&j                  d      }||}d|&v r|&j                  d      }||}d|&v r|&j                  d      }||}d|&v r|&j                  d      }||}d|&v r|&j                  d      }||}d|&v r|&j                  d      }2|2d|&v r|&j                  d      }||}d|&v r|&j                  d      }||}d|&v r|&j                  d      }$||$}d |&v r|&j                  d       }||}d!|&v r|&j                  d!      }||}|st        j@                  jC                  d"      }|s0t        j@                  jC                  d#      }'|'rt-        |'|      \  }}|sd$g}tD        d%k(  rd$g}ng d&}t        |t        tF        f      s|g}||}|s\t        j@                  jC                  d'      }(|(r8d|(v r(|(j5                  d      D #cg c]  }#t7        |#       }}#nIt7        |(      }n=d(}n:t        |t        tF        f      r|D #cg c]  }#t7        |#       }}#nt7        |      }tI        ||      }|+t        j                  d)      }|stK        jL                         }|t        j                  d*      }|t        j                  d+      }||}|t#        j$                  d,      |t#        j$                  d-      |c|t        j                  d.      }|#t        j                         }|r
|tN        z  }nd }nt        j                  |      }|tQ        |||||/      }g })d0}*tS        ||      D ]p  \  }+}#|+j1                  d      rEd1|+vr/t        j.                  jU                  |+d2j'                  |#            }+|)jW                  |+       \|)jW                  |+|#f       d}*r |)st#        jX                  d3      |t        j                  d4      }||*rd5}|
#|
rtZ        j\                  ntZ        j^                  },n@|t        j@                  jC                  d6      }|	 t[        |      },ntZ        j^                  },t        |tb        td        f      r	 td        j                  |      }.|.td        jh                  k  rd0}ntk        jl                  tj        jn                        }|.td        jp                  k\  |_9        |.td        jt                  k  rtj        jv                  |_<        n|t        j                  d<      }|r(|j{                  |=       tj        j|                  |_<        nL	 t        d>      }||j{                  |=       nt#        j$                  d?      	 tj        j|                  |_<        |t        j                  dH      }|r6|j{                  |=       |xj                  tj        j                  z  c_B        nCt        dI      }|6	 |j{                  |=       |xj                  tj        j                  z  c_B        |t        j                  dJ      }|st        dK      }||j                         sd }2sd	2|t        j                  dL      }|r|j                  ||2fdMN       n%t        dO      }|	 |j                  ||2fdPN       t        |dQ      rBt        j@                  jC                  dR      }0|0r!t        j                  j                  s|0|_J        |t        j                  dS      }|rt        |      |_L        nt        dT      |_L        |t        j                  dU      }|rJt        |      |_M        n9|du r%tk        j                         }td        jp                  }.ntd        j                  }.|Wt        |t              r2t        dV |D              r t        dW |j                         D              st#        j$                  dX      |$t        j                  dYt        j                        }	 t        |      }|t        j                  d[      }|$t        j                  d\      }|tD        d%k(  rd]nd^}|d_vr$t#        j$                  d`j'                  |            t        |||||.|,||||a
      }1|)|1fS c c}#w c c}#w c c}#w c c}#w # t`        $ r6 d7jU                  d8 tZ        D              }-t#        j$                  d9|-       d w xY w# tf        $ rB d7jU                  d: td        D              }-t#        j$                  d;j'                  |-            d w xY w# t"        j$                  t        t        f$ rp |.td        jt                  kD  r)|d@}dA}/nd }/t#        j$                  dB| dCdD| dE|/F      |.td        jt                  k(  rtj        jv                  |_<        nJ dG       Y Iw xY w# t        t        f$ r Y w xY w# t        t        f$ r Y Qw xY w# t`        $ r? t#        j$                  dZj'                  t        j                  j                  |            d w xY w)bNT)strict_parsingservicePGSERVICEFILE>   r'   
postgresqlzQinvalid DSN: scheme is expected to be either "postgresql" or "postgres", got {!r}@rx   rz   rr   r]   r   re   ru   rd   dbnamer-   r+   r,   rW   r   sslcertsslkeysslrootcertsslnegotiationsslcrlsslpasswordssl_min_protocol_versionssl_max_protocol_versionr1   r2   r3   	PGSERVICEPGHOSTr^   r:   )z/run/postgresqlz/var/run/postgresqlz/tmpz/private/tmpr^   rv   rw   PGUSER
PGPASSWORD
PGDATABASEz-could not determine user name to connect withz/could not determine database name to connect to
PGPASSFILE)rb   rc   r-   r+   rW   Fz	.s.PGSQL.z.s.PGSQL.{}z6could not determine the database address to connect to	PGSSLMODEr   PGSSLNEGOTIATIONz, c              3  T   K   | ]   }|j                   j                  d d       " ywr   r   Nnamer   rA   r   s     r   rC   z._parse_connect_dsn_and_args.<locals>.<genexpr>  s'      " FFNN3,"   &(z+`sslnegotiation` parameter must be one of: c              3  T   K   | ]   }|j                   j                  d d       " ywr   r   r   s     r   rC   z._parse_connect_dsn_and_args.<locals>.<genexpr>  s     H1affnnS#6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                y wr   r   ra   )rA   ks     r   rC   z._parse_connect_dsn_and_args.<locals>.<genexpr>3  s     @1Jq#&@   c              3  <   K   | ]  }t        |t                y wr   r   )rA   vs     r   rC   z._parse_connect_dsn_and_args.<locals>.<genexpr>4  s     I1Jq#&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   rm   popr{   getenvr   get_pg_home_directoryPG_SERVICEFILEr   r   schemer   ro   rI   netlocr   r   pathrQ   rs   rU   r~   configparserConfigParserreadsectionsr|   r}   rJ   rS   rq   getpassgetuserr   rk   r`   joinrR   InternalClientErrorr&   r(   r'   
ValueErrorra   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_CHAINrE   load_cert_chainhasattrsysflagsignore_environmentr   r   minimum_versionmaximum_versioncreate_default_contextr   dictallvaluesSessionAttributeany__members___ConnectionParameters)3dsnrd   re   r+   r,   rW   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_databaserB   dsn_target_session_attrs
pg_serviceservice_paramsr   r   addrshave_tcp_addrshsslnegmodesr   r   
keylogfileparamsr   s3                                                     @r   _parse_connect_dsn_and_argsr"    s    J<@@G@f@{@Vk:>>7N
&&s+<<LL))&,,t)LE!KKM )Sc4(!$RE#J) E!ii	*3!G"-"*&(ii&@#"*224G*1N*B'*.'&-ll3J&K#== ::5577=vfmm7LN N ==fmm#,2MM,C,CC,H)!\%}}&((H|(0(:(:3(?%Ha&((H|(tTJJD$;;8+!;;L&&s++AB/||++L9H<H<<''1D||++L9Hii',/IIcN;qCF;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5(!&+;!<5 8,%#ii6)U2+099.,( *U2+099.,( &.+099*,( (/+C(u$ii-%!$J5 ii)> FE!ii	*?!G"*&+O&B&B/&BO".73F%224JOO34*--//!+G!4^+(,,V4CC03		#?1A??^+(,,V4CC%4S$%?
d~-(,,X6C'#&/(,,Z8C'#&^+(,,V4C|"/(,,Z8C'#&/(,,Z8C'#&.(,,Y7C{!.(,,Y7C"%~-(,,X6C~!$ N2(,,];C"*&)#~5(,,-=>C%-),~-(,,X6C~!$ N2(,,];C"*&)-?(,,2C 07360-?(,,2C 07360)^;/=/A/A.0, ,3/G,>1(,,\:C!)%(
~-(,,X6C~!$**..-::>>(+(48JD$!]
i=D9D dT5M*v
::>>(+h(0s(;<1A<<8}D	D4-	( $%1A%% 4ytT*D|yy"??$D99\*99\*|11;= 	= 11=? 	? yy.H224G"Z/||H-H1 !!#H
 END$ 	"1<<!#GGLLM$8$8$;<LLO LL!Q !N	" ,,DF 	F {ii$
{~%/N!!^5L5L 	 !ZZ^^,>?N%	'7 $,,F#W~&	mmC(G W]]"C''
(F(FGC!(G,?,?!?C(","6"6&"$))O"<K--[-A&0&>&>CO&C&::&F&255[5I","E"E!E#  JF +5*B*B>YYz2F--V-<$$
(I(II$1*=F)	B55V5D  ,, * A AB, ~:.-.>?%fmmo!F ))K0##V6I $  //?@&++#$*%8 ,  s-.ZZ^^O<
cii&B&B*4C''/+-995N+O('&8,'# '9&C#'/+-995N+O('&8,'# 
//1%%//"?D1@@@I0F0F0HII11  	  #!yy"$4$8$8 
	/0DE YY~.
~:&>&)3VF''11) 	) #HxS'1f.F &=o <J  @v = &d  		 "+"  !99A%I  	IIHHHE558??F	> #;;)* 8
 #W__4*2.F%7 !' *.","E"E"9+ GB !C&66A] C?&? (.#  %7.8.B.BCO7-75 ,38T ..  ! !	!@ ./AB Z  11 ,,335I
 	su   y&yy	y 'y% z' .5{5 ~ ~ ~2 %?z$'A{25B
~~~~~/.~/2A:c                   t               }dD ]9  }||   }|t        |t              s|dk  s t        dj	                  ||             |.	 t        |t              rt        t        |      }|dk  rt        	 t        | ||||||||||||||      \  }}t        |||	|
      }|||fS # t        $ r t        dj	                  |            d w xY w)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  rd   re   r+   r,   rW   r.   r  r-   r0   r1   r2   r3   r   r  r5   )localsr   boolr   rI   floatr"  _ClientConfiguration)r  rd   re   r+   r,   rW   r-   r6   r7   r8   r9   r.   r  r0   r1   r2   r3   r   r  
local_varsvar_namevar_valr  r!  configs                            r   _parse_connect_argumentsr,  ^  s*    J- E X&?j$77Q;**0&7*CE EE "
	0/40  #O4O!#   $ 0dDH#'1f[2ME6 "'1&C%A	DF &&  +  	0;;A6#<%& ,00	0s   ,B* *%Cc                  <    e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 ddZddZddZy)TLSUpgradeProtoc                \    t        |      | _        || _        || _        || _        || _        y r   )_create_futureon_datard   re   ssl_contextssl_is_advisory)selflooprd   re   r2  r3  s         r   __init__zTLSUpgradeProto.__init__  s.     &d+		&.r   c                   |dk(  r| j                   j                  d       y | j                  rH| j                  j                  t
        j                  k(  r!|dk(  r| j                   j                  d       y | j                   j                  t        dj                  | j                  | j                                     y )N   ST   NFz9PostgreSQL server at "{host}:{port}" rejected SSL upgrade)rd   re   )r1  
set_resultr3  r2  r   r   r   set_exceptionConnectionErrorrI   rd   re   )r4  datas     r   data_receivedzTLSUpgradeProto.data_received  s    4<LL##D)""  ,,
0D0DD
 LL##E*LL&&++16!YYTYY ,2 ,89:r   c                    | j                   j                         s)|t        d      }| j                   j                  |       y y )Nz!unexpected connection_lost() call)r1  doner<  r;  r4  excs     r   connection_lostzTLSUpgradeProto.connection_lost  s9    ||  "{%&IJLL&&s+ #r   N)r5  asyncio.AbstractEventLooprd   ra   re   r~   r2  ssl_module.SSLContextr3  r%  returnNone)r=  bytesrF  rG  )rB  ztyping.Optional[Exception]rF  rG  )r   r   r   r6  r>  rC  r$   r   r   r.  r.    sK    /'/ / 	/
 +/ / 
/:$,r   r.  _ProctolFactoryR)bound)r3  c                 K   j                  fd       d {   \  }}|j                  t        j                  ddd             	 |j                   d {   }t        d      r[|r#	 j                  ||       d {   }	|	J n|}	 |        }
||
_        |
j                  |	       |	j                  |
       |	|
fS t        j                  j                   |       }|rt        j                  |      }t!        |      }|j#                         }t%        |       |j                          	  ||       d {   \  }	}
||
_        |	|
fS 7 :7 # t
        t        j                  f$ r |j                           w xY w7 # t
        t        j                  f$ r |j                           w xY w7 v# t
        t        j                  f$ r |j                           w xY ww)	Nc                 "    t               S r   )r.  )rd   r5  re   r2  r3  s   r   r   z(_create_ssl_connection.<locals>.<lambda>  s    dD +_> r   z!ll   i/	start_tls)server_hostname)r.   rO  sock)create_connectionwritestructpackr1  	ExceptionasyncioCancelledErrorcloser   rN  is_sslconnection_madeset_protocol	functoolspartial_get_socketdup_set_nodelay)protocol_factoryrd   re   r5  r2  r3  trprdo_ssl_upgradenew_trpg_protoconn_factoryrQ  s    `````       r   _create_ssl_connectionri    s     ))	>d FB
 HHV[[8,-!zz)
 t[!#~~K  .  ? ?)))
 F#%(  (H%x ((""$46 $,,+tEL 2xxzT

	%1t%<<FH,HO8##_ *w--. 

? w556 
4  = 7112 	JJL	s   G3E-G3E$ #E"$E$ (G37F FF B'G3 G GG G3"E$ $+FG3F +G  G3G +G00G3c                B  K   |J |}t        |j                        rA|j                         }t        j                  |      r
| d {   }|j	                  |      }| |||||f}|j
                  t        j                  k(  r|}	|j	                  d       }nE|j
                  t        j                  k(  r|j	                  d       }	nt        |dg|  d {   S 	 t        |dg|  d {   S 7 7 7 # t        $ r Y nw xY wt        |	dg|  d {  7  S w)N)r,   )r.   FT)callabler,   inspectisawaitable_replacer   r
   r   r   __connect_addr_RetryConnectSignal)
r   r5  r!  r+  connection_classrecord_classparams_inputr,   argsparams_retrys
             r   _connect_addrrv    s     L ??$x(%~H(3$ 0,MD ~~&T*	7>>	)40 $FE9D999#FD84888# & : 9   e;d;;;;sg   ADC4	BDC6DC: /C80C: 3D6D8C: :	DDDDDDc                      e Zd Zy)rp  N)r   r   r   r$   r   r   rp  rp  &  s    r   rp  c                   K   t               fd}t        t              rj                  |      }	n j                  r= j
                  t        j                  u r! j                  |gd j                  i}	nV j                  r7t        |g j                   j                  t        j                  k(  d}	n j                  |g }	|	 d {   \  }
}	  d {     |||
||      }|j/                  |       |S 7 27 &# t        j                  t        j                  f$ rp |
j!                          |r\ j                  t        j"                  k(  r|j$                  r) j                  t        j                  k(  r|j$                  r
t'                t(        t*        j,                  f$ r |
j!                           w xY ww)Nc                 6    t        j                         S r   )r   Protocol)r   	connectedr5  r!  rr  s   r   r   z __connect_addr.<locals>.<lambda>6  s    H--it5 r   r.   r5  r2  r3  )r0  r   ra   create_unix_connectionr.   r/   r&   r(   rR  ri  r   r
   r   r   &InvalidAuthorizationSpecificationErrorConnectionDoesNotExistErrorrY  r   rZ  rp  rV  rW  rX  set_connection)r!  retryr   r5  r+  rq  rr  rs  proto_factory	connectorrc  rd  conr{  s   ` ``  `      @r   ro  ro  *  s     t$I5M $//tD		...2G2GG +D**
 
&,jj
	 
*> >'+"NNgnn<>	 +D**=@4@	_FB!D 2r4v|
DCcJO  	99..  	
 NNgmm+BIINNgnn, &'' w--. 

s=   CG#D$G,D 1D2D 6!GD B<GGc                  $    e Zd ZdZdZdZdZdZdZy)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Ir   r  c                      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   | j                         }t        |dd       }|
|dk(  }|k(  S | j                  d       d {   }|k(  S 7 	w)Nin_hot_standbyonz%SELECT pg_catalog.pg_is_in_recovery())get_settingsr   fetchval)
connectionsettingshot_standby_statusis_in_hot_standbyshould_be_in_hot_standbys       r   can_be_usedz+_accept_in_hot_standby.<locals>.can_be_used  sr     **,$X/?F) 2d :
 !$<<< '1&9&97' ! !$<<<!s   >AA
Ar$   )r  r  s   ` r   _accept_in_hot_standbyr  ~  s    	= r   c                      fd}|S )zJ
    Verify the server has not set default_transaction_read_only=True
    c                   K   | j                         }t        |dd      }|dk(  rS  t              |        d {   S 7 w)Ndefault_transaction_read_onlyoffr  )r  r   r  )r  r  is_readonlyshould_be_read_onlys      r   r  z&_accept_read_only.<locals>.can_be_used  sL     **,h(GO$&&@+,?@LLLLs   9AAAr$   )r  r  s   ` r   _accept_read_onlyr    s    M r   c                   K   ywNTr$   )r   s    r   _accept_anyr    s	     s   Tc                @   K   t         |   } ||        d {   S 7 wr   )target_attrs_check)r  attrcan_uses      r   _can_use_connectionr    s!      &G$$$$s   c           	       K   | t        j                         } t        di |\  }}}|j                  }g }d }	d }
	 |D ]E  }	 t	        || ||||       d {   }|j                  |       t        ||       d {   r|}	 n,G |t        j                  k(  r|rt        j                  |      }	d }|rt        j                   |||	             	 |	r|	S |
xs$ t        j                  dj                  |            7 7 # t        $ r}|}
Y d }~d }~ww xY w# d }|rt        j                   |||	             w w xY ww)N)r   r5  r!  r+  rq  rr  c                ^   K   t        j                  fd| D        ddi d {    y 7 w)Nc              3  H   K   | ]  }|us|j                           y wr   )rY  )rA   cchosens     r   rC   z6_connect.<locals>._close_candidates.<locals>.<genexpr>  s     >avo!'')>s   	""return_exceptionsT)rW  gather)connsr  s    `r   _close_candidatesz#_connect.<locals>._close_candidates  s-     ..>U>"&  s   "-+-z=None of the hosts match the target attribute requirement {!r}r$   )rW  get_event_loopr,  r1   rv  rR   r  OSErrorr  r  randomchoicecreate_taskr   TargetServerAttributeNotMatchedrI   )r5  rq  rr  kwargsr  r!  r+  target_attr
candidateschosen_connection
last_errorr   connexr  s                  r   _connectr    sx    |%%'4>v>E66--KJJB 	>D *!!%5!-  !!$',T;???(,% @	>" .===*$*MM*$=!	
 !*.?@B   
 
BB	vk" ? @   
 	
 !*.?@B sk   8E D DC=$D:C?;D.D /AE =D?D	D
DD DD $D==E c                   K    G  fddt         j                        }t        |t              r j	                  ||       d {   \  }}n|j
                  r_|j                  t        j                  k7  rBt        |g| |j
                  |j                  t        j                  k(  d d {   \  }}n2  j                  |g|  d {   \  }}t        t        |             t        j                  ddd||      }	 |j!                  |       |j"                   d {    |j%                          y 7 7 7 o7 # |j%                          w xY ww)Nc                      e Zd Z fdZd Zy)_cancel.<locals>.CancelProtoc                4    t              | _        d| _        y )NF)r0  on_disconnectrZ  )r4  r5  s    r   r6  z%_cancel.<locals>.CancelProto.__init__  s    !/!5DDKr   c                p    | j                   j                         s| j                   j                  d       y y r  )r  r@  r:  rA  s     r   rC  z,_cancel.<locals>.CancelProto.connection_lost  s-    %%**,""--d3 -r   N)r   r   r   r6  rC  r5  s   r   CancelProtor    s    	 	4r   r  r|  z!llll   i.)rW  rz  r   ra   r}  r.   r   r
   r   ri  r   rR  ra  r_  rT  rU  rS  r  rY  )	r5  r   r!  backend_pidbackend_secretr  rc  rd  msgs	   `        r   _cancelr    s.    4g&& 4 $22;EEB::&..GMM91BB "JJ &'.. @B BFB 2411$"$ $FBR) ++gr8[.
IC


+ FB$ 	

sa   AED:A*E/D<0ED>4E E $E %E )E<E>E E EEc                `    | j                  d      }|t        dj                  |             |S )Nsocketz+could not get the socket for transport {!r})get_extra_infor<  rI   )	transportrQ  s     r   r_  r_    s9    ##H-D|9@@KM 	MKr   c                    t        t        d      r| j                  t        j                  k7  r0| j	                  t        j
                  t        j                  d       y y )NAF_UNIXr   )r   r  familyr  
setsockoptIPPROTO_TCPTCP_NODELAYrP  s    r   ra  ra    s=    69%)F**F,>,>B *Gr   c                t    	 | j                   } |       S # t        $ r t        j                  |       cY S w xY w)Nr  )create_futurer   rW  Future)r5  r  s     r   r0  r0    s<    **   )~~4(()s    77)rW   zpathlib.PathrF  z#typing.List[typing.Tuple[str, ...]])
rW   typing.Optional[pathlib.Path]rb   ztyping.List[str]rc   ztyping.List[int]r-   ra   r+   ra   )rF  r  )rb  zCallable[[], _ProctolFactoryR]rd   ra   re   r~   r5  rD  r2  rE  r3  r%  rF  z1typing.Tuple[asyncio.Transport, _ProctolFactoryR])r  r%  )r  r%  )r  r  )r!  r
  )O
__future__r   rW  r   collectionscollections.abcr   enumr]  r   r{   r   platformr  rT   r  r.   r   rK   rT  r   typingurllib.parser   rG   rl  rx   r   r   r   IntEnumr
   StrEnumr&   
namedtupler
  r'  unamesystemrJ   r   r   r[   rk   rq   r   r   r   r"  r,  rz  r.  TypeVar	protocolsrI  ri  rv  rV  rp  ro  ra   Enumr  r  r  r  r  r  r  r  r  r  r  r  r  r  r_  ra  r0  r$   r   r   <module>r     s   #    $    	    	     
       7dll 7V^^ 
 /..   .{--  (..

!
! iJJ $(.(V"2""  " 	"
 "J  05 =@

:G	T.!b%,g&& %,P "6>>g//88  "? 5	?
 ? ? $? '? ? 7?D%<P	) 	HVsDII *
 +4U;4T:##%;D%A!25!9 1$ 7 %
/d#LC
r   