
    9h                     `   S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKrS SKrS SKrS SKJr  S SKrS SKJr  S SKJr  S SKJrJrJr  S SKJr  S SK J!r!J"r"J#r#J$r$   S SK%r%SS/r'\RP                  " \)5      r*S	r+S
r,Sr- " S S\5      r. " S S5      r/SSSSSSSSSSSSSSS.S jr0 " S S\ Rb                  5      r2 " S S5      r3 " S S5      r4 " S S\45      r5 " S S\45      r6 " S  S!\45      r7 " S" S#\45      r8S$ r9S% r:S'S& jr;g! \& a    Sr% Nf = f)(    N)IntEnum)AbstractTokenProvider)ApiVersionRequestSaslAuthenticateRequestSaslHandShakeRequest)GroupCoordinatorResponse_v0)create_futurecreate_taskget_running_loopwait_forAIOKafkaConnectioncreate_conni#  i      c                   ,    \ rS rSrSrSrSrSrSrSr	Sr
g	)
CloseReason1   r   r                N)__name__
__module____qualname____firstlineno__CONNECTION_BROKENCONNECTION_TIMEOUTOUT_OF_SYNC	IDLE_DROPSHUTDOWNAUTH_FAILURE__static_attributes__r       RC:\Suresh\moveshuttle\MDcreated\moveengine\venv\Lib\site-packages\aiokafka/conn.pyr   r   1   s"    KIHLr#   r   c                        \ rS rSrS rS rSrg)VersionInfo:   c                     Xl         g N	_versions)selfversionss     r$   __init__VersionInfo.__init__;   s    !r#   c           	      
   US   R                   nX R                  ;  a  US   $ U R                  U   u  p4[        U5       H!  nX5R                  s=::  a  U::  d  M   Us  $   M#     [        R
                  " SU SU SU S35      e)Nr   z%Could not pick a version for API_KEY=z from [z, z].)API_KEYr+   reversedAPI_VERSIONErrors
KafkaError)r,   request_versionsapi_keymin_versionmax_version	req_klasss         r$   	pick_bestVersionInfo.pick_best>   s    "1%--..(#A&&#'>>'#: !"23I33B{B   C 4 3G9 =}B{m2/
 	
r#   r*   N)r   r   r   r   r.   r;   r"   r   r#   r$   r&   r&   :   s    "
r#   r&   aiokafka@  r      r   	PLAINTEXTkafka	client_idrequest_timeout_msapi_versionssl_contextsecurity_protocolmax_idle_mson_closesasl_mechanismsasl_plain_usernamesasl_plain_passwordsasl_kerberos_service_namesasl_kerberos_domain_namesasl_oauth_token_providerversion_hintc                r   #    [        U UUUUUUUUU	U
UUUUUS9nUR                  5       I S h  vN   U$  N7f)NrC   )r   connect)hostportrD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   conns                    r$   r   r   N   s\     & -+%//#=";";!!D$ ,,.K s   ,757c                   4   ^  \ rS rSrU 4S jrU 4S jrSrU =r$ )AIOKafkaProtocolw   c                6   > Xl         [        TU ]  " USU0UD6  g )Nloop)_closed_futsuperr.   )r,   
closed_futr[   argskw	__class__s        r$   r.   AIOKafkaProtocol.__init__x   s     %$0T0R0r#   c                    > [         TU ]  U5        U R                  R                  5       (       d  U R                  R	                  S 5        g g r)   )r]   connection_lostr\   	cancelled
set_result)r,   excra   s     r$   rd    AIOKafkaProtocol.connection_lost|   s>    $))++''- ,r#   )r\   )r   r   r   r   r.   rd   r"   __classcell__)ra   s   @r$   rX   rX   w   s    1. .r#   rX   c                      \ rS rSrSrSrSrSSSSSSSSSSSSSSS	.S
 jr\4S jr	S r
S rS rS rS rS rS r\S 5       r\S 5       r\S 5       rS r\S 5       r\S 5       rS"S jrS"S jrS rS#S jrS r\S 5       rS r S  r!S!r"g)$r      z)Class for manage connection to Kafka nodeNr=   r>   r?   rA   rB   )rD   rE   rF   rG   rH   rI   rJ   rK   rM   rL   rN   rO   rP   rQ   c                "   [        5       nU
S:X  a  [        c   S5       eU
S:X  aE  Ub  [        U[        5      (       d  [	        S5      e[        [        USS 5      5      (       d   S5       eUU l        Xl        X l	        US-  U l
        XPl        X0l        X`l        Xpl        Xl        Xl        Xl        Xl        Xl        Xl        UU l        [-        0 5      U l        S =U l        =U l        U l        [6        R8                  " 5       U l        S U l        SU l        S U l         Xl!        [D        RF                  " 5       U l$        S U l%        Xl&        URO                  5       (       a0  [P        RR                  " [T        RV                  " S	5      5      U l,        g g )
NGSSAPIzgssapi library requiredOAUTHBEARERz^sasl_oauth_token_provider needs to be provided implementing aiokafka.abc.AbstractTokenProvidertokenz8sasl_oauth_token_provider must implement method #token()  r   r   )-r   gssapi
isinstancer   
ValueErrorcallablegetattr_loop_host_port_request_timeout_api_version
_client_id_ssl_context_security_protocol_sasl_mechanism_sasl_plain_username_sasl_plain_password_sasl_kerberos_service_name_sasl_kerberos_domain_name_sasl_oauth_token_provider_version_hintr&   _version_info_reader_writer	_protocolcollectionsdeque	_requests
_read_task_correlation_idr\   _max_idle_mstime	monotonic_last_action_idle_handle_on_close_cb	get_debug	tracebackextract_stacksys	_getframe_source_traceback)r,   rT   rU   rD   rE   rF   rG   rH   rI   rJ   rK   rM   rL   rN   rO   rP   rQ   r[   s                     r$   r.   AIOKafkaConnection.__init__   s   (  !X%%@'@@%]*(0
)+@9 9 !P  17DA  JIJ  


 2T 9'#'"3-$7!$7!+E(*C'*C' *(_7;;;t|dn %**, ' NN, $>>%.%<%<S]]1=M%ND" r#   c                 H   U R                  5       (       a  UR                  SU < 3[        U S9  U R                  R	                  5       (       a  g S U l        U R                  5         U SS.nU R                  b  U R                  US'   U R                  R                  U5        g g )NzUnclosed AIOKafkaConnection )sourcezUnclosed AIOKafkaConnection)rV   messagesource_traceback)		connectedwarnResourceWarningrv   	is_closedr   closer   call_exception_handler)r,   	_warningscontexts      r$   __del__AIOKafkaConnection.__del__   s    >>NN.th7  
 zz##%% !%DJJL 8G %%1.2.D.D*+JJ--g6) r#   c                 B  ^#    U R                   n[        5       U l        U R                  S;   a  S nO-U R                  S;   d   eU R                  c   eU R                  n[
        R                  " [        US9n[        U R                  X1S9m[        R                  " U R                  5       IS h  vN   UR                  U4S jU R                  U R                  US9I S h  vN u  pES S S 5      IS h  vN   [
        R                  " WTX15      nX6TsU l        U l        U l        U R'                  5       U l        U R*                  b5  UR-                  U R.                  [0        R2                  " U 5      5      U l         U R6                  (       a(  U R6                  S:  a  U R9                  5       I S h  vN   U R                  S;   a  U R;                  5       I S h  vN   X64$  GN2 GN N! , IS h  vN  (       d  f       GN	= f NR N,!   U R=                  5         e = f7f)	N)rA   SASL_PLAINTEXT)SSLSASL_SSL)limitr[   )r[   c                     > T $ r)   r   )protocols   r$   <lambda>,AIOKafkaConnection.connect.<locals>.<lambda>   s    r#   )sslr   
   )r   r   )rv   r	   r\   r}   r|   asyncioStreamReaderREADER_LIMITrX   async_timeouttimeoutry   create_connectionrT   rU   StreamWriterr   r   r   _create_reader_taskr   r   	call_soon_idle_checkweakrefrefr   r   _do_version_lookup_do_sasl_handshaker   )r,   r[   r   reader	transport_writerr   s          @r$   rS   AIOKafkaConnection.connect   s    zz(?""&EEC**.AAAA$$000##C%%LtD#D$4$4fH (()>)>??!%!7!7 $))TYYC "8 " LI @? %%i6H5;X2dlDN 224 ( $t/?/?TAR SD	!!d&8&8G&C--///&&*HH--///
 ~1 @ @???  0 0	JJLs   B-H0G"1H4.G*"G%#G*)H4G(5BH>4H	 2H3'H	 HH	 H%G*(H*H0G31H=HH	 H	 	HHc                    #    [         S   " 5       nU R                  U5      I S h  vN n0 nUR                   H  u  pEnXV::  d   U SU SU 35       eXV4X4'   M!     [        U5      U l        g  NF7f)Nr   z! should be less than or equal to z for )r   sendapi_versionsr&   r   )r,   version_reqresponser-   r7   r8   r9   s          r$   r   %AIOKafkaConnection._do_version_lookup  s     '*,;//191F1F-G+- -    +}E'<- "- :H 2G )2 0s   #A.A,AA.c                 j  #    U R                   (       a+  U R                   S:  a  S nU R                  S:X  d   S5       eGOU R                  R                  [        5      nU" U R                  5      nU R                  U5      I S h  vN n[        R                  " UR                  5      nU[        R                  La(  U" U 5      nU R                  [        R                  US9  UeU R                  UR                  ;  aP  [        R                  " SU R                   SUR                   35      nU R                  [        R                  US9  UeU R                  S;   d   eU R                  S:X  a%  U R                  S	:X  a  [         R#                  S
5        U R                  S:X  a  U R%                  5       nObU R                  R'                  S5      (       a  U R)                  5       nO1U R                  S:X  a  U R+                  5       nOU R-                  5       nUb0  WR.                  S:  a   U R                  R                  [0        5      nOS nS n	Sn
 UR3                  U	5      I S h  vN nUc  OUu  pUc  U R5                  X5      I S h  vN n	OU" U5      nU R                  U5      I S h  vN n[        R                  " UR                  5      nU[        R                  La2  U" UR6                  5      nU R                  [        R                  US9  UeUR8                  n	M  U R                  S:X  a!  [         R;                  SU R<                  5        g U R                  S:X  a  [         R;                  S5        g [         R;                  SU R>                  U R                  5        g  GN# GND GN# GN7f)Nr   rm   zOnly GSSAPI supported for v0.9reasonrg   zKafka broker does not support z) sasl mechanism. Enabled mechanisms are: )PLAINrm   SCRAM-SHA-256SCRAM-SHA-512rn   r   r   z*Sending username and password in the clearz
SCRAM-SHA-rn   r   TzAuthenticated as %s via GSSAPIzAuthenticated via OAUTHBEARERzAuthenticated as %s via %s) r   r~   r   r;   r   r   r4   for_code
error_codeNoErrorr   r   r!   enabled_mechanismsUnsupportedSaslMechanismErrorr}   logwarningauthenticator_gssapi
startswithauthenticator_scramauthenticator_oauthauthenticator_plainr3   r   step_send_sasl_tokenerror_messagesasl_auth_bytesinfosasl_principalr   )r,   handshake_klasssasl_handshaker   
error_typeerrorrg   authenticator
auth_klass
auth_bytesexpect_responserespayloadreqresps                  r$   r   %AIOKafkaConnection._do_sasl_handshake  s9     $"4"4w">"O''83U5UU3"00::;OPO,T-A-ABN!YY~66H)<)<=J/"4(

+":":
F##8+F+FF::4T5I5I4J K::B:U:U9VX 

+":":
D	## (
 
 	
 
 ##'77$$/KKDE8+ 557M!!,,\:: 446M!!]2 446M 446M&>+E+E+I++556MNJJ
%**:66C{'*$G !#'#8#8#RR
 )!YYs^+#__T__=
V^^3$T%7%78CJJk&>&>CJHI!11
) , 8+HH5t7J7JK!!]2HH45HH,))$$Q 7\ 7 S ,sJ   BN3N'G!N3&N*'#N3
N-!N3,N0-C;N3*N3-N30N3c                 T    [        U R                  U R                  U R                  S9$ )N)r[   rM   rL   )SaslPlainAuthenticatorrv   r   r   r,   s    r$   r   &AIOKafkaConnection.authenticator_plaint  s(    % $ 9 9 $ 9 9
 	
r#   c                 >    [        U R                  U R                  S9$ )N)r[   	principal)SaslGSSAPIAuthenticatorrv   r   r   s    r$   r   'AIOKafkaConnection.authenticator_gssapi{  s    &))
 	
r#   c                 j    [        U R                  U R                  U R                  U R                  S9$ )N)r[   rM   rL   rK   )ScramAuthenticatorrv   r   r   r~   r   s    r$   r   &AIOKafkaConnection.authenticator_scram  s1    ! $ 9 9 $ 9 9//	
 	
r#   c                 (    [        U R                  S9$ )N)rP   )OAuthAuthenticatorr   r   s    r$   r   &AIOKafkaConnection.authenticator_oauth  s    !&*&E&E
 	
r#   c                 f    U R                   nU R                  =(       d    U R                  nU SU 3$ )N@)r   r   rT   )r,   servicedomains      r$   r   !AIOKafkaConnection.sasl_principal  s2    2200=DII!F8$$r#   c                 D   UR                  5       (       a  g  UR                  5         g ! [         al  n[        U[        [
        [        45      (       d  [        R                  S5        U" 5       nUb#  UR                  [        R                  US9   S nAg  S nAg S nAff = f)Nz*Unexpected exception in AIOKafkaConnectionr   )re   result	Exceptionrr   OSErrorEOFErrorConnectionErrorr   	exceptionr   r   r   )clsself_ref	read_taskrg   r,   s        r$   _on_read_task_error&AIOKafkaConnection._on_read_task_error  s       	J 	JcGX#GHHJK:D

+"?"?S
I  	Js   ) 
BABBc                 n   U " 5       nUc  g [         R                  " 5       UR                  -
  nUR                  S-  nX#:  a1  UR                  (       d   UR                  [        R                  5        g UR                  (       a  UnOX2-
  nUR                  R                  XAR                  U 5      Ul        g )Nrp   )r   r   r   r   r   r   r   r   rv   
call_laterr   r   )r  r,   idle_forr   
wake_up_ins        r$   r   AIOKafkaConnection._idle_check  s    z<>>#d&7&77##d* JJ{,,-~~ %
$/
 $

 5 5,,h!Dr#   c                 <    SU R                    SU R                   S3$ )Nz<AIOKafkaConnection host=z port=>)rT   rU   r   s    r$   __repr__AIOKafkaConnection.__repr__  s    *499+VDII;aHHr#   c                     U R                   $ r)   )rw   r   s    r$   rT   AIOKafkaConnection.host      zzr#   c                     U R                   $ r)   )rx   r   s    r$   rU   AIOKafkaConnection.port  r  r#   c           	      Z   U R                   c0  [        R                  " SU R                   SU R                   35      eU R                  5       nUR                  X0R                  S9nUR                  5       UR                  5       -   n[        R                  " S[        U5      5      n U R                   R                  Xe-   5        ["        R%                  SXU5        U(       d  U R                   R'                  5       $ U R(                  R+                  5       nU R,                  R/                  X1U45        [1        XR2                  5      $ ! [         aV  nU R                  [        R                   S9  [        R                  " SU R                   SU R                   SU 35      UeS nAff = f)	NNo connection to broker at :)correlation_idrD   >ir   Connection at 	 broken: z%s Request %d: %s)r   r4   KafkaConnectionErrorrw   rx   _next_correlation_idbuild_request_headerr{   encodestructpacklenwriter	  r   r   r   r   debugdrainrv   r	   r   appendr   ry   )	r,   requestr   r#  headerr   sizeerrfuts	            r$   r   AIOKafkaConnection.send  sk   <<---djj\4::,G  224--)__ . 
 --/GNN$44{{4W.	LLt~. 			%tWE<<%%''jj&&(c*	
 2233  	JJk;;J<-- Adjj\3%H	s   )E
 

F*AF%%F*c           	         U R                   c0  [        R                  " SU R                   SU R                   35      e[
        R                  " S[        U5      5      n U R                   R                  X1-   5        U(       d  U R                   R                  5       $ U R                  R                  5       nU R                   R#                  S S U45        [%        XPR&                  5      $ ! [         aV  nU R                  [        R                  S9  [        R                  " SU R                   SU R                   SU 35      UeS nAff = f)Nr!  r"  r$  r%  r&  r'  )r   r4   r(  rw   rx   r,  r-  r.  r/  r	  r   r   r   r1  rv   r	   r   r2  r   ry   )r,   r   r   r5  r6  r7  s         r$   r   #AIOKafkaConnection._send_sasl_token  s   <<---djj\4::,G  {{4W.	LLt~. <<%%''jj&&(tT3/02233  	JJk;;J<-- Adjj\3%H	s   C* *
E
4AEE
c                 |    [        U R                  S L=(       a    U R                  R                  5       (       + 5      $ r)   )boolr   at_eofr   s    r$   r   AIOKafkaConnection.connected  s+    DLL,JT\\5H5H5J1JKKr#   c                 $   [         R                  SU R                  U R                  5        U R                  Gb%  U R
                  R                  5         S =U l        U l        U R                  R                  5       (       d!  U R                  R                  5         S U l        U R                   Hn  u    p4UR                  5       (       a  M  [        R                  " SU R                   SU R                   S35      nUb  X%l        X%l        UR                  U5        Mp     [         R"                  " 5       U l
        U R$                  b  U R%                  X5        S U l        U R&                  b  U R&                  R                  5         U R(                  $ )NzClosing connection at %s:%sr&  r"  z closed)r   r0  rw   rx   r   r   r   r   donecancelr   r4   r(  	__cause____context__set_exceptionr   r   r   r   r\   )r,   r   rg   r   r7  r   s         r$   r   AIOKafkaConnection.close  s4   		/TZZH<<#LL *..DL4<??''))&&("&!^^	1xxzz"77(Adjj\IE *-,/)%%e, , )..0DN  ,!!$/$(!($$& r#   c                     [         R                  " U 5      n[        U R                  U5      5      nUR	                  [
        R                  " U R                  U5      5        U$ r)   )r   r   r
   _readadd_done_callback	functoolspartialr  )r,   r  r  s      r$   r   &AIOKafkaConnection._create_reader_task  sO    ;;t$

8 45	##d66A	
 r#   c                   #    U " 5       nUc  g UR                   nA UR                  S5      I S h  vN n[        R                  " SU5      u  nUR                  U5      I S h  vN nU " 5       nUc  g UR	                  U5        AMj   NU N%7f)Nr   r$  )r   readexactlyr,  unpack_handle_frame)r  r,   r   r   r5  s        r$   rG  AIOKafkaConnection._read!  s      z<++A..DmmD$/GT++D11D:D|t$ . 2s!   .B
B1B
"B#$B
B
c                 f   U R                   S   u  p#nUc(  UR                  5       (       d  UR                  U5        GO@[        R                  " U5      nUR                  U5      nUR                  nU R                  S:X  a5  U[        L a,  US:w  a&  UR                  S:X  a  [        R                  S5        OzUR                  U:w  aj  [        R                  " SU SUR                   35      nUR                  5       (       d  UR                  U5        U R                  [         R"                  S9  g UR                  5       (       d9  UR%                  U5      n[        R'                  SXU5        UR                  U5        [(        R*                  " 5       U l        U R                   R/                  5         g )Nr   r?   zKafka 0.8.2 quirk -- GroupCoordinatorResponse correlation id does not match request. This should go away once at least one topic has been initialized on the brokerz#Correlation ids do not match: sent z, recv r%  z%s Response %d: %s)r   r@  rf   ioBytesIOparse_response_headerRESPONSE_TYPErz   GroupCoordinatorResponser#  r   r   r4   CorrelationIdErrorrD  r   r   r   decoder0  r   r   r   popleft)	r,   r   r#  r3  r7  response_header	resp_typer   r   s	            r$   rO   AIOKafkaConnection._handle_frame9  sh   '+~~a'8$!88::t$::d#D%;;DAO--I !!Y.!99"a'#22a71 !//>A119.9I J,;;<> xxzz%%e,

+"9"9
:88::$++D1		.hOx( !NN, 	 r#   c                 H    U R                   S-   S-  U l         U R                   $ )Nr   l        )r   r   s    r$   r)  'AIOKafkaConnection._next_correlation_idg  s&     $ 4 4q 8EA###r#   )rz   r{   r\   r   rw   r   r   rv   r   r   rx   r   r   r   ry   r   r   r   r~   r   r   r   r}   r   r|   r   r   r   T)NN)#r   r   r   r   __doc__r   r   r.   warningsr   rS   r   r   r   r   r   r   propertyr   classmethodr  staticmethodr   r  rT   rU   r   r   r   r   r   rG  rO  r)  r"   r   r#   r$   r   r      s   3G  %  #*"&"&%GOV !) 7.$L
3Vp




 % % J J  ,I    4<4*L 8  .,!\$r#   c                        \ rS rSrS rS rSrg)BaseSaslAuthenticatoril  c                 P    U R                   R                  S U R                  U5      $ r)   )rv   run_in_executor_step)r,   r   s     r$   r   BaseSaslAuthenticator.stepm  s    zz))$

GDDr#   c                 ^     U R                   R                  U5      nU$ ! [         a     gf = f)zProcess next token in sequence and return with:
``None`` if it was the last needed exchange
``tuple`` tuple with new token and a boolean whether it requires an
    answer token
N)_authenticatorr   StopIteration)r,   r   datas      r$   ri  BaseSaslAuthenticator._stepp  s8    	&&++G4D K  		s    
,,r   N)r   r   r   r   r   ri  r"   r   r#   r$   rf  rf  l  s    Er#   rf  c                        \ rS rSrS rS rSrg)r   i~  c                R    Xl         X0l        X l        U R                  5       U l        g r)   )rv   r   r   r   rl  )r,   r[   rM   rL   s       r$   r.   SaslPlainAuthenticator.__init__  s$    
$7!$7!"668r#   c              #      #    SR                  U R                  U R                  U R                  /5      R                  S5      nUS4v nUS:X  d   S5       eg7f)z*Automaton to authenticate with SASL tokens utf-8Tr#   z4Server should either close or send an empty responseN)joinr   r   r+  )r,   rn  r   s      r$   r   *SaslPlainAuthenticator.authenticator_plain  sc      yy))))))
 &/ 	 4Zs{RRR{s   AA)rl  rv   r   r   N)r   r   r   r   r.   r   r"   r   r#   r$   r   r   ~  s    9Sr#   r   c                        \ rS rSrS rS rSrg)r   i  c                F    Xl         X l        U R                  5       U l        g r)   )rv   
_principalr   rl  )r,   r[   r   s      r$   r.    SaslGSSAPIAuthenticator.__init__  s    
#"779r#   c              #     #    [         R                  " U R                  [         R                  R                  S9nUR                  [         R                  R                  5      n[         R                  " USS9nS nUR                  (       d5  UR                  U5      nU=(       d    SnUS4v nUR                  (       d  M5  UR                  U5      R                  n[        R                  " S[        US   -  5      nXvSS  -   nUR!                  X`R                  R#                  5       -   S	5      R                  nUS	4v   g 7f)
N)	name_typeinitiate)nameusager#   Tbr   r   F)rq   Namerz  NameTypehostbased_servicecanonicalizeMechTypekerberosSecurityContextcompleter   unwrapr   r,  r-  SASL_QOP_AUTHwrapr+  )r,   r  cname
client_ctxserver_tokenclient_tokenmsgqops           r$   r   ,SaslGSSAPIAuthenticator.authenticator_gssapi  s    {{OOoo77
 !!&//":":;++jI
%%%??<8L'.3L!-t!33L	 %%% -55kk#}s1v56GmoocOO$:$:$<<eDLLEls   B<E  B E )rl  rv   rz  N)r   r   r   r   r.   r   r"   r   r#   r$   r   r     s    :
r#   r   c                       \ rS rSr\R
                  \R                  S.rS rS r	S r
S rS rS rS	 rS
 r\S 5       rSrg)r   i  )r   r   c                   Xl         [        [        R                  " 5       5      R	                  SS5      U l        SU l        S U l        X0l        UR                  S5      U l
        U R                  U   U l        SR                  UR                  5       R                  S5      SS 5      U l        S U l        S U l        S U l        S U l        S U l        S U l        U R/                  5       U l        g )N- ru  r   r   )rv   struuiduuid4replace_nonce_auth_message_salted_passwordr   r+  r   
MECHANISMS	_hashfuncrv  lowersplit	_hashname_stored_key_client_key_client_signature_client_proof_server_key_server_signaturer   rl  )r,   r[   rM   rL   rK   s        r$   r.   ScramAuthenticator.__init__  s     
$**,'//R8 $$7!$7$>$>w$G!8!5!5!7!=!=c!B1Q!GH!%!!%"668r#   c                     U R                   R                  SS5      R                  SS5      nSU SU R                   3nU =R                  U-  sl        SU-   $ )N=z=3D,z=2Czn=z,r=zn,,)r   r  r  r  )r,   quoted_usernameclient_first_bares      r$   first_message ScramAuthenticator.first_message  sd    
 %%--c59AA3N 	 ! 1T[[MB//(((r#   c                    U =R                   SU-   -  sl         [        S UR                  S5       5       5      nUS   nUR                  U R                  5      (       d  [        S5      eX0l        U =R                   SU R                  -   -  sl         [        R                  " US   R                  S5      5      n[        US   5      nU R                  XE5        U R                  U R                  S	5      U l        U R                  U R                  5      R                  5       U l        U R                  U R                   U R                   R                  S5      5      U l        [$        R'                  U R                  U R"                  5      U l        U R                  U R                  S
5      U l        U R                  U R*                  U R                   R                  S5      5      U l        g )Nr  c              3   D   #    U  H  oR                  S S5      v   M     g7fr  r   Nr  .0pairs     r$   	<genexpr>BScramAuthenticator.process_server_first_message.<locals>.<genexpr>       M5LTjja((5L    rz.Server nonce, did not start with client nonce!z
,c=biws,r=sru  is
   Client Keys
   Server Key)r  dictr  r   r  rs   base64	b64decoder+  intcreate_salted_passwordhmacr  r  r  digestr  r  r   
_xor_bytesr  r  r  )r,   server_firstparamsserver_noncesalt
iterationss         r$   process_server_first_message/ScramAuthenticator.process_server_first_message  s   cL00M\5G5G5LMMc{&&t{{33MNN"lT[[88s 2 27 ;<%
##D599T%:%:MJ>>$*:*:;BBD!%d0077@"
 0::d44
  99T%:%:MJ!%d0077@"
r#   c                     [         R                  " U R                  5      R                  S5      nSU R                   SU 3$ )Nru  z	c=biws,r=z,p=)r  	b64encoder  rX  r  )r,   client_proofs     r$   final_message ScramAuthenticator.final_message  s:    ''(:(:;BB7K4;;-s<.99r#   c                     [        S UR                  S5       5       5      nU R                  [        R                  " US   R                  S5      5      :w  a  [        S5      eg )Nc              3   D   #    U  H  oR                  S S5      v   M     g7fr  r  r  s     r$   r  BScramAuthenticator.process_server_final_message.<locals>.<genexpr>  r  r  r  vru  zServer sent wrong signature!)r  r  r  r  r  r+  rs   )r,   server_finalr  s      r$   process_server_final_message/ScramAuthenticator.process_server_final_message  sW    M\5G5G5LMM!!V%5%5fSk6H6H6Q%RR;<< Sr#   c              #      #    U R                  5       R                  S5      nUS4v nU R                  UR                  S5      5        U R	                  5       R                  S5      nUS4v nU R                  UR                  S5      5        g 7f)Nru  T)r  r+  r  rX  r  r  )r,   client_firstr  client_finalr  s        r$   r   &ScramAuthenticator.authenticator_scram   s     ))+227;)4//)),*=*=g*FG))+227;)4//)),*=*=g*FGs   BBc                 \    [         R                  " XU R                  S9R                  5       $ )N)	digestmod)r  newr  r  )r,   keyr  s      r$   r  ScramAuthenticator.hmac  s     xxDNN;BBDDr#   c                 f    [         R                  " U R                  U R                  X5      U l        g r)   )hashlibpbkdf2_hmacr  r   r  )r,   r  r  s      r$   r  )ScramAuthenticator.create_salted_password  s&     ' 3 3NND55t!
r#   c                 8    [        S [        X5       5       5      $ )Nc              3   .   #    U  H  u  pX-  v   M     g 7fr)   r   )r  lbrbs      r$   r  0ScramAuthenticator._xor_bytes.<locals>.<genexpr>  s     <+;RW+;s   )byteszip)leftrights     r$   r  ScramAuthenticator._xor_bytes  s    <3t+;<<<r#   )r  rl  r  r  r  r  r  rv   r  r  r   r   r  r  r  N)r   r   r   r   r  sha256sha512r  r.   r  r  r  r  r   r  r  rd  r  r"   r   r#   r$   r   r     sU      J
90	)
4:=
HE

 = =r#   r   c                   ,    \ rS rSrS rS rS rS rSrg)r   i  c                    Xl         SU l        g )NFr   _token_sent)r,   rP   s     r$   r.   OAuthAuthenticator.__init__  s    *C' r#   c                    #    U R                   (       a  g U R                  R                  5       I S h  vN nU R                  5       nSU l         U R	                  X#5      R                  S5      S4$  N=7f)NTru  )r  r   ro   _token_extensions_build_oauth_client_requestr+  )r,   r   ro   token_extensionss       r$   r   OAuthAuthenticator.step  sj     55;;==113,,UELLWU
 	
 >s   0A2A0>A2c                     SU U S3$ )Nzn,,auth=Bearer zr   )r,   ro   r  s      r$   r  .OAuthAuthenticator._build_oauth_client_request%  s    $UG,<+=XFFr#   c           	      (   [        [        U R                  SS5      5      (       ag  U R                  R                  5       n[	        U5      S:  a>  SR                  UR                  5        VVs/ s H  u  p#U SU 3PM     snn5      nSU-   $ gs  snnf )zv
Return a string representation of the OPTIONAL key-value pairs
that can be sent with an OAUTHBEARER initial request.

extensionsNr   r  r  )rt   ru   r   r  r.  rv  items)r,   r  kr  r  s        r$   r  $OAuthAuthenticator._token_extensions(  s     GD;;\4PQQ88CCEJ:"kk*:J:J:L"M:L$!aS!::L"MN|# #Ns   -B
r  N)	r   r   r   r   r.   r   r  r  r"   r   r#   r$   r   r     s    !	
Gr#   r   c                 R   U R                  S5      (       a&  U R                  S5      (       a  [        R                  $ [        R                  [        R                  4 H  n [        R
                  " X5        Us  $    [        R                  $ ! [        [        [        4 a     MH  f = f)z
Attempt to determine the family of an address (or hostname)

:return: either socket.AF_INET or socket.AF_INET6 or socket.AF_UNSPEC
if the address family could not be determined
[])
r   endswithsocketAF_INET6AF_INET	inet_ptonr	  rs   AttributeError	AF_UNSPEC)addressafs     r$   _address_familyr  9  s     #7#3#3C#8#8~~v/	R) I 0 	 ^4 		s   !BB&%B&c                 P   U R                  5       n U R                  S5      (       aF  [        R                  nU SS R	                  S5      u  p#U(       a  [        USS 5      nO[        nX$U4$ SU ;  a  [        U 5      nU [        U4$  [        R                  " [        R                  U 5        U [        [        R                  4$ ! [         a    [        R                  S5         O[        [        4 a     Of = fU R                  SS5      u  p$[        U5      n[        U5      nX$U4$ )a1  
Parse the IP and port from a string in the format of:

    * host_or_ip          <- Can be either IPv4 address literal or hostname/fqdn
    * host_or_ipv4:port   <- Can be either IPv4 address literal or hostname/fqdn
    * [host_or_ip]        <- IPv6 address literal
    * [host_or_ip]:port.  <- IPv6 address literal

.. note:: IPv6 address literals with ports *must* be enclosed in brackets

.. note:: If the port is not specified, default will be returned.

:return: tuple (host, port, afi), afi will be socket.AF_INET or
socket.AF_INET6 or socket.AF_UNSPEC
r  r   Nr  r"  zUsocket.inet_pton not available on this platform. consider `pip install win_inet_pton`)stripr   r
  r  r  r  DEFAULT_KAFKA_PORTr  r  r  r   r   r	  rs   rsplit)host_and_port_strr  rT   restrU   s        r$   get_ip_port_afir  L  s     *//1##C((__&qr*005
tABx=D%D2~	%	%./ "4b88
	JV__.?@ %&8&//II  	KK8 $ 		
 '--c15
4yT"2~s   %C C7%C76C7c                 8   [        U [        5      (       a  U R                  5       R                  S5      n / n[        R
                  nU  H0  n[        U5      u  pVnUS:  a  [        nUR                  XVU45        M2     U(       a  [        R                  " U5        U$ )za
Collects a comma-separated set of hosts (host:port) and optionally
randomize the returned list.
r  r   )rr   r  r  r  r
  r  r  r  r2  randomshuffle)hosts	randomizer  afi	host_portrT   rU   s          r$   collect_hostsr!    s     %##C(F
..C	))4C!8%Dt3'(  vMr#   r_  )<r   r  r   rI  r  r  rR  loggingr  r
  r,  r   r   r   r  ra  r   enumr   r   aiokafka.errorserrorsr4   aiokafka.abcr   aiokafka.protocol.adminr   r   r   aiokafka.protocol.commitr   rV  aiokafka.utilr	   r
   r   r   rq   ImportError__all__	getLoggerr   r   r  r   r  r   r&   r   StreamReaderProtocolrX   r   rf  r   r   r   r   r  r  r!  r   r#   r$   <module>r.     sb         	     
          . 
 Q P  
/! ' 
 
0 !&""#&R.w33 .g$ g$T $S2 S.3 >^=. ^=B!. !H&1hy  Fs   8D" "D-,D-