
    <>i                    6   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rS SKrS SKJrJrJr  S SKJr  S SKJr   S SKJr  S SKJrJrJrJ r J!r!J"r"J#r#J$r$J%r%  \RN                  R6                  r(S r)S	 r*S
 r+S r,S r-S r.S r/ " S S\5      r0 " S S\5      r1 " S S\5      r2 " S S\25      r3 " S S\25      r4 " S S\25      r5 " S S\5      r6 " S S\5      r7 " S S \5      r8 " S! S"\5      r9 " S# S$\5      r: " S% S&\5      r; " S' S(\5      r< " S) S*\5      r= " S+ S,\5      r> " S- S.\5      r? " S/ S0\ 5      r@ " S1 S2\5      rA " S3 S4\ 5      rB " S5 S6\5      rCS7 rD " S8 S9\$5      rE " S: S;\#5      rF " S< S=\"5      rG " S> S?\!5      rH " S@ SA\5      rI " SB SC\"5      rJ " SD SE\!5      rK " SF SG\5      rL " SH SI\!5      rM " SJ SK\"5      rN " SL SM\5      rO " SN SO\5      rP " SP SQ\"5      rQ " SR SS\$5      rR " ST SU\#5      rS " SV SW\"5      rT " SX SY\$5      rU " SZ S[\$5      rV " S\ S]\#5      rW " S^ S_\"5      rX " S` Sa\!5      rY " Sb Sc\5      rZSd r[Se r\Sf r]Sg r^Sh r_\RN                  R                  \RN                  R                  Si 5       5       raSj rbSk rcSl rd\RN                  R                  Sm 5       rfSn rgSo rhSp riSq rjSr rk " Ss St\5      rlSu rmSv rnSw ro\RN                  R                  \R                  Sx:H  SySz9S{ 5       rr\RN                  R                  S| 5       rsS} rtS~ ruS rvS rwS rxS ryS rzS r{S r|S r}\?" SS0S9r~\A" SS0S9r\RN                  R                  S 5       r\RN                  R                  \R                  Sx:H  SSz9S 5       rS rS rS r\G" 5       r\C" 5       rS rS rS rS rS rS rS r\RN                  R                  \RN                  GR                  S 5       5       r\RN                  GR                  S 5       r\RN                  GR                  S 5       r\RN                  GR                  S 5       rS rS rS rS r\RN                  R                  S 5       r\RN                  R                  S 5       r\RN                  R                  \RN                  R                  S 5       5       rS rS rS rS rS rS rS rS r\RN                  GR                  S 5       rS rS rS rS rS rS r\RN                  GR                  S 5       r " S S\5      r\RN                  R                  S 5       rS r\RN                  GRZ                  \RN                  R                  S 5       5       r\RN                  GRZ                  \RN                  R                  S 5       5       r " S S\25      rS r\RN                  R                  S 5       rS r " S S\5      rS rS rS rS r\GRr                  S 5       r\RN                  GRw                  SSS/SS9S 5       rg! \ a    Sr GN6f = f! \ a    Sr\&\&srr\&\&srr \&\&sr!r"\&\&sr#r$\&r% GN f = f)    N)datetime)IpcReadOptions	ReadStatstobytes)find_free_port)util)flight)	FlightClientFlightServerBaseServerAuthHandlerClientAuthHandlerServerMiddlewareServerMiddlewareFactoryClientMiddlewareClientMiddlewareFactoryFlightCallOptionsc                      SS K n g )Nr   )pyarrow.flight)pyarrows    X/var/www/html/land-tabula/venv/lib/python3.13/site-packages/pyarrow/tests/test_flight.pytest_importr   A   s        c                      [         R                  R                  S5      (       d  [        S5      e[        R
                  " [         R                  S   5      S-  $ )z-Get the path to the test resources directory.ARROW_TEST_DATAzITest resources not found; set ARROW_TEST_DATA to <repo root>/testing/datar	   )osenvirongetRuntimeErrorpathlibPath r   r   resource_rootr"   F   sI    ::>>+,, I J 	J<<

#456AAr   c                    [        5       nU(       d  g X-  R                  S5       nUR                  5       sSSS5        $ ! , (       d  f       g= f! [         a'    [	        SX-   S[
        R                  " 5        35      ef = f)z)Get the contents of a test resource file.NrbzTest resource z< not found; did you initialize the test resource submodule?
)r"   openreadFileNotFoundErrorr   	traceback
format_exc)pathrootfs      r   read_flight_resourcer-   N   sy    ?D
k%668 &%% 
T[M *))2)=)=)?(@B
 	

s'   A A	A 
AA A 1Bc                      [        S5      [        R                  " [        S5      [        S5      S9[        R                  " [        S5      [        S5      S9/S.$ )z'Get the paths to test TLS certificates.zroot-ca.pemz	cert0.pemz	cert0.key)certkeyz	cert1.pemz	cert1.key)	root_certcertificates)r-   r	   CertKeyPairr!   r   r   example_tls_certsr4   ]   sY     *-8)+6(5 )+6(5	
 r   c                  r    [         R                  " / SQ5      /n [         R                  R                  U S/S9$ )Nir      
   	some_intsnames)paarrayTablefrom_arrays)datas    r   simple_ints_tablerB   n   s4    
$%D 88[M::r   c                     [         R                  " / SQ[         R                  " 5       S9n [         R                  " / SQ[         R                  " 5       S9n[         R                  " [         R                  R                  / SQU 5      [         R                  R                  SS/U 5      [         R                  R                  SS/U5      /5      /n[         R                  R                  US	/S
9$ )N)foobazquuxtype)rD   rE   rF   new)   r   N   rJ   r      
some_dictsr;   )r=   r>   utf8chunked_arrayDictionaryArrayr@   r?   )dict_valuesnew_dict_valuesrA   s      r   simple_dicts_tablerS   u   s    ((1	BKhh<2779MO
**<E**Aq6;?**Aq6?C
 	D 88\N;;r   c                      [         R                  R                  [         R                  " / SQ5      [         R                  " / SQ5      /SS/S9$ )N)rD   barrE   quxrJ   rK   rL      abr;   )r=   r?   r@   r>   r!   r   r   multiple_column_tabler[      sB    88*F!G!#,!7!9'*Cj   2 2r   c                   @   ^  \ rS rSrSrSrSU 4S jjrS rS rSr	U =r
$ )	ConstantFlightServer   zA Flight server that always returns the same data.

See ARROW-4796: this server implementation will segfault if Flight
does not properly hold a reference to the Table object.
s   the expected criteriac                 b   > [         TU ]  " U40 UD6  [        [        [        S.U l        X l        g )N)   ints   dicts   multi)super__init__rB   rS   r[   table_factoriesoptions)selflocationrf   kwargs	__class__s       r   rd   ConstantFlightServer.__init__   s1    ,V, '(+ 

 r   c              #      #    X R                   :X  aL  [        R                  " [        R                  " / 5      [        R
                  R                  S5      / 5      v   g g 7f)N/foo)CRITERIAr	   
FlightInfor=   schemaFlightDescriptorfor_pathrg   contextcriterias      r   list_flights!ConstantFlightServer.list_flights   sI     }}$##		"''008  %s   AAc                 z    U R                   UR                     " 5       n[        R                  " X0R                  S9$ )Nrf   )re   ticketr	   RecordBatchStreamrf   )rg   rt   rz   tables       r   do_getConstantFlightServer.do_get   s0     $$V]]35''||DDr   )rf   re   NN)__name__
__module____qualname____firstlineno____doc__rn   rd   rv   r}   __static_attributes____classcell__rj   s   @r   r]   r]      s%     (HE Er   r]   c                   L   ^  \ rS rSrSrSU 4S jjrS rS r\S 5       r	Sr
U =r$ )	MetadataFlightServer   z4A Flight server that numbers incoming/outgoing data.c                 2   > [         TU ]  " S0 UD6  Xl        g Nr!   rc   rd   rf   rg   rf   ri   rj   s      r   rd   MetadataFlightServer.__init__       "6"r   c                     [         R                  " / SQ5      /n[         R                  R                  US/S9n[        R
                  " UR                  U R                  U5      U R                  S9$ )Nr6   rY   r;   ry   )	r=   r>   r?   r@   r	   GeneratorStreamrp   number_batchesrf   )rg   rt   rz   rA   r|   s        r   r}   MetadataFlightServer.do_get   sb    HH()
 $$T#$7%%LL&LL" 	"r   c           	      (   Sn/ SQnUR                   R                  S:X  d   eU H  u  pxUR                  [        R                  R                  [        R                  " Xe   /5      /S/5      5      (       d   eUc   e[        R                  " SUR                  5       5      u  n	XY:X  d   eUR                  [        R                  " SU5      5        US-  nM     UR                   R                  S:X  d   eUR                   R                  S:X  d   eg )Nr   r6   rJ   rY   <i   r8   )statsnum_messagesequalsr=   RecordBatchr@   r>   structunpack
to_pybyteswritepacknum_record_batches)
rg   rt   
descriptorreaderwritercounterexpected_databatchbufclient_counters
             r   do_putMetadataFlightServer.do_put   s    +||((A--- JE<< : :=1234!     ?"?$mmD#..2BCON,,,LLT734qLG ! ||((A---||..!333r   c              #      #    [        U R                  5       5       H!  u  p[        R                  " SU5      nX#4v   M#     g 7f)Nr   )	enumerate
to_batchesr   r   )r|   idxr   r   s       r   r   #MetadataFlightServer.number_batches   s7     #E$4$4$67JC++dC(C* 8s   A Ary   N)r   r   r   r   r   rd   r}   r   staticmethodr   r   r   r   s   @r   r   r      s)    >"4"  r   r   c                   B   ^  \ rS rSrSrSU 4S jjrS rS rS rSr	U =r
$ )	EchoFlightServer   z4A Flight server that returns the last data uploaded.c                 B   > [         TU ]  " U40 UD6  S U l        X l        g r   )rc   rd   last_messageexpected_schema)rg   rh   r   ri   rj   s       r   rd   EchoFlightServer.__init__   s#    ,V, .r   c                 B    [         R                  " U R                  5      $ r   )r	   r{   r   rg   rt   rz   s      r   r}   EchoFlightServer.do_get   s    ''(9(9::r   c                     U R                   (       a  U R                   UR                  :X  d   eUR                  5       U l        g r   )r   rp   read_allr   rg   rt   r   r   r   s        r   r   EchoFlightServer.do_put   s2    ''6==888"OO-r   c                     U H  nM     g r   r!   )rg   rt   r   r   r   chunks         r   do_exchangeEchoFlightServer.do_exchange   s    E r   )r   r   r   )r   r   r   r   r   rd   r}   r   r   r   r   r   s   @r   r   r      s    >/
;.
 r   r   c                   *    \ rS rSrSrS rS rS rSrg)EchoStreamFlightServer   z6An echo server that streams individual record batches.c                     [         R                  " U R                  R                  U R                  R	                  SS95      $ )N   max_chunksize)r	   r   r   rp   r   r   s      r   r}   EchoStreamFlightServer.do_get   s;    %%$$((t(<> 	>r   c                     / $ r   r!   rg   rt   s     r   list_actions#EchoStreamFlightServer.list_actions       	r   c                     UR                   S:X  a/  UR                  5       UR                  5       R                  S5      /$ [        eNwho-am-iutf-8rH   peer_identitypeerencodeNotImplementedErrorrg   rt   actions      r   	do_action EchoStreamFlightServer.do_action   9    ;;*$))+W\\^-B-B7-KLL!!r   r!   N	r   r   r   r   r   r}   r   r   r   r!   r   r   r   r      s    @>
"r   r   c                   *    \ rS rSrSrS rS rS rSrg)EchoTableStreamFlightServer   z,An echo server that streams the whole table.c                 n    [         R                  " U R                  R                  U R                  /5      $ r   )r	   r   r   rp   r   s      r   r}   "EchoTableStreamFlightServer.do_get   s0    %%$$! 	!r   c                     / $ r   r!   r   s     r   r   (EchoTableStreamFlightServer.list_actions  r   r   c                     UR                   S:X  a/  UR                  5       UR                  5       R                  S5      /$ [        er   r   r   s      r   r   %EchoTableStreamFlightServer.do_action  r   r   r!   Nr   r!   r   r   r   r      s    6!
"r   r   c                   *    \ rS rSrSrS rS rS rSrg)'EchoRecordBatchReaderStreamFlightServeri
  zCAn echo server that streams the whole table as a RecordBatchReader.c                     [         R                  " U R                  R                  U R                  R	                  5       /5      $ r   )r	   r   r   rp   	to_readerr   s      r   r}   .EchoRecordBatchReaderStreamFlightServer.do_get  s9    %%$$((*+- 	-r   c                     / $ r   r!   r   s     r   r   4EchoRecordBatchReaderStreamFlightServer.list_actions  r   r   c                     UR                   S:X  a/  UR                  5       UR                  5       R                  S5      /$ [        er   r   r   s      r   r   1EchoRecordBatchReaderStreamFlightServer.do_action  r   r   r!   Nr   r!   r   r   r   r   
  s    M-
"r   r   c                   $    \ rS rSrSrS rS rSrg)GetInfoFlightServeri  z)A Flight server that tests GetFlightInfo.c                    [         R                  " [        R                  " S[        R                  " 5       4/5      U[         R
                  " SS/5      [         R
                  " S[         R                  R                  SS5      /[        R                  " S5      R                  [        R                  " S5      5      S5      /S	S
SS5      $ )NrY   r   grpc://test	localhost  2023-04-05T12:34:56.789012345nszendpoint app metadatarJ   *   Tzinfo app metadata)r	   ro   r=   rp   int32FlightEndpointLocationfor_grpc_tcpscalarcast	timestamprg   rt   r   s      r   get_flight_info#GetInfoFlightServer.get_flight_info  s      IIRXXZ()*%%cM?;%%__11+tDEII=>CCBLLQUDVW+	 
 	
r   c                 d    U R                  X5      n[        R                  " UR                  5      $ r   )r  r	   SchemaResultrp   )rg   rt   r   infos       r   
get_schemaGetInfoFlightServer.get_schema1  s'    ##G8""4;;//r   r!   N)r   r   r   r   r   r  r	  r   r!   r   r   r   r     s    3
&0r   r   c                   .    \ rS rSrSr\S 5       rS rSrg)ListActionsFlightServeri6  'A Flight server that tests ListActions.c                 6    SS[         R                  " SS5      /$ )N)action-1description)zaction-2 zaction-3zmore detailr	   
ActionType)clss    r   expected_actions(ListActionsFlightServer.expected_actions9  s$     (j-8
 	
r   c              #   @   #    U R                  5        S h  vN   g  N7fr   )r  r   s     r   r   $ListActionsFlightServer.list_actionsA  s     ((***s   r!   N)	r   r   r   r   r   classmethodr  r   r   r!   r   r   r  r  6  s    1
 
+r   r  c                       \ rS rSrSrS rSrg)ListActionsErrorFlightServeriE  r  c              #      #    Sv   Sv   g 7f)N)r  r  rD   r!   r   s     r   r   )ListActionsErrorFlightServer.list_actionsH  s     s   
r!   N)r   r   r   r   r   r   r   r!   r   r   r  r  E  s
    1r   r  c                   <   ^  \ rS rSrSrSU 4S jjrS rS rSrU =r	$ )CheckTicketFlightServeriM  zDA Flight server that compares the given ticket to an expected value.c                 4   > [         TU ]  " U40 UD6  Xl        g r   )rc   rd   expected_ticket)rg   r!  rh   ri   rj   s       r   rd    CheckTicketFlightServer.__init__P  s    ,V,.r   c                     U R                   UR                  :X  d   e[        R                  " / SQ[        R                  " 5       S9/n[        R
                  R                  US/S9n[        R                  " U5      $ )Nr6   rG   rY   r;   )	r!  rz   r=   r>   r   r?   r@   r	   r{   )rg   rt   rz   data1r|   s        r   r}   CheckTicketFlightServer.do_getT  s`    ##v}}444-BHHJ?@$$U3%$8''..r   c                 .    UR                  5       U l        g r   )r   r   )rg   rt   r   r   s       r   r   CheckTicketFlightServer.do_putZ  s    "OO-r   )r!  r   r   )
r   r   r   r   r   rd   r}   r   r   r   r   s   @r   r  r  M  s    N//. .r   r  c                   f    \ rS rSrSr\R                  " S\R                  " 5       4/5      rS rSr	g)InvalidStreamFlightServeri^  zEA Flight server that tries to return messages with differing schemas.rY   c                    [         R                  " / SQ[         R                  " 5       S9/n[         R                  " / SQ[         R                  " 5       S9/nUR                  UR                  :w  d   e[         R
                  R                  US/S9n[         R
                  R                  US/S9nUR                  U R                  :X  d   e[        R                  " U R                  XV/5      $ )Nr6   rG   )g      $g      g              @g      $@rY   r;   )
r=   r>   r   float64rH   r?   r@   rp   r	   r   )rg   rt   rz   r$  data2table1table2s          r   r}    InvalidStreamFlightServer.do_getc  s    -BHHJ?@7bjjlKLzzUZZ'''%%eC5%9%%eC5%9}}+++%%dkkF3CDDr   r!   N
r   r   r   r   r   r=   rp   r   r}   r   r!   r   r   r)  r)  ^  s'    OYYbhhj)*+FEr   r)  c                   f    \ rS rSrSr\R                  " S\R                  " 5       4/5      rS rSr	g)NeverSendsDataFlightServerin  z0A Flight server that never actually yields data.rY   c                    UR                   S:X  a  U R                  R                  5       U R                  R                  5       [        R                  R                  [        S5      /U R                  S9/n[        R                  " U R                  U5      $ [        R                  " U R                  [        R                  " U R                  R                  5       5      5      $ )N
   yield_datar8   rp   )rz   rp   empty_tabler=   r   r@   ranger	   r   	itertoolsrepeat)rg   rt   rz   rA   s       r   r}   !NeverSendsDataFlightServer.do_gets  s    ==M) '')'')**E!H:dkk*JD
 ))$++t<<%%KK))$++*A*A*CDF 	Fr   r!   Nr1  r!   r   r   r3  r3  n  s'    :YYbhhj)*+FFr   r3  c                   4    \ rS rSrSrS rS r\S 5       rSr	g)SlowFlightServeri  z;A Flight server that delays its responses to test timeouts.c                     [         R                  " [        R                  " S[        R                  " 5       4/5      U R                  5       5      $ )NrY   )r	   r   r=   rp   r   slow_streamr   s      r   r}   SlowFlightServer.do_get  s:    %%bii#rxxz1B0C&D&*&6&6&8: 	:r   c                 2    [         R                  " S5        / $ N      ?)timesleepr   s      r   r   SlowFlightServer.do_action  s    

3	r   c               #     #    [         R                  " / SQ[         R                  " 5       S9/n [         R                  R	                  U S/S9v   [
        R                  " S5        [         R                  R	                  U S/S9v   g 7f)Nr6   rG   rY   r;   r9   )r=   r>   r   r?   r@   rD  rE  )r$  s    r   r?  SlowFlightServer.slow_stream  sd     -BHHJ?@hh""5"66 	

2hh""5"66s   BBr!   N)
r   r   r   r   r   r}   r   r   r?  r   r!   r   r   r=  r=    s#    E: 7 7r   r=  c                   :    \ rS rSrSr\S 5       rS rS rS r	Sr
g)	ErrorFlightServeri  z9A Flight server that uses all the Flight-specific errors.c            	          [         R                  [         R                  [         R                  [         R                  [         R
                  [        [        R                  [        S.$ )N)internaltimedoutcancelunauthenticatedunauthorizednotimplementedinvalidr0   )
r	   FlightInternalErrorFlightTimedOutErrorFlightCancelledErrorFlightUnauthenticatedErrorFlightUnauthorizedErrorr   r=   ArrowInvalidKeyErrorr!   r   r   error_casesErrorFlightServer.error_cases  sH     222211%@@"::1	
 		
r   c                     [         R                  5       nUR                  U;   a  X2R                     " S5      eUR                  S:X  a  Sn[        R                  " SU5      e[
        e)NrD   protobuf   this is an error message)rJ  rZ  rH   r	   rW  r   )rg   rt   r   rZ  err_msgs        r   r   ErrorFlightServer.do_action  sX    '335;;+%kk*511[[J&1G00@@!!r   c              #      #    [         R                  " [        R                  " / 5      [         R                  R                  S5      / 5      v   [         R                  " S5      e7f)Nrm   rD   )r	   ro   r=   rp   rq   rr   rS  rs   s      r   rv   ErrorFlightServer.list_flights  sM     IIbM##,,V4
 	

 ((//s   A"A$c                    UR                   S:X  a  [        R                  " S5      eUR                   S:X  a  [        R                  " S5      eUR                   S:X  a  [        R                  " S5      eUR                   S:X  a  [        R
                  " S5      eUR                   S:X  a  [        R                  " S5      eUR                   S:X  a  Sn[        R                  " SU5      eg )	Ns   internalrD   s   timedouts   cancels   unauthenticateds   unauthorizeds   protobufr^  )commandr	   rS  rT  rU  rV  rW  )rg   rt   r   r   r   r_  s         r   r   ErrorFlightServer.do_put  s    ,,,U33;.,,U339,--e44#5533E::?20077;.1G00@@ /r   r!   N)r   r   r   r   r   r   rZ  r   rv   r   r   r!   r   r   rJ  rJ    s'    C

 

"0Ar   rJ  c                   N   ^  \ rS rSrSrS
U 4S jjrS rS rS rS r	S r
S	rU =r$ )ExchangeFlightServeri  z A server for testing DoExchange.c                 2   > [         TU ]  " S0 UD6  Xl        g r   r   r   s      r   rd   ExchangeFlightServer.__init__  r   r   c                    UR                   R                  S:X  d   eUR                  [        R                  R
                  :w  a  [        R                  " S5      eUR                  S:X  a  U R                  XU5      $ UR                  S:X  a  U R                  XU5      $ UR                  S:X  a  U R                  XU5      $ UR                  S:X  a  U R                  XU5      $ [        R                  " SUR                   35      e)Nr   z!Must provide a command descriptor   echo   get   put	   transformzUnknown command: )r   r   descriptor_typer	   DescriptorTypeCMDr=   rX  rd  exchange_echoexchange_do_getexchange_do_putexchange_transformr   s        r   r    ExchangeFlightServer.do_exchange  s    ||((A---%%)>)>)B)BB//"EFF7*%%gv>>6)''@@6)''@@</**7FCC//#J$6$6#78: :r   c                     [         R                  R                  [         R                  " [	        SS5      5      /S/S9nUR                  UR                  5        UR                  U5        g)Emulate DoGet with DoExchange.r    (  rY   r;   N)r=   r?   r@   r>   r8  beginrp   write_table)rg   rt   r   r   rA   s        r   rs  $ExchangeFlightServer.exchange_do_get  sX    xx##HHU1i()%
 $  	T[[!4 r   c                 4   SnU HK  nUR                   (       d  [        R                  " S5      eUR                  R                  S:w  d   eUS-  nMM     UR                  R
                  U:X  d   eUR                  [        U5      R                  S5      5        g)Emulate DoPut with DoExchange.r   zAll chunks must have data.rJ   r   N)	rA   r=   rX  r   r   r   write_metadatastrr   )rg   rt   r   r   num_batchesr   s         r   rt  $ExchangeFlightServer.exchange_do_put  s    E::oo&BCC<<,,1111K	 
 ||..+===c+.55g>?r   c                 t   UR                   R                  S:X  d   eSnU GH  nU(       dA  UR                  (       a0  UR                  UR                  R                  U R
                  S9  SnUR                  (       a9  UR                  (       a(  UR                  UR                  UR                  5        M  UR                  (       a  UR                  UR                  5        M  UR                  (       a:  UR                   R                  S:w  d   eUR                  UR                  5        GM   S5       e   g)zRun a simple echo server.r   Fry   TzShould not happenN)
r   r   rA   rz  rp   rf   app_metadatawrite_with_metadatar  write_batch)rg   rt   r   r   startedr   s         r   rr  "ExchangeFlightServer.exchange_echo  s    ||((A---EuzzUZZ..E!!ejj**5::u7I7IJ##%%e&8&89||00A555""5::.111u r   c                    UR                   R                  S:X  d   eUR                   HS  n[        R                  R                  UR                  5      (       a  M3  [        R                  " S[        U5      -   5      e   UR                  5       nUR                   R                  S:w  d   eS/UR                  -  nU H1  n[        U5       H  u  pXh==   U	R                  5       -  ss'   M!     M3     [        R                  R                  [        R                  " U5      /S/S9n
UR!                  U
R                  5        UR#                  U
5        g)zSum rows in an uploaded table.r   zInvalid field: sumr;   N)r   r   rp   r=   types
is_integerrH   rX  reprr   num_rowsr   as_pyr?   r@   r>   rz  r{  )rg   rt   r   r   fieldr|   sumscolumnrowvalueresults              r   ru  'ExchangeFlightServer.exchange_transform  s   ||((A---]]E88&&uzz22oo&7$u+&EFF # !||((A---sU^^#F'/
	U[[]*	 0  %%rxx~&6ug%FV]]#6"r   ry   r   )r   r   r   r   r   rd   r   rs  rt  rr  ru  r   r   r   s   @r   rg  rg    s*    *: !	@2$# #r   rg  c                   8   ^  \ rS rSrSrU 4S jrS rS rSrU =r	$ )HttpBasicServerAuthHandleri  7An example implementation of HTTP basic authentication.c                 .   > [         TU ]  5         Xl        g r   rc   rd   credsrg   r  rj   s     r   rd   #HttpBasicServerAuthHandler.__init__      
r   c                    UR                  5       n[        R                  R                  U5      nUR                  U R
                  ;  a  [        R                  " S5      eU R
                  UR                     UR                  :w  a  [        R                  " S5      eUR                  [        UR                  5      5        g )Nunknown userzwrong password)
r&   r	   	BasicAuthdeserializeusernamer  rV  passwordr   r   )rg   outgoingincomingr   auths        r   authenticate'HttpBasicServerAuthHandler.authenticate  s    mmo++C0==

*33NCC::dmm$5334DEEwt}}-.r   c                     U(       d  [         R                  " S5      eXR                  ;  a  [         R                  " S5      eU$ )Nztoken not providedr  )r	   rV  r  rg   tokens     r   is_valid#HttpBasicServerAuthHandler.is_valid$  s7    334HII

"33NCCr   r  
r   r   r   r   r   rd   r  r  r   r   r   s   @r   r  r    s    A/ r   r  c                   8   ^  \ rS rSrSrU 4S jrS rS rSrU =r	$ )HttpBasicClientAuthHandleri,  r  c                 f   > [         TU ]  5         [        R                  " X5      U l        S U l        g r   )rc   rd   r	   r  
basic_authr  rg   r  r  rj   s      r   rd   #HttpBasicClientAuthHandler.__init__/  s'     **8>
r   c                     U R                   R                  5       nUR                  U5        UR                  5       U l        g r   )r  	serializer   r&   r  )rg   r  r  r  s       r   r  'HttpBasicClientAuthHandler.authenticate4  s-    ((*t]]_
r   c                     U R                   $ r   r  rg   s    r   	get_token$HttpBasicClientAuthHandler.get_token9      zzr   )r  r  
r   r   r   r   r   rd   r  r  r   r   r   s   @r   r  r  ,  s    A
%
 r   r  c                   8   ^  \ rS rSrSrU 4S jrS rS rSrU =r	$ )TokenServerAuthHandleri=  :An example implementation of authentication via handshake.c                 .   > [         TU ]  5         Xl        g r   r  r  s     r   rd   TokenServerAuthHandler.__init__@  r  r   c                    UR                  5       nUR                  5       nX0R                  ;   a<  U R                  U   U:X  a)  UR                  [        R                  " SU-   5      5        g [
        R                  " S5      e)N   secret:zinvalid username/password)r&   r  r   base64	b64encoder	   rV  )rg   r  r  r  r  s        r   r  #TokenServerAuthHandler.authenticateD  sd    ==?==?zz!djj&:h&FNN6++J,ABC33+- -r   c                     [         R                  " U5      nUR                  S5      (       d  [        R                  " S5      eUSS  $ )Nr  zinvalid token   )r  	b64decode
startswithr	   rV  r  s     r   r  TokenServerAuthHandler.is_validM  s@      '
++33ODDQRyr   r  r  r   s   @r   r  r  =  s    D- r   r  c                   8   ^  \ rS rSrSrU 4S jrS rS rSrU =r	$ )TokenClientAuthHandleriT  r  c                 H   > [         TU ]  5         Xl        X l        SU l        g )Nr   )rc   rd   r  r  r  r  s      r   rd   TokenClientAuthHandler.__init__W  s      
r   c                     UR                  U R                  5        UR                  U R                  5        UR                  5       U l        g r   )r   r  r  r&   r  rg   r  r  s      r   r  #TokenClientAuthHandler.authenticate]  s/    t}}%t}}%]]_
r   c                     U R                   $ r   r  r  s    r   r   TokenClientAuthHandler.get_tokenb  r  r   )r  r  r  r  r   s   @r   r  r  T  s    D%
 r   r  c                   $    \ rS rSrSrS rS rSrg)NoopAuthHandlerif  zA no-op auth handler.c                     g)zDo nothing.Nr!   r  s      r   r  NoopAuthHandler.authenticatei  s    r   c                     g)z>
Returning an empty string.
Returning None causes Type error.
r  r!   r  s     r   r  NoopAuthHandler.is_validl  s    
 r   r!   N)r   r   r   r   r   r  r  r   r!   r   r   r  r  f  s    r   r  c                     U  H8  nUR                  5       UR                  5       :X  d  M'  U R                  U5      s  $    g)zXLookup the value of given key in the given headers.
The key lookup is case-insensitive.
N)lowerr   )headers
lookup_keyr0   s      r   case_insensitive_header_lookupr  t  s4     99;***,,;;s## r   c                   *    \ rS rSrSrS rS rS rSrg)!ClientHeaderAuthMiddlewareFactoryi}  z@ClientMiddlewareFactory that creates ClientAuthHeaderMiddleware.c                     / U l         g r   call_credentialr  s    r   rd   *ClientHeaderAuthMiddlewareFactory.__init__  s
    !r   c                     [        U 5      $ r   )ClientHeaderAuthMiddlewarerg   r  s     r   
start_call,ClientHeaderAuthMiddlewareFactory.start_call  s    )$//r   c                     Xl         g r   r  )rg   r  s     r   set_call_credential5ClientHeaderAuthMiddlewareFactory.set_call_credential  s    .r   r  N)	r   r   r   r   r   rd   r  r  r   r!   r   r   r  r  }  s    J"0/r   r  c                   $    \ rS rSrSrS rS rSrg)r  i  a  
ClientMiddleware that extracts the authorization header
from the server.

This is an example of a ClientMiddleware that can extract
the bearer token authorization header from a HTTP header
authentication enabled server.

Parameters
----------
factory : ClientHeaderAuthMiddlewareFactory
    This factory is used to set call credentials if an
    authorization header is found in the headers from the server.
c                     Xl         g r   factoryrg   r  s     r   rd   #ClientHeaderAuthMiddleware.__init__      r   c                     [        US5      nU(       a0  U R                  R                  SUS   R                  S5      /5        g g )NAuthorization   authorizationr   r   )r  r  r  r   )rg   r  auth_headers      r   received_headers+ClientHeaderAuthMiddleware.received_headers  sB    4WoNLL,, A%%g..0 1 r   r  N)r   r   r   r   r   rd   r  r   r!   r   r   r  r    s    1r   r  c                       \ rS rSrSrS rSrg)!HeaderAuthServerMiddlewareFactoryi  z)Validates incoming username and password.c                    [        US5      nUS   R                  S5      nSnSnUS   S:X  ad  [        R                  " US   5      nUR	                  S5      R                  S	5      nUS   S
:X  a	  US   S:X  d  [
        R                  " U5      eSnOAUS   S:X  a"  US   nUS:X  d  [
        R                  " U5      eO[
        R                  " U5      e[        U5      $ )Nr  r    r  zInvalid credentialsBasicrJ   r   :testr  	token1234Bearer)r  splitr  r  decoder	   rV  HeaderAuthServerMiddleware)	rg   r  r  r  valuesr  error_messagedecodedpairs	            r   r  ,HeaderAuthServerMiddlewareFactory.start_call  s    4
 Q%%c*-!9&&vay1G>>'*005DGv%$q'Z*?77FFEAY("1IEK'77FF ( 33MBB)%00r   r!   Nr   r   r   r   r   r  r   r!   r   r   r  r    s
    31r   r  c                   $    \ rS rSrSrS rS rSrg)r  i  zBA ServerMiddleware that transports incoming username and password.c                     Xl         g r   r  r  s     r   rd   #HeaderAuthServerMiddleware.__init__  s    
r   c                 $    SSU R                   -   0$ )NauthorizationzBearer r  r  s    r   sending_headers*HeaderAuthServerMiddleware.sending_headers  s    TZZ!788r   r  Nr   r   r   r   r   rd   r  r   r!   r   r   r  r    s    L9r   r  c                       \ rS rSrSrS rSrg)HeaderAuthFlightServeri  z<A Flight server that tests with basic token authentication. c                     UR                  S5      nU(       a@  [        UR                  5       S5      nUR                  S5      nUS   R	                  S5      /$ [
        R                  " S5      e)Nr  r  r  rJ   r   zNo token auth middleware found.)get_middlewarer  r  r	  r   r	   rV  )rg   rt   r   
middlewarer  r  s         r   r    HeaderAuthFlightServer.do_action  sk    ++F3
8**,o?K &&s+F1I$$W-..//-/ 	/r   r!   Nr   r   r   r   r   r   r   r!   r   r   r  r    s
    F/r   r  c                       \ rS rSrSrS rSrg)'ArbitraryHeadersServerMiddlewareFactoryi  z<A ServerMiddlewareFactory that transports arbitrary headers.c                     [        U5      $ r   ) ArbitraryHeadersServerMiddlewarerg   r  r  s      r   r  2ArbitraryHeadersServerMiddlewareFactory.start_call  s    /88r   r!   Nr  r!   r   r   r"  r"    s
    F9r   r"  c                   $    \ rS rSrSrS rS rSrg)r$  i  z5A ServerMiddleware that transports arbitrary headers.c                     Xl         g r   r  )rg   r  s     r   rd   )ArbitraryHeadersServerMiddleware.__init__  s     r   c                     U R                   $ r   r)  r  s    r   r  0ArbitraryHeadersServerMiddleware.sending_headers      }}r   r)  Nr  r!   r   r   r$  r$    s    ?!r   r$  c                       \ rS rSrSrS rSrg)ArbitraryHeadersFlightServeri  z6A Flight server that tests multiple arbitrary headers.c                    UR                  S5      nU(       aS  UR                  5       n[        US5      n[        US5      nUS   R                  S5      nUS   R                  S5      nXx/$ [        R
                  " S5      e)Narbitrary-headersztest-header-1ztest-header-2r   r   zNo headers middleware found)r  r  r  r   r	   FlightServerError)	rg   rt   r   r  r  header_1header_2value1value2s	            r   r   &ArbitraryHeadersFlightServer.do_action  s    ++,?@
 002G5H 6H a[''0Fa[''0F##&&'DEEr   r!   Nr   r!   r   r   r/  r/    s    @Fr   r/  c                       \ rS rSrSrS rSrg)HeaderServerMiddlewarei  z/Expose a per-call value to the RPC method body.c                     Xl         g r   special_value)rg   r<  s     r   rd   HeaderServerMiddleware.__init__  s    *r   r;  N)r   r   r   r   r   rd   r   r!   r   r   r9  r9    s
    9+r   r9  c                       \ rS rSrSrS rSrg)HeaderServerMiddlewareFactoryi  z:Expose a per-call hard-coded value to the RPC method body.c                     [        S5      $ )Nzright value)r9  r%  s      r   r  (HeaderServerMiddlewareFactory.start_call	  s    %m44r   r!   Nr  r!   r   r   r?  r?    s
    D5r   r?  c                       \ rS rSrSrS rSrg)HeaderFlightServeri  z(Echo back the per-call hard-coded value.c                 n    UR                  S5      nU(       a  UR                  R                  5       /$ S/$ )Nr  r   )r  r<  r   )rg   rt   r   r  s       r   r   HeaderFlightServer.do_action  s4    ++F3
,,33566ur   r!   Nr   r!   r   r   rC  rC    s
    2r   rC  c                       \ rS rSrSrS rSrg)MultiHeaderFlightServeri  8Test sending/receiving multiple (binary-valued) headers.c                 r    UR                  S5      n[        UR                  5      R                  S5      nU/$ )Nr  r   )r  r  client_headersr   )rg   rt   r   r  r  s        r   r   !MultiHeaderFlightServer.do_action  s5    ++F3
z00188Ayr   r!   Nr   r!   r   r   rG  rG    s
    Br   rG  c                       \ rS rSrSrS rSrg)$SelectiveAuthServerMiddlewareFactoryi   z1Deny access to certain methods based on a header.c                    UR                   [        R                  R                  :X  a  g UR	                  S5      nU(       d  [        R
                  " S5      eUS   nUS:w  a  [        R
                  " S5      e[        U5      $ )Nx-auth-tokenzNo tokenr   r  zInvalid token)methodr	   FlightMethodLIST_ACTIONSr   rV  r9  )rg   r  r  r  s       r   r  /SelectiveAuthServerMiddlewareFactory.start_call#  sl    ;;&--:::N+33J??aJ33ODD%e,,r   r!   Nr  r!   r   r   rM  rM     s
    ;-r   rM  c                       \ rS rSrS rSrg)$SelectiveAuthClientMiddlewareFactoryi3  c                     [        5       $ r   )SelectiveAuthClientMiddlewarer  s     r   r  /SelectiveAuthClientMiddlewareFactory.start_call4  s    ,..r   r!   N)r   r   r   r   r  r   r!   r   r   rU  rU  3  s    /r   rU  c                       \ rS rSrS rSrg)rW  i8  c                 
    SS0$ )NrO  r  r!   r  s    r   r  -SelectiveAuthClientMiddleware.sending_headers9  s    J
 	
r   r!   N)r   r   r   r   r  r   r!   r   r   rW  rW  8  s    
r   rW  c                   2   ^  \ rS rSrSrU 4S jrS rSrU =r$ ) RecordingServerMiddlewareFactoryi?   Record what methods were called.c                 0   > [         TU ]  5         / U l        g r   rc   rd   methodsrg   rj   s    r   rd   )RecordingServerMiddlewareFactory.__init__B      r   c                 N    U R                   R                  UR                  5        g r   ra  appendrP  r%  s      r   r  +RecordingServerMiddlewareFactory.start_callF      DKK(r   ra  	r   r   r   r   r   rd   r  r   r   r   s   @r   r]  r]  ?      * r   r]  c                   2   ^  \ rS rSrSrU 4S jrS rSrU =r$ ) RecordingClientMiddlewareFactoryiK  r^  c                 0   > [         TU ]  5         / U l        g r   r`  rb  s    r   rd   )RecordingClientMiddlewareFactory.__init__N  rd  r   c                 N    U R                   R                  UR                  5        g r   rf  r  s     r   r  +RecordingClientMiddlewareFactory.start_callR  ri  r   rj  rk  r   s   @r   rn  rn  K  rl  r   rn  c                   $    \ rS rSrSrS rS rSrg)"MultiHeaderClientMiddlewareFactoryiW  rH  c                     0 U l         g r   last_headersr  s    r   rd   +MultiHeaderClientMiddlewareFactory.__init__Z  s     r   c                     [        U 5      $ r   )MultiHeaderClientMiddlewarer  s     r   r  -MultiHeaderClientMiddlewareFactory.start_call_  s    *400r   rv  N)r   r   r   r   r   rd   r  r   r!   r   r   rt  rt  W  s    B
1r   rt  c                   D    \ rS rSrSrSS/SS/S/S/S.rS	 rS
 rS rSr	g)rz  ic  rH  rD   rU          rE   )zx-textzx-binary-binzx-MIXED-cases   x-other-MIXED-casec                     Xl         g r   r  r  s     r   rd   $MultiHeaderClientMiddleware.__init__n  r  r   c                     U R                   $ r   )EXPECTEDr  s    r   r  +MultiHeaderClientMiddleware.sending_headersq  r-  r   c                 N    U R                   R                  R                  U5        g r   )r  rw  update)rg   r  s     r   r  ,MultiHeaderClientMiddleware.received_headerst  s     	!!((1r   r  N)
r   r   r   r   r   r  rd   r  r  r   r!   r   r   rz  rz  c  s6    B %. '* %wH2r   rz  c                       \ rS rSrSrS rSrg)"MultiHeaderServerMiddlewareFactoryiz  rH  c                     [        U5      $ r   )MultiHeaderServerMiddlewarer%  s      r   r  -MultiHeaderServerMiddlewareFactory.start_call}  s    *733r   r!   Nr  r!   r   r   r  r  z  s
    B4r   r  c                   $    \ rS rSrSrS rS rSrg)r  i  rH  c                     Xl         g r   rJ  )rg   rJ  s     r   rd   $MultiHeaderServerMiddleware.__init__  s    ,r   c                 "    [         R                  $ r   )rz  r  r  s    r   r  +MultiHeaderServerMiddleware.sending_headers  s    *333r   r  Nr  r!   r   r   r  r    s    B-4r   r  c                   8   ^  \ rS rSrSrU 4S jrS rS rSrU =r	$ )LargeMetadataFlightServeri  z Regression test for ARROW-13253.c                 :   > [         TU ]  " U0 UD6  SS-  U l        g )N           )rc   rd   	_metadata)rg   argsri   rj   s      r   rd   "LargeMetadataFlightServer.__init__  s!    $)&)-r   c                     [         R                  " S[         R                  " 5       4/5      n[        R                  " U[         R
                  " S//US9U R                  4/5      $ )NrY   rJ   r6  )r=   rp   int64r	   r   record_batchr  )rg   rt   rz   rp   s       r   r}    LargeMetadataFlightServer.do_get  sS    S"((*-./%%f__qcU62DNNC/
  	r   c                 :    UR                  U R                  5        g r   )r  r  r   s        r   r   %LargeMetadataFlightServer.do_exchange  s    dnn-r   )r  )
r   r   r   r   r   rd   r}   r   r   r   r   s   @r   r  r    s    *.. .r   r  c                  	   Sn SnSnSnSnSnSnSnS	nS
n	[        [        R                  " SS5      5      U :X  d   e[        [        R                  " SS5      5      U:X  d   e[        [        R                  " SS5      5      U:X  d   e[        [        R
                  R                  S5      5      U:X  d   e[        R                  " S/ [        R                  " S5      R                  [        R                  " S5      5      S5      n
[        U
5      U:X  d   e[        R                  " [        R                  " / 5      [        R
                  R                  5       / SSSS5      n[        U5      U:X  d   e[        [        R                  " S5      5      U:X  d   e[        [        R                   " S5      5      U:X  d   e[        [        R"                  " [        R                  " / 5      5      5      U:X  d   e[        [        R"                  " [        R                  " S/5      5      5      S:X  d   e[        [        R$                  " S5      5      U	:X  d   eUR                  [        R                  " / 5      :X  d   e[        R                  " S [        R
                  R                  5       / SSSS5      nSn[        U5      U:X  d   eUR                  b   e[&        R(                  " [*        5         [        R                  " SS 5        S S S 5        [&        R(                  " [*        5         [        R                  " [-        5       / 5        S S S 5        [&        R(                  " [*        5         [        R                  " SSS[-        5       /5        S S S 5        [&        R(                  " [*        5         [        R                  " S/ SS9  S S S 5        [&        R(                  " [*        5         [        R                  " S/ [/        S S!S"SS#S$5      S9  S S S 5        [&        R(                  " [*        5         [        R                  " S/ [-        5       S%9  S S S 5        g ! , (       d  f       GNX= f! , (       d  f       GN(= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)&Nz1<pyarrow.flight.Action type='foo' body=(0 bytes)>z)ActionType(type='foo', description='bar')z?<pyarrow.flight.BasicAuth username=b'user' password=(redacted)>z,<pyarrow.flight.FlightDescriptor cmd=b'foo'>z<pyarrow.flight.FlightEndpoint ticket=<pyarrow.flight.Ticket ticket=b'foo'> locations=[] expiration_time=2023-04-05 12:34:56+00:00 app_metadata=b'endpoint app metadata'>z<pyarrow.flight.FlightInfo schema= descriptor=<pyarrow.flight.FlightDescriptor path=[]> endpoints=[] total_records=1 total_bytes=42 ordered=True app_metadata=b'test app metadata'>z6<pyarrow.flight.Location b'grpc+tcp://localhost:1234'>z&<pyarrow.flight.Result body=(3 bytes)>z'<pyarrow.flight.SchemaResult schema=()>z%<pyarrow.flight.Ticket ticket=b'foo'>rD   r   rU   userpass   foo2023-04-05T12:34:56s   endpoint app metadatarJ   r   T   test app metadatagrpc+tcp://localhost:1234)intr  z1<pyarrow.flight.SchemaResult schema=(int: int64)>z<pyarrow.flight.FlightInfo schema=None descriptor=<pyarrow.flight.FlightDescriptor path=[]> endpoints=[] total_records=1 total_bytes=42 ordered=True app_metadata=b'test app metadata'>r   s   grpc://testz2023-04-05T01:02:03)expiration_timei  rX   r8   rK   rL   r  )r  r	   Actionr  r  rq   for_commandr   r=   r   r  r  ro   rp   rr   r   Resultr  Ticketpytestraises	TypeErrorobjectr   )action_repraction_type_reprbasic_auth_reprdescriptor_reprendpoint_repr	info_reprlocation_reprresult_reprschema_result_reprticket_reprendpointr  s               r   	test_reprr    s   EKBWODO>M	-  MM:KB9KeS)*k999!!%/04DDDD  01_DDD''33E:;NNN$$BII3499",,s:KL H >]***
		"v..7792	2t)D :""" ;<=NNNf%&+555##BIIbM237IIII##BII/?.@$ABC;< < <f%&+555;;"))B-'''f%%..0"	2t)D
	-  :""";;	y	!eT" 
" 
y	!fh+ 
"	y	!em^VX%NO 
"	y	!eR9NO 
"	y	!eR$1aQRTU9VW 
"	y	!eRfh? 
"	! 
"	! 
"	!	!	!	!	!	!	!	!	!sH   /Q) Q*+#Q<0R)%R0R/
Q'*
Q9<
R

R
R,/
R=c                      S S S S S S S S S	 S
 S S S S S S S S S S S /n U  HF  nU" 5       u  p#U" 5       u  pEX":X  d   eX$:X  d   eXB:X  d   eX3:X  d   eX5:X  d   eXS:X  d   eX#:w  a  MF   e   g )Nc                  ^    [         R                  " SS5      [         R                  " SS5      4$ )NrD   r   rU   r	   r  r!   r   r   <lambda>test_eq.<locals>.<lambda>  s    uc*FMM%,EFr   c                  ^    [         R                  " SS5      [         R                  " SS5      4$ )NrD   r      barr  r!   r   r   r  r    s    uc*FMM%,HIr   c                  ^    [         R                  " SS5      [         R                  " SS5      4$ )NrD   rU   rE   r  r!   r   r   r  r    s&    ""5%0""5%02r   c                  ^    [         R                  " SS5      [         R                  " SS5      4$ )Nr  r  user2r	   r  r!   r   r   r  r    s&    !!&&1!!'624r   c                  ^    [         R                  " SS5      [         R                  " SS5      4$ )Nr  r  pass2r  r!   r   r   r  r    s&    !!&&1!!&'24r   c                  ~    [         R                  R                  S5      [         R                  R                  S5      4$ )NrD   )r	   rq   r  rr   r!   r   r   r  r    s.    ((44U;((11%8:r   c                  ^    [         R                  " S/ 5      [         R                  " S/ 5      4$ Nr  r  r	   r   r!   r   r   r  r    s&    &&vr2&&vr24r   c                      [         R                  " S[         R                  " S5      /5      [         R                  " S[         R                  " S5      /5      4$ )Nr  r  grpc+tls://localhost:1234)r	   r   r   r!   r   r   r  r    sI    !!)DEFH!!)DEFH
r   c            
      >   [         R                  " S/ [        R                  " S5      R	                  [        R
                  " S5      5      5      [         R                  " S/ [        R                  " S5      R	                  [        R
                  " S5      5      5      4$ )Nr  r  r  z2023-04-05T12:34:56.789ms)r	   r   r=   r   r  r  r!   r   r   r  r    sq    !!BII&;<AA",,sBSTV!!		3499",,t:LMOPr   c                  Z    [         R                  " S/ SS9[         R                  " S/ SS94$ )Nr  r   r     metar  r!   r   r   r  r    s+    &&vrD&&vrHJr   c                  N   [         R                  " [        R                  " / 5      [         R                  R                  5       / 5      [         R                  " [        R                  " S[        R                  " 5       4/5      [         R                  R                  5       / 5      4$ Nints)r	   ro   r=   rp   rq   rr   r  r!   r   r   r  r    sr    		"''002B8 		FBHHJ/01''002B8	9r   c                  $   [         R                  " [        R                  " / 5      [         R                  R                  5       / 5      [         R                  " [        R                  " / 5      [         R                  R                  S5      / 5      4$ Nr  )r	   ro   r=   rp   rq   rr   r  r!   r   r   r  r    sg    		"''002B8 		"''33F;RA	Br   c            	      z   [         R                  " [        R                  " / 5      [         R                  R                  5       [         R                  " S/ 5      /5      [         R                  " [        R                  " / 5      [         R                  R                  5       [         R                  " S/ 5      /5      4$ r  )r	   ro   r=   rp   rq   rr   r   r!   r   r   r  r    s    		"''002&&vr235 		"''002&&vr2356r   c                     [         R                  " [        R                  " / 5      [         R                  R                  5       / SS9[         R                  " [        R                  " / 5      [         R                  R                  5       / SS94$ )N)total_recordsrJ   r	   ro   r=   rp   rq   rr   r!   r   r   r  r    sj    		"''002BbJ 		"''002BaI	Jr   c                     [         R                  " [        R                  " / 5      [         R                  R                  5       / SS9[         R                  " [        R                  " / 5      [         R                  R                  5       / SS94$ )Nr  )total_bytesr   r  r!   r   r   r  r  #  sj    		"''002BBH 		"''002BBH	Ir   c                     [         R                  " [        R                  " / 5      [         R                  R                  5       / SS9[         R                  " [        R                  " / 5      [         R                  R                  5       / SS94$ )NF)orderedTr  r!   r   r   r  r  *  sj    		"''002BG 		"''002BF	Gr   c                     [         R                  " [        R                  " / 5      [         R                  R                  5       / SS9[         R                  " [        R                  " / 5      [         R                  R                  5       / SS94$ )Nr   r  r  r  r!   r   r   r  r  1  sj    		"''002BSJ 		"''002BWN	Or   c                  Z    [         R                  " S5      [         R                  " S5      4$ )Nr  r  )r	   r   r!   r   r   r  r  8  s     !<=!<=?r   c                  Z    [         R                  " S5      [         R                  " S5      4$ r  )r	   r  r!   r   r   r  r  :  s    v&f(=>r   c                      [         R                  " [        R                  " / 5      5      [         R                  " [        R                  " S[        R                  " 5       4/5      5      4$ r  )r	   r  r=   rp   r  r!   r   r   r  r  ;  sB    $$RYYr]3$$RYY0D/E%FGIr   c                  Z    [         R                  " S5      [         R                  " S5      4$ )Nr   r  )r	   r  r!   r   r   r  r  =  s    s#V]]6%:;r   r!   )itemsgenlhs1rhs1lhs2rhs2s         r   test_eqr    s    FI	2	4	4	:	4	
	P	J	9	B	6	J	I	G	O	?>	I;gTEl U
U
|||||||||||||| r   c                     [         R                  " [        R                  " / 5      [         R                  R                  5       / 5      n [         R                  " [        R                  " / 5      [         R                  R                  5       / SSS9n[         R                  " [        R                  " / 5      [         R                  R                  5       / S S S9nU R                  S:X  d   eUR                  S:X  d   eUR                  S:X  d   eU R                  S:X  d   eUR                  S:X  d   eUR                  S:X  d   eg )Nr  )r  r  )r	   ro   r=   rp   rq   rr   r  r  )fi1fi2fi3s      r   test_flight_info_defaultsr  L  s   


BIIbM6+B+B+K+K+Mr
RC



		"((*BbbRC 


		"((*BdPTVC """""""""??b   ??b   ??b   r   c                      S SS[        5       4/n U  H/  n[        U5       n[        U[        5      (       d   e S S S 5        M1     g ! , (       d  f       MC  = f)Ngrpc://localhost:0r   )r   r   
isinstance)	locationsrh   servers      r   $test_flight_server_location_argumentr  ^  sS    	n&'I
 h'6f&67777 (' ''s   A
A	c                      [         R                  " [        5         [        5          [        5       e! , (       d  f       O= f S S S 5        g ! , (       d  f       g = fr   )r  r  
ValueErrorr   r!   r   r   #test_server_exit_reraises_exceptionr  i  s4    	z	",   
#	"	"s   A1
?	A
Ac                  L  ^ S[        5       4mS n U4S jn[        T5       n[        R                  " USS9nUR	                  5         [
        R
                  " 5       nUR                  SS9  [
        R
                  " 5       U-
  nUS:  d   e S S S 5        g ! , (       d  f       g = f)Nr   c                  p   > [         R                  " S5        [        T 5      q[        R	                  5         g rB  )rD  rE  r   r  serverh   s   r   r  -test_client_wait_for_available.<locals>.serveu  s!    

3!(+r   Ttargetdaemonr8   timeoutrC  )r   r
   	threadingThreadstartrD  wait_for_available)r  r  clientthreadr  elapsedrh   s         @r   test_client_wait_for_availabler  o  s     ^-.HF 
h	6!!t<))+!!!!,))+'#~~ 
 		s   A*B
B#c                  v   [        5        n [        R                  " SU R                  45       n[	        UR                  5       5      / :X  d   eUR                  [         R                  5      n[        [	        U5      5      S:X  d   e SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)zTry a simple list_flights call.r   rJ   N)r]   r	   connectportlistrv   rn   len)r  r  flightss      r   test_flight_list_flightsr    s    		6NNK56&F'')*b000%%&:&C&CD4=!Q&&& 7 
 	66 
 	s#   #B*ABB*
B'	#B**
B8c                     [        5        n [        R                  " SU R                  45       n[	        UR                  5       5      / :X  d   eUR                  5         UR                  5         [        R                  " [        R                  5         [	        UR                  5       5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g = f)Nr   )r]   r	   r  r  r  rv   closer  r  r=   rX  r  r  s     r   test_flight_client_closer    s    		6NNK56&F'')*b000]]2??+$$&' ,	 7 
 	
 ,+	 76 
 	s;   #C'A$CC,C4C'
CC
C$	 C''
C5c                     [        5       n [        5        n[        R                  " SUR                  45       nUR                  [        R                  " S5      5      R                  5       nUR                  U 5      (       d   e SSS5        SSS5        [        R                  R                  [        R                  R                  R                  S9n[        US9 n[        R                  " SUR                  45       nUR                  [        R                  " S5      5      R                  5       nUR                  U 5      (       d   eUR                  [        R                  " S5      5      R                  5       R                  5       nUR                  U 5      (       d   e SSS5        SSS5        [        R                   " [        R"                  SS9   [        SS9 n[        R                  " SUR                  45       nUR                  [        R                  " S5      5      R                  5       nSSS5        SSS5        SSS5        g! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Ne= f! , (       d  f       Nn= f! , (       d  f       g= f)	Try a simple do_get call.r   r`   Nmetadata_versionry   z+expected IpcWriteOptions, got <class 'int'>matchr   )rB   r]   r	   r  r  r}   r  r   r   r=   ipcIpcWriteOptionsMetadataVersionV4r   r  r  r2  )r|   r  r  rA   rf   s        r   test_flight_do_get_intsr&    s   E		6NNK56&}}V]]734==?{{5!!!! 7 
 
 ff$$//22 % 4G	g	.&NNK56&}}V]]734==?{{5!!!! }}V]]734>>@IIK{{5!!!! 7 
/ 
v//J
L!"-V[[9:f==w!78AACD ; .
L 
L 76 
 	 76 
/	. ;: .-
L 
Ls   #I%AII%#J B%I7&J
J;##J*4J:J*J;
I"	I%%
I47
J	J
J
J'#J**
J8	4J;;
K	c                     [        5       n [        5        n[        R                  " SUR                  45       nUR                  [        R                  " S5      5      R                  5       n[        US   5      U R                  S5      R                  5       :X  d   e SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)r  r   r`   r:   r   N)rB   r]   r	   r  r  r}   r  read_pandasr  r  	to_pylist)r|   r  r  rA   s       r   test_do_get_ints_pandasr*    s     E		6NNK56&}}V]]734@@BD%&%,,q/*C*C*EEEE 7 
 	66 
 	s#   #C A%B/C /
B=	9C  
Cc                     [        5       n [        5        n[        R                  " SUR                  45       nUR                  [        R                  " S5      5      nUR                  R                  S:X  d   eUR                  5       nUR                  U 5      (       d   eUR                  [        SSSSSS9:X  d   e S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)	Nr   ra   rJ   r   rL   rK   r   r   r   num_dictionary_batchesnum_dictionary_deltasnum_replaced_dictionaries)rS   r]   r	   r  r  r}   r  r   r   r   r   r   )r|   r  r  r   rA   s        r   test_flight_do_get_dictsr0    s     E		6NNK56&v}}X67||((A--- {{5!!!!||y #$"#&' 
 
 	
 
 7 
 	66 
 	s#   #C"BC C"
C	C""
C0c                     [         R                  " / SQ[         R                  " 5       S9/n [         R                  R	                  U S/S9n[        SS9 n[        R                  " SUR                  45       nUR                  [        R                  " S5      5      R                  5       nUR                  U5      (       d   e SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)	z+Make sure Tickets get passed to the server.r6   rG   rY   r;   s
   the-ticket)r!  r   N)r=   r>   r   r?   r@   r  r	   r  r  r}   r  r   r   )r$  r|   r  r  rA   s        r   test_flight_do_get_ticketr2    s    XX)
;<EHH  se 4E	 	?6NNK56&}}V]]=9:CCE{{5!!!! 7 
@	?66 
@	?s%   #C&7ACC&
C#	C&&
C4c                     [        5        n [        SU R                  45      nUR                  [        R
                  R                  S5      5      nUR                  S:X  d   eUR                  S:X  d   eUR                  (       d   eUR                  S:X  d   eUR                  [        R                  " S[        R                  " 5       4/5      :X  d   e[        UR                  5      S:X  d   e[        UR                  S   R                   5      S:X  d   eUR                  S   R"                  b   eUR                  S   R                  S:X  d   eUR                  S   R                   S   [        R$                  " S
5      :X  d   eUR                  S   R"                  [        R&                  " S5      R)                  [        R*                  " SS5      5      :X  d   eUR                  S   R                  S:X  d   eUR                  S   R                   S   [        R$                  R-                  SS5      :X  d   e S	S	S	5        g	! , (       d  f       g	= f)z8Make sure FlightEndpoint accepts string and object URIs.r   r   rJ   r   s   info app metadatarY   rK   r   Nr   z#2023-04-05T12:34:56.789012345+00:00r   UTCr  r   )r   r
   r  r  r	   rq   r  r  r  r  r  rp   r=   r   r  	endpointsr  r  r   r   r  r  r   r  r  r  s      r   test_flight_get_infor7    s   		&{FKK89%%f&=&=&I&I#&NO!!Q&&&2%%%|||  $8888{{bii#rxxz):(;<<<<4>>"a'''4>>!$../1444~~a 00888~~a --444~~a **1-1OOOO~~a 00II;<tBLLu-./ 	/ / ~~a --1IIII~~a **1-OO((d;< 	< <# 
		s   H5I


Ic                     [        5        n [        SU R                  45       nUR                  [        R
                  R                  S5      5      nUR                  [        R                  " S[        R                  " 5       4/5      :X  d   e SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)z+Make sure GetSchema returns correct schema.r   r   rY   N)
r   r
   r  r	  r	   rq   r  rp   r=   r   r6  s      r   test_flight_get_schemar9    s    		&+v{{34  !8!8!D!DS!IJ{{bii#rxxz):(;<<<< 5 
	44 
	s#   B1A+B B1 
B.	*B11
B?c                  h   [        5        n [        SU R                  45       n[        R                  " [
        R                  SS9   [        UR                  5       5        SSS5        SSS5        SSS5        [        5        n [        SU R                  45       n[        UR                  5       5      [        R                  5       :X  d   e SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NJ= f! , (       d  f       g= f)z6Make sure the return type of ListActions is validated.r   z3Results of list_actions must be ActionType or tupler   N)r  r
   r  r  r  r	   r2  r  r   r  r  r  s     r   test_list_actionsr;    s     
&	'6+v{{34]]((-

 $$&'
 5 
( 
!	"f+v{{34F'')*#4467 	7 7 5 
#	"
 
 54 
(	' 54 
#	"s^   D$C0C!C0)DD#2DD#
C-)C00
C>	:D
D
D 	D##
D1c                   .    \ rS rSrSr\S 5       rS rSrg)ConvenienceServeri  zL
Server for testing various implementation conveniences (auto-boxing, etc.)
c                 
    / SQ$ )N)r  r  s   bazr!   r  s    r   simple_action_results'ConvenienceServer.simple_action_results  s    ''r   c                 "  ^ UR                   S:X  a  U R                  $ UR                   S:X  a  UR                  /$ UR                   S:X  a  S/$ UR                   S:X  a  [        R                  " 5       eUR                   S:X  a  U4S jnU" 5       $ g )Nsimple-actionecho
bad-actionrD   arrow-exceptionforeverc               3   p   >#    T R                  5       (       d  Sv   T R                  5       (       d  M  g g 7fr  )is_cancelled)rt   s   r   r  (ConvenienceServer.do_action.<locals>.gen  s+     !..00 L "..00s   /66)rH   r?  bodyr=   ArrowMemoryError)rg   rt   r   r  s    `  r   r   ConvenienceServer.do_action  s    ;;/)---[[F"KK= [[L(7N[[--%%''[[I%! 5L	 &r   r!   N)	r   r   r   r   r   propertyr?  r   r   r!   r   r   r=  r=    s      ( (r   r=  c                     [        5        n [        SU R                  45       nUR                  S5       Vs/ s H  o"R                  PM     nnX0R
                  :X  d   eSnUR                  SU45       Vs/ s H  o"R                  PM     nnX4/:X  d   e S S S 5        S S S 5        g s  snf s  snf ! , (       d  f       N!= f! , (       d  f       g = f)Nr   rB  s   the-bodyrC  )r=  r
   r  r   rJ  r?  )r  r  xresultsrJ  s        r   !test_do_action_result_conveniencerQ  $  s    		+v{{34 $*#3#3O#DE#Da66#DE66666 #)#3#3VTN#CD#Ca66#CD&    5 
	 F
 E 54 
	s?   CB1B'*B16B,
B1C'
B11
B?	;C
Cc                  
   [        5        n [        SU R                  45       n[        R                  " [
        R                  SS9   [        UR                  S5      5        S S S 5        [        R                  " [
        R                  SS9   [        UR                  S5      5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       Ne= f! , (       d  f       N0= f! , (       d  f       N9= f! , (       d  f       g = f)Nr   za bytes-like object is requiredr   rD  rK  rE  )	r=  r
   r  r  r  r	   r2  r  r   r  s     r   test_nicer_server_exceptionsrS  2  s    		+v{{34]]633!BD!!,/0D ]]633!35!!"3455 5 
	D D5 5 54 
	sR   C4$C#C"+C#C(C#0C4
CC#
C C##
C1	-C44
Dc                      [        S5      n  U R                  S:  d   e U R                  5         g! U R                  5         f = f)zMake sure port() works.r  r   N)r   r  shutdown)r  s    r   test_get_portrV  A  s7     !56F{{Qs	   1 Antz'Unix sockets can't be tested on Windows)reasonc                  r   [         R                  " 5        n U R                  5         [        R                  R                  U R                  5      n[        US9   [        U5       nUR                  [        R                  " S5      5      n[        5       nUR                  R                  UR                  5      (       d   eUR                  5       nUR                  U5      (       d   eUR                  [        R                  " S5      5      n[        5       nUR                  R                  UR                  5      (       d   eUR                  5       nUR                  U5      (       d   e SSS5        SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g= f)z3Try a simple do_get call over a Unix domain socket.r  r`   ra   N)tempfileNamedTemporaryFiler  r	   r   for_grpc_unixnamer]   r
   r}   r  rB   rp   r   r   rS   )sockrh   r  r   r|   rA   s         r   test_flight_domain_socketr_  J  s0    
	$	$	&$

??00;!84X&&]]6==#9:F%'E==''5555??$D;;u%%%%]]6==#:;F&(E==''5555??$D;;u%%%% ' 5 
'	& '& 54 
'	&s=   AF(F%DF-F5F(
FF
F%	!F((
F6c                     [         R                  R                  [         R                  " [	        SS5      5      /S/S9n [        U R                  S9 n[        SUR                  45       nUR                  [        R                  R                  S5      U R                  5      u  p4UR                  U S5        UR                  5         UR                  [        R                   " S5      5      R#                  5       nUR%                  U 5      (       d   e S	S	S	5        S	S	S	5        g	! , (       d  f       N= f! , (       d  f       g	= f)
zTry sending/receiving a large message via Flight.

See ARROW-4421: by default, gRPC won't allow us to send messages >
4MiB in size.
r   i   rY   r;   )r   r   r  r   N)r=   r?   r@   r>   r8  r   rp   r
   r  r   r	   rq   rr   r{  r  r}   r  r   r   rA   r  r  r   _r  s         r   test_flight_large_messagerc  a  s     88
q*+,!U   D 
$++	6&+v{{34MM&"9"9"B"B6"J"&++/	 	4!12v}}S12;;=}}T"""" 5 
7	644 
7	6s%   D6*B)D%D6%
D3	/D66
Ec                  z   [         R                  R                  [         R                  " [	        SS5      5      /S/S9n [        5        n[        SUR                  45       nUR                  [        R                  R                  S5      U R                  5      u  p4UR                  U 5        UR                  5         UR                  [        R                   " S5      5      R#                  5       nUR%                  U 5      (       d   e SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)	z?Try downloading a flight of RecordBatches in a GeneratorStream.r   ry  rY   r;   r   r  r   N)r=   r?   r@   r>   r8  r   r
   r  r   r	   rq   rr   rp   r{  r  r}   r  r   r   ra  s         r   'test_flight_generator_stream_of_batchesre  w  s    88
q)$%!U   D 
 	!V+v{{34MM&"9"9"B"B6"J"&++/	4 v}}S12;;=}}T"""" 5 
"	!44 
"	!%   	D,!B(D
D,
D)	%D,,
D:c            
         [         R                  R                  [         R                  " / SQ[         R                  " [         R
                  " 5       [         R                  " 5       5      5      [         R                  " / SQ5      /SS/S9n [        5        n[        SUR                  45       nUR                  [        R                  R                  S5      U R                  5      u  p4UR                  U 5        UR!                  5         UR#                  [        R$                  " S5      5      R'                  5       nUR)                  U 5      (       d   e S	S	S	5        S	S	S	5        g	! , (       d  f       N= f! , (       d  f       g	= f)
zS
Try downloading a flight of RecordBatches with dictionaries
in a GeneratorStream.
rD   rU   rE   rD   rD   {      iY  i  i7  rY   rZ   r;   r   r  r   Nr=   r?   r@   r>   
dictionaryr  rN   r   r
   r  r   r	   rq   rr   rp   r{  r  r}   r  r   r   ra  s         r   1test_flight_generator_stream_of_batches_with_dictrn       
 88
4rxxz27795	7
*+! 3Z	   D 
1	2f+v{{34MM&"9"9"B"B6"J"&++/	4 v}}S12;;=}}T"""" 5 
3	244 
3	2%   E8-B(E'E8'
E5	1E88
Fc                  z   [         R                  R                  [         R                  " [	        SS5      5      /S/S9n [        5        n[        SUR                  45       nUR                  [        R                  R                  S5      U R                  5      u  p4UR                  U 5        UR                  5         UR                  [        R                   " S5      5      R#                  5       nUR%                  U 5      (       d   e SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)	z7Try downloading a flight of Table in a GeneratorStream.r   ry  rY   r;   r   r  r   N)r=   r?   r@   r>   r8  r   r
   r  r   r	   rq   rr   rp   r{  r  r}   r  r   r   ra  s         r   %test_flight_generator_stream_of_tablerr    s    88
q)$%!U   D 
%	&&+v{{34MM&"9"9"B"B6"J"&++/	4 v}}S12;;=}}T"""" 5 
'	&44 
'	&rf  c            
         [         R                  R                  [         R                  " / SQ[         R                  " [         R
                  " 5       [         R                  " 5       5      5      [         R                  " / SQ5      /SS/S9n [        5        n[        SUR                  45       nUR                  [        R                  R                  S5      U R                  5      u  p4UR                  U 5        UR!                  5         UR#                  [        R$                  " S5      5      R'                  5       nUR)                  U 5      (       d   e S	S	S	5        S	S	S	5        g	! , (       d  f       N= f! , (       d  f       g	= f)
zK
Try downloading a flight of Table with dictionaries
in a GeneratorStream.
rh  ri  rY   rZ   r;   r   r  r   Nrl  ra  s         r   /test_flight_generator_stream_of_table_with_dictrt    ro  rp  c                  z   [         R                  R                  [         R                  " [	        SS5      5      /S/S9n [        5        n[        SUR                  45       nUR                  [        R                  R                  S5      U R                  5      u  p4UR                  U 5        UR                  5         UR                  [        R                   " S5      5      R#                  5       nUR%                  U 5      (       d   e SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)	zCTry downloading a flight of RecordBatchReader in a GeneratorStream.r   ry  rY   r;   r   r  r   N)r=   r?   r@   r>   r8  r   r
   r  r   r	   rq   rr   rp   r{  r  r}   r  r   r   ra  s         r   3test_flight_generator_stream_of_record_batch_readerrv    s    88
q)$%!U   D 
1	2f+v{{34MM&"9"9"B"B6"J"&++/	4 v}}S12;;=}}T"""" 5 
3	244 
3	2rf  c            
         [         R                  R                  [         R                  " / SQ[         R                  " [         R
                  " 5       [         R                  " 5       5      5      [         R                  " / SQ5      /SS/S9n [        5        n[        SUR                  45       nUR                  [        R                  R                  S5      U R                  5      u  p4UR                  U 5        UR!                  5         UR#                  [        R$                  " S5      5      R'                  5       nUR)                  U 5      (       d   e S	S	S	5        S	S	S	5        g	! , (       d  f       N= f! , (       d  f       g	= f)
zW
Try downloading a flight of RecordBatchReader with dictionaries
in a GeneratorStream.
rh  ri  rY   rZ   r;   r   r  r   Nrl  ra  s         r   =test_flight_generator_stream_of_record_batch_reader_with_dictrx    ro  rp  c                     [        5        n [        SU R                  45       n[        R                  " [
        R                  5         UR                  [        R                  " S5      5      R                  5         SSS5        SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g= f)z+Try streaming data with mismatched schemas.r   r   N)r)  r
   r  r  r  r=   ArrowExceptionr}   r	   r  r   r  s     r   $test_flight_invalid_generator_streamr{    sx    	"	$+v{{34]]2,,-MM&--,-668 . 5 
%	$-- 54 
%	$s:   B7%B&4B<B&B7
B#B&&
B4	0B77
Cc            
         [        5        n [        SU R                  45       n[        R                  " SS5      n[        R
                  " SS9n[        R                  " [        R                  5         [        UR                  X#S95        SSS5        SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g= f)z)Make sure timeouts fire on slow requests.r   r  r   g?r  ry   N)r=  r
   r  r	   r  r   r  r  rT  r  r   )r  r  r   rf   s       r   test_timeout_firesr}    s     
	v+v{{34r3'**37 ]]6556!!&!:; 7 5 
	 76 54 
	s;   CAB63B%B6C%
B3/B66
C	 C
Cc                  :   [        5        n [        SU R                  45       n[        R                  " SS9nUR                  [        R                  " S5      US9R                  5         SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)z0Make sure timeouts do not fire on fast requests.r   r+  r  r`   ry   N)r]   r
   r  r	   r   r}   r  r   )r  r  rf   s      r   test_timeout_passesr    sl    		6+v{{34**37fmmG,g>GGI 5 
 	44 
 	s#   BAA;*B;
B		B
Bc                     [         R                  R                  [         R                  " / SQ5      /S/S9n [	        5        n[        SUR                  45       n[        R                  " [        S/S9S9nUR                  [        R                  " S5      US	9R                  5       nUR                  [        R                  " S5      5      R                  5       nUR                  S
:X  d   eUR                  S:X  d   eX@:X  d   eU[        5       :X  d   e SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)z"Make sure ReadOptions can be used.rW   rZ   r;   r   rJ   )included_fields)read_optionsrb   ry   rK   N)r=   r?   r@   r>   r]   r
   r  r	   r   r   r}   r  r   num_columnsr[   )expectedr  r  rf   	response1	response2s         r   test_read_optionsr    s   xx##RXXl%;$<SE#JH		6+v{{34**'<>MM&--#& " ((0
 	MM&--"9:CCE	$$)))$$)))$$$13333 5 
 	44 
 	s%   D9B=D(D9(
D6	2D99
E   tests   p4ssw0rdr  c                     [        [        S9 n [        SU R                  45       n[        R
                  " SS5      n[        R                  " [        R                  SS9   [        UR                  U5      5        SSS5        SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g= f)z,Test that auth fails when not authenticated.auth_handlerr   r   r   z.*unauthenticated.*r   N)r   basic_auth_handlerr
   r  r	   r  r  r  rV  r  r   r  r  r   s      r   test_http_basic_unauthr    s     
 -?	@F+v{{34z3/]]6<<!68!!&)*8 5 
A	@8 8 54 
A	@s:   B7;B&!B<B&B7
B#B&&
B4	0B77
Cz,ARROW-10013: gRPC on Windows corrupts peer()c                     [        [        S9 n [        SU R                  45       n[        R
                  " SS5      nUR                  [        SS5      5        UR                  U5      n[        U5      nUR                  R                  5       S:X  d   e[        U5      nUR                  R                  5       S:w  d   e SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)	z:Test a Python implementation of HTTP basic authentication.r  r   r   r   r  p4ssw0rdr  N)r   r  r
   r  r	   r  r  r  r   nextrJ  r   )r  r  r   rP  identitypeer_addresss         r   test_http_basic_authr  )  s     
 -?	@F+v{{34z3/6vzJK""6*=}}'')W444G}  ++-444 5 
A	@44 
A	@s#   C#BCC#
C 	C##
C1c            	         [        [        S9 n [        SU R                  45       n[        R
                  " SS5      n[        R                  " [        R                  SS9   UR                  [        SS5      5        [        UR                  U5      5        S	S	S	5        S	S	S	5        S	S	S	5        g	! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g	= f)
z-Test that auth fails with the wrong password.r  r   r   r   z.*wrong password.*r   r  wrongN)r   r  r
   r  r	   r  r  r  rV  r  r  r  r   r  s      r   %test_http_basic_auth_invalid_passwordr  8  s    	-?	@F+v{{34z3/]]6<<!57 :67 KL!!&)*7 5 
A	@7 7 54 
A	@s:   C;C!6B0CC0
B>:C
C	C
C c                     [        [        S9 n [        SU R                  45       n[        R
                  " SS5      nUR                  [        SS5      5        [        UR                  U5      5      nUR                  R                  5       S:X  d   e SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)	-Test an auth mechanism that uses a handshake.r  r   r   r   r  r  r  N)r   token_auth_handlerr
   r  r	   r  r  r  r  r   rJ  r   )r  r  r   r  s       r   test_token_authr  C  s    	-?	@F+v{{34z3/26:FG((01}}'')W444	 5 
A	@44 
A	@s#   B6A-B%B6%
B3	/B66
Cc            	      f   [        [        S9 n [        SU R                  45       n[        R
                  " [        R                  5         UR                  [        SS5      5        SSS5        SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g= f)r  r  r   r  r  N)
r   r  r
   r  r  r  r	   rV  r  r  r  s     r   test_token_auth_invalidr  M  su    	-?	@F+v{{34]]6<<= 6vw GH > 5 
A	@== 54 
A	@s:   B"%BB 'B/B" 
B
B
B	B""
B0c                     [        [        S[        5       0S9 n [        SU R                  45       nUR                  SS5      nUS   S:X  d   eUS   S	:X  d   e S
S
S
5        S
S
S
5        g
! , (       d  f       N= f! , (       d  f       g
= f)zATest authenticate_basic_token with bearer token and auth headers.r  r  r  r   r     passwordr   r  rJ      Bearer token1234N)r  no_op_auth_handlerr  r
   r  authenticate_basic_token)r  r  
token_pairs      r   test_authenticate_basic_tokenr  Y  s    	-?13M 

+v{{3444WkJ
!} 0000!} 3333 5
 
 54
 
s"   A=)A,A=,
A:	6A==
Bc                  j   [        [        S[        5       0S9 n [        SU R                  45       n[
        R                  " [        R                  5         UR                  SS5        SSS5        SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g= f)z7Test authenticate_basic_token with an invalid password.r  r  r   r  s   badpasswordN)
r  r  r  r
   r  r  r  r	   rV  r  r  s     r   .test_authenticate_basic_token_invalid_passwordr  d  s    	-?13M 

+v{{34]]6<<=++G^D > 5
 
 >= 54
 
s:   B$%BB)B1B$
BB
B!	B$$
B2c            
         [        [        S[        5       0S9 n [        SU R                  45       nUR                  SS5      nUS   S:X  d   eUS   S	:X  d   e[        R                  " U/S
9n[        UR                  [        R                  " SS5      US95      nUS   R                  R                  5       S:X  d   e SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)z@Test authenticate_basic_token and doAction after authentication.r  r  r   r  r  r   r  rJ   r  r  test-actionr   r   rf   	   token1234N)r  r  r  r
   r  r  r	   r   r  r   r  rJ  r   r  r  r  rf   r  s        r   (test_authenticate_basic_token_and_actionr  n  s    	-?13M 

+v{{3444WkJ
!} 0000!} 3333**J<@f&&==4g ' G Hay~~((*l::: 5
 
 54
 
s#   C#BCC#
C 	C##
C1c            	         [        [        S[        5       0S9 n [        5       n[	        SU R
                  4U/S9n[        R                  " S5      n[        R                  " SSU-   4/S9n[        UR                  [        R                  " S	S
5      US95      nUS   R                  R                  5       S:X  d   eUR                  S   S:X  d   eUR                  S   S:X  d   e[        UR                  [        R                  " S	S
5      US95      nUS   R                  R                  5       S:X  d   eUR                  S   S:X  d   eUR                  S   S:X  d   eUR!                  5         SSS5        g! , (       d  f       g= f)zTest authenticate_basic_token with client middleware
to intercept authorization header returned by the
HTTP header auth enabled server.
r  r  r   r  s   test:passwordr  s   Basic r  r  r   r  r   r  rJ   r  N)r  r  r  r  r
   r  r  r  r	   r   r  r   r  rJ  r   r  r  )r  client_auth_middlewarer  encoded_credentialsrf   r  result2s          r   4test_authenticate_basic_token_with_client_middlewarer  }  s   
 
 -?13M 

!B!D&++&./
 %../?@**y+>>?4
  f&&==4g ' G Hay~~((*l:::%55a8<LLLL%55a8%& 	& &v''==4g ( G Hqz))+|;;;%55a8<LLLL%55a8%& 	& &1
 
 
s   EE::
Fc            
      D   [        [        [        5       [        5       S.S9 n [	        SU R
                  45       nUR                  SS5      nUS   S:X  d   eUS   S	:X  d   e[        R                  " US
S/S9n[        UR                  [        R                  " SS5      US95      nUS   R                  R                  5       S:X  d   eUS   R                  R                  5       S:X  d   e SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)z:Test passing multiple arbitrary headers to the middleware.)r  r1  r  r   r  r  r   r  rJ   r  )s   test-header-1   value1)s   test-header-2   value2r  r  r   ry   r  r  N)r/  r  r  r"  r
   r  r  r	   r   r  r   r  rJ  r   r  s        r   -test_arbitrary_headers_in_flight_call_optionsr    s   	%'57!H!J


 +v{{3444WkJ
!} 0000!} 3333**))4
 
 f&&v}}3( )0 ' 2 3ay~~((*i777ay~~((*i777 5
 
 54
 
s#   DB4D /D 
D	
D
Dc                  :   [         R                  " [        R                  SS9   [        R
                  " S5        SSS5        [         R                  " [        R                  SS9   [        S5        SSS5        g! , (       d  f       NF= f! , (       d  f       g= f)zTest constructing invalid URIs.z.*Cannot parse URI:.*r   %N)r  r  r=   rX  r	   r  r]   r!   r   r   test_location_invalidr    sa    	r.E	Fs 
G 
r.E	FS! 
G	F 
G	F 
G	Fs   A;&B;
B	
Bc                      [         R                  " S5      R                  S:X  d   e[         R                  " S5      R                  S:X  d   eg)z,Test creating locations for unknown schemes.zs3://foos   s3://foozhttps://example.com/bar.parquets   https://example.com/bar.parquetN)r	   r   urir!   r   r   test_location_unknown_schemer    sD    ??:&**k999??<=AA*+ + +r   c                     [        5       n [        U S   S9 n[        S[        UR                  5      -   5       n[
        R                  " [        R                  5         UR                  [        R                  " S5      5      R                  5         SSS5        SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g= f)z>Make sure clients cannot connect when cert verification fails.r2   tls_certificateszgrpc+tls://localhost:r`   N)r4   r]   r
   r  r  r  r  r	   FlightUnavailableErrorr}   r  r   certsr  r  s      r   test_tls_failsr    s     E 
u^/D	E03qvv;>?6 ]]6889MM&--01::< : @ 
F	E :9 @? 
F	Es:   "C%B<4B+B<C+
B95B<<
C
	C
Cc                  v   [        5       n [        5       n[        US   S9 n[        SUR                  4US   S9 nUR                  [        R                  " S5      5      R                  5       nUR                  U 5      (       d   e SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)z"Try a simple do_get call over TLS.r2   r  r   r1   )tls_root_certsr`   N)
rB   r4   r]   r
   r  r}   r	   r  r   r   r|   r  r  r  rA   s        r   test_tls_do_getr    s     EE	u^/D	Ek166*$)+$6	8;A}}V]]734==?{{5!!!!	8 
F	E	8 	8 
F	Es#   B*ABB*
B'	#B**
B8c                     [        5       n [        5       n[        US   S9 n [        SUR                  4SS9nWR                  [        R                  " S5      5      R                  5       nUR                  U 5      (       d   eUR                  5         SSS5        g! [
         a    [        R                  " S5         Nf = f! , (       d  f       g= f)	zDTry a simple do_get call over TLS with server verification disabled.r2   r  r   Tdisable_server_verificationz4disable_server_verification feature is not availabler`   N)rB   r4   r]   r
   r  r   r  skipr}   r	   r  r   r   r  r  s        r   $test_tls_disable_server_verificationr    s     EE	u^/D	E	P!;"7>BDF }}V]]734==?{{5!!!! 
F	E # 	PKKNO	P	 
F	Es.   CBAC C =C?C  C
Cc                     [        5       n [        U S   S9 n[        R                  " SUR                  4U S   SS9 n[
        R                  " [        R                  5         UR                  [        R                  " S5      5        SSS5        SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g= f)	z5Check that incorrectly overriding the hostname fails.r2   r  r   r1   fakehostname)r  override_hostnamer`   N)
r4   r]   r	   r  r  r  r  r  r}   r  r  s      r   test_tls_override_hostnamer    s     E	u^/D	EQVV,&+K&8)7	9<B]]6889MM&--01 :	9 
F	E :9	9 	9 
F	Es:   &C%B2"&B!B2C!
B/+B22
C 	<C
Cc                  ~   [         R                  " / SQ5      /n [         R                  R                  U S/S9n/ n[	        5        n[        SUR                  45       nUR                  [        R                  " S5      5      nSnU HI  u  pxUR                  U5        [        R                  " SUR                  5       5      u  n	Xi:X  d   eUS-  nMK     [         R                  R                  U5      n U R                  U5      (       d   e S	S	S	5        S	S	S	5        g	! , (       d  f       N= f! , (       d  f       g	= f)
z'Try a simple do_get call with metadata.r6   rY   r;   r   r   r   r   rJ   N)r=   r>   r?   r@   r   r
   r  r}   r	   r  rg  r   r   r   from_batchesr   )
rA   r|   batchesr  r  r   r   r   metadata
server_idxs
             r   test_flight_do_get_metadatar    s    	$%D HH  cU 3EG		6+v{{34v}}S12%OENN5! --h.A.A.CDKJ$$$1HC	  &
 xx$$W-{{5!!!! 5 
 	44 
 	s%   D.B.DD.
D+	'D..
D<c                     / n / n[        5        n[        SUR                  45       nUR                  [        R
                  " S5      5      nSn  UR                  5       u  pgU R                  U5        [        R                  " SUR                  5       5      u  nXX:X  d   eUS-  nMY  ! [         a     Of = fSSS5        O! , (       d  f       O= fSSS5        O! , (       d  f       O= f[        5        n[        SUR                  45       nUR                  [        R
                  " S5      5      nSnU HI  u  pgUR                  U5        [        R                  " SUR                  5       5      u  nXX:X  d   eUS-  nMK     SSS5        O! , (       d  f       O= fSSS5        O! , (       d  f       O= fX:X  d   eg)z0Verify the iterator interface works as expected.r   r   r   r   rJ   N)r   r
   r  r}   r	   r  
read_chunkrg  r   r   r   StopIteration)	batches1batches2r  r  r   r   r   r  r  s	            r   1test_flight_metadata_record_batch_reader_iteratorr    so   HH		6+v{{34v}}S12"("3"3"5&$mmD(2E2E2GH
(((q  !  544 
 		 
	6+v{{34v}}S12%OEOOE" --h.A.A.CDKJ$$$1HC	  & 544 
 		 sl   C)CAB)'C)
B63C5B66C9	C
C	C
C*7F)A7F	F)
F	F))
F7c                  2   [         R                  R                  [         R                  " / SQ5      /S/S9n [         R                  R                  [         R                  R                  R                  S9n[        US9 n[        SUR                  45       nUR                  [        R                  " S5      5      nUR                  5       nUR                  U 5      (       d   e SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)	z2Try a simple do_get call with V4 metadata version.r6   rY   r;   r  ry   r   r   N)r=   r?   r@   r>   r"  r#  r$  r%  r   r
   r  r}   r	   r  r   r   )r|   rf   r  r  r   rA   s         r   test_flight_do_get_metadata_v4r  4  s    HH  	%	&'u ! 6Eff$$//22 % 4G	g	.&+v{{34v}}S12 {{5!!!! 5 
/	.44 
/	.s%   ?DAC7&D7
D	D
Dc            	         [         R                  " / SQ5      /n [         R                  R                  U S/S9n[	        5        n[        SUR                  45       nUR                  [        R                  R                  S5      UR                  5      u  pEU   [        UR                  SS95       Hp  u  pg[        R                  " SU5      nUR!                  Xx5        UR#                  5       n	U	c   e[        R$                  " SU	R'                  5       5      u  n
Xj:X  a  Mp   e   S	S	S	5        S	S	S	5        S	S	S	5        g	! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g	= f)
z'Try a simple do_put call with metadata.r6   rY   r;   r   r  rJ   r   r   N)r=   r>   r?   r@   r   r
   r  r   r	   rq   rr   rp   r   r   r   r   r  r&   r   r   )rA   r|   r  r  r   metadata_readerr   r   r  r   r  s              r   test_flight_do_put_metadatar  A  s(    	$%D HH  cU 3E		6+v{{34"(--##,,R0LL# '(8(8q(8(IJ
!;;tS1**5;%**,&$mmD#..2BC
((( K 	 5 
 	
 V	 54 
 	sC   E!>EBD?"D?&E.E!?
E	E
E	E!!
E/c            	         [         R                  R                  [         R                  " [        R
                  " S[        R                  " 5       S95      /S/S9n [        5        n[        SUR                  4SS9 nUR                  [        R                  R                  S5      U R                  5      u  p4U   [        R                   " [        R"                  S	S
9 nUR%                  U 5        SSS5        WR&                  R(                  S:X  d   eU R+                  SS5      U R+                  S5      /nU H  nUR%                  U5        M     SSS5        [         R,                  R/                  U /5      nUR1                  [        R2                  " S5      5      R5                  5       n	X:X  d   e SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N9= f! , (       d  f       g= f)z+Try a simple do_put call with a size limit.i   )dtyperY   r;   r   i   )write_size_limit_bytesr  zexceeded soft limitr   Nr   i  r   )r=   r   r@   r>   nponesr  r   r
   r  r   r	   rq   rr   rp   r  r  FlightWriteSizeExceededErrorr  r  limitslicer?   r  r}   r  r   )
large_batchr  r  r   r  excinfosmaller_batchesr   r  actuals
             r   test_flight_do_put_limitr  W  s    ..,,
BHHJ/0.U - K 
	vk6;;/,0	25;"(--##,,R0#  vBB%:<?F"";/< ==&&$...!!!S)!!#&O )""5) )  88((+7v}}S12;;=!!!%	2 
	< < V	2 	2 
	sV   %G8<>G':$GG	0A!GA"G'4G8
GG
G$ G''
G5	1G88
Hc                     [        5        n [        SU R                  45       nUR                  [        R
                  " S5      5      nUR                  5         [        R                  " [        R                  SS9   UR                  5         SSS5        SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g= f)z4Test canceling a DoGet operation on the client side.r   r`   z(?i).*cancel.*r   N)r]   r
   r  r}   r	   r  rN  r  r  rU  r  )r  r  r   s      r   test_cancel_do_getr  t  s     
	6+v{{34v}}W56]]666!133 5 
 	3 3 54 
 	s;   CAB7<B&B7C&
B40B77
C	C
Cc                    ^^^^^ [        5        n [        SU R                  45       nUR                  [        R
                  " S5      5      m[        R                  " 5       m[        R                  " 5       m[        R                  " 5       m[        R                  " 5       mUUUUU4S jn[        R                  " USS9nUR                  5         TR                  SS9  TR                  5         TR                  5         UR                  SS9  T   TR                  5       (       d   e S	S	S	5        S	S	S	5        S	S	S	5        g	! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g	= f)
z5Test canceling a DoGet operation from another thread.r   r`   c                    > TR                  5         TR                  5         TR                  SS9   TR                  5         g ! [        R                   a0    T   T R                  5         S S S 5         g ! , (       d  f        g = ff = f)Nr8   r  )r  setwaitr	   rU  )raised_proper_exceptionread_first_messager   result_lockstream_canceleds   r   
block_read/test_cancel_do_get_threaded.<locals>.block_read  sm    ""$   +2!!#.. 2 +//1 ![[[2s)   A BA4*B4
B	>BBTr  r8   r  rJ   N)r=  r
   r  r}   r	   r  r	  EventLockr
  r  r  rN  r  joinis_set)	r  r  r  r  r  r  r   r  r  s	       @@@@@r   test_cancel_do_get_threadedr    s    
	v+v{{34v}}W56&__.#//+nn&"+//"3	2 	2 !!DA*A*113333 3 5 
	4 [3 54 
	s;   E%C)EE*E2E%
EE
E"	E%%
E3c                  2   [        5        n [        SU R                  45       nUR                  [        R
                  " SS5      5      n[        U5      R                  S:X  d   eAS S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr   rF  r   r  )r=  r
   r  r   r	   r  r  rJ  )r  r  rP  s      r   test_streaming_do_actionr    sp    		+v{{34""6==C#@AG}!!V+++	 5 
	44 
	s#   BAA7&B7
B	B
Bc                  @	   [         R                  " SS5      n U [         R                  R                  U R                  5       5      :X  d   e[         R                  " S5      nU[         R                  R                  UR                  5       5      :X  d   e[         R
                  " S5      nU[         R
                  R                  UR                  5       5      :X  d   e[         R                  " SS5      nU[         R                  R                  UR                  5       5      :X  d   e[         R                  " [        R                  " S[        R                  " 5       4/5      5      nU[         R                  R                  UR                  5       5      :X  d   e[         R                  R                  S5      nU[         R                  R                  UR                  5       5      :X  d   e[         R                  R                  SS	S
5      nU[         R                  R                  UR                  5       5      :X  d   e[         R                  " [        R                  " S[        R                  " 5       4/5      U[         R                  " SS/5      [         R                  " S[         R                   R#                  SS5      /[        R$                  " S5      R'                  [        R(                  " S5      5      S5      /SSSS5      n[         R                  R                  UR                  5       5      nUR                  UR                  :X  d   eUR*                  UR*                  :X  d   eUR,                  UR,                  :X  d   eUR.                  UR.                  :X  d   eUR0                  UR0                  :X  d   eUR2                  UR2                  :X  d   eUR4                  UR4                  :X  d   e[         R                  " US[         R                   R#                  SS5      /[        R$                  " S5      R'                  [        R(                  " S5      5      S5      nU[         R                  R                  UR                  5       5      :X  d   eg)z(Make sure serializable types round-trip.action1s   action1-bodyrD   s   result1	username1	password1rY   r  rZ   z
test.arrowr   r   r   r   r   r   r  rJ   r   Tr  r  r  N)r	   r  r  r  r  r  r  r  r=   rp   r   rq   r  rr   ro   r   r   r   r   r  r  r   r  r  r  r  r5  )	r   rz   r  r  schema_resultdescr  info2r  s	            r   test_roundtrip_typesr    s   ]]9o6FV]]..v/?/?/ABBBB]]5!FV]]..v/?/?/ABBBB]]:&FV]]..v/?/?/ABBBB!!+{;J))55j6J6J6LMMMM''		C3D2E(FGMF//;;!# # # # ""..v6D6**66t~~7GHHHH""++ClCD6**66t~~7GHHHH
		C$%&!!#7!!--k4@A		9:??T@RS(		
 	

D" ))$..*:;E;;%,,&&&??e.....u00000!4!4444<<5==((( 2 2222>>U__,,,$$	44[$GH
		'(--bll3.?@ 	H v,,889K9K9MNNNNr   c                     [        5        n [        SU R                  45       n[         R                  5       R	                  5        HR  u  p#[
        R                  " USS9   [        UR                  [        R                  " US5      5      5        SSS5        MT     [
        R                  " [        R                  SS9   [        UR                  5       5        SSS5        [        R                  " / SQ5      /n[        R                  R!                  US/S9n[        R                  [        R"                  [        R$                  [        R&                  [        R(                  S	.nUR	                  5        H  u  px[
        R                  " USS9   UR+                  [        R,                  R/                  U5      UR0                  5      u  pU	R3                  U5        U	R5                  5         SSS5        [
        R                  " USS9   UR+                  [        R,                  R/                  U5      UR0                  5      u  pU	R5                  5         SSS5        M     SSS5        SSS5        g! , (       d  f       GM>  = f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       GMC  = f! , (       d  f       N`= f! , (       d  f       g= f)
z:Ensure that Flight errors propagate from server to client.r   z.*foo.*r   r   Nr6   rY   r;   )rL  rM  rN  rO  rP  )rJ  r
   r  rZ  r  r  r  r  r   r	   r  rS  rv   r=   r>   r?   r@   rT  rU  rV  rW  r   rq   r  rp   r{  r  )r  r  argexc_typerA   r|   
exceptionsrd  	exceptionr   r   s              r   test_roundtrip_errorsr    s    		+v{{34.::<BBDMCxy9V%%fmmC&=>? :9 E ]]655YG$$&' H ,-.$$T#$7 222211%@@"::

 #-"2"2"4Gy	:!'++77@LL"" ""5) ; y	:!'++77@LL"" 	 ;: #5' 5 
	 :9GG  ;: ;:9 54 
	s   K=J= 0I4	/J=?JB8J=AJ	.J=AJ*	J=#K4
J>	J=
JJ=
J'#J=*
J:4	J==
K	K
Kc                  .  ^^ [         R                  " / SQ5      /n [         R                  R                  U S/S9n[	        5        n[        SUR                  45       nUR                  [        R                  R                  S5      UR                  5      u  nmS/mUU4S jn[        R                  " US9nUR                  5         UR                  S	S
9nU   [!        U5       H-  u  p["        R$                  " SU5      n
UR'                  X5        M/     UR)                  5         UR+                  5         SSS5        TS   [-        U5      :X  d   e SSS5        SSS5        g! , (       d  f       N4= f! , (       d  f       N(= f! , (       d  f       g= f)z7Ensure that separate threads can read/write on a DoPut.r6   rY   r;   r   r  r   c                  j   > TR                  5       b!  T S==   S-  ss'   TR                  5       b  M   g g )Nr   rJ   )r&   )countr  s   r   _reader_thread:test_do_put_independent_read_write.<locals>._reader_thread  s0    !&&(4aA "&&(4r   r  rJ   r   r   N)r=   r>   r?   r@   r   r
   r  r   r	   rq   rr   rp   r	  r
  r  r   r   r   r   r  done_writingr  r  )rA   r|   r  r  r   r  r  r  r   r   r  r  r  s              @@r   "test_do_put_independent_read_writer    sH    	$%D HH  cU 3E		6+v{{34"(--##,,R0LL# 	 !!8"""3'0
!;;tS1**5; 1 !KKM  Qx3w<'''3 5 
 	  V 54 
 	s>   FA<E5AE$6E5F$
E2.E55
F	?F
Fc            
         [        S[        5       0S9 n [        SU R                  45       n[	        UR                  [        R                  " SS5      5      5      n[        U5      S:X  d   eUS   R                  R                  5       nSU:X  d   e S	S	S	5        S	S	S	5        g	! , (       d  f       N= f! , (       d  f       g	= f)
z@Ensure that server middleware run on the same thread as the RPC.r  r  r   r  r   rJ   r   s   right valueN)rC  r?  r
   r  r  r   r	   r  r  rJ  r   )r  r  rP  r  s       r   "test_server_middleware_same_threadr  3  s    	-/( 

+v{{34v''gs(CDE7|q   
**,&&&	 5
 
 54
 
s#   B5A&B$B5$
B2	.B55
Cc                  &   [        S[        5       0S9 n [        SU R                  45       n[        R
                  " [        R                  5         [        UR                  5       5        SSS5        [        R
                  " [        R                  5         [        UR                  [        R                  " SS5      5      5        SSS5        [        SU R                  4[        5       /S9n[        UR                  [        R                  " SS5      5      5      nSUR                   R#                  5       :X  d   e SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N9= f! , (       d  f       g= f)z-Test rejecting an RPC with server middleware.r  r  r   Nr   r  )rC  rM  r
   r  r  r  r=   ArrowNotImplementedErrorr  r   r	   rV  r   r  rU  r  rJ  r   )r  r  responses      r   test_middleware_rejectr  ?  s    	46( 

+v{{34]]2667$$&' 8 ]]6<<=!!&--S"9:; > &++&<>?
 ((sC)@ABhmm668888 5
 

 87 >= 54
 
sS   F%E1E+,E10E A6E1>F
EE1 
E.*E11
E?	;F
Fc                  J   [        5       n [        5       n[        SU 0S9 n[        SUR                  4U/S9 n[
        R                  R                  S5      n[        R                  " [        5         [        UR                  5       5        SSS5        [        R                  " [        5         UR                  U5        SSS5        [        R                  " [        5         UR                  U5        SSS5        [        R                  " [        5         UR                  [
        R                   " S5      5        SSS5        [        R                  " [        5         UR#                  U[$        R&                  " / 5      5      u  pVUR)                  5         SSS5        [        R                  " [        5         [        UR+                  [
        R,                  " SS5      5      5        SSS5        [        R                  " [        5         [        UR/                  5       5        SSS5        [        R                  " [        5         UR1                  U5      u  pVUR)                  5         SSS5        [
        R2                  R4                  [
        R2                  R6                  [
        R2                  R8                  [
        R2                  R:                  [
        R2                  R<                  [
        R2                  R>                  [
        R2                  R@                  [
        R2                  RB                  /nU RD                  U:X  d   eURD                  U:X  d   e SSS5        SSS5        g! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNt= f! , (       d  f       GN+= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       g= f)z/Test that middleware records methods correctly.r  r  r   r   N)#r]  rn  r   r
   r  r	   rq   r  r  r  r   r  rv   r  r	  r}   r  r   r=   rp   r  r   r  r   r   rQ  LIST_FLIGHTSGET_FLIGHT_INFO
GET_SCHEMADO_GETDO_PUT	DO_ACTIONrR  DO_EXCHANGEra  )server_middlewareclient_middlewarer  r  r   r   rb  r  s           r   test_middleware_mappingr*  U  s   8:8:	f.?%@	AV&++&)*	 
,,88=
]]./$$&' 0]]./"":. 0]]./j) 0]]./MM&--,- 0]]./j"))B-@IFLLN 0 ]]./!!&--S"9:; 0]]./$$&' 0]]./**:6IFLLN 0
 ,,//**&&&&)),,++	
 !((H444 ((H444I	 
B	A 0///////// 0/////+	 	 
B	As   P:P2M3"P.N "P"N4"P&N)<"P9N;"P90O)"PO%"P$O1+C6P"P3
N=P
NP
N&!P)
N83P;
O
P
OP
O.)P1
P ;P
P	P
P"c            
         [        5        n [        SU R                  45       n [        UR	                  [
        R                  " SS5      5      5         e! [
        R                   a-  nUR                  c   eUR                  nUS:X  d   e S nAOS nAff = fS S S 5        O! , (       d  f       O= fS S S 5        g ! , (       d  f       g = f)Nr   r]  r   r^  )	rJ  r
   r  r  r   r	   r  rW  
extra_info)r  r  eeis       r   test_extra_infor/    s    		+v{{34	5!!&--
C"@AB5-- 	5<<+++B4444	5	 544 
		sE   B=B#1AB*#BB#BB#	B=#
B1	-B==
Cc                     [        5       n [        5       n[        U S   S   /SU S   S9 n[        SUR                  4U S   U S   S   R
                  U S   S   R                  S9 nUR                  [        R                  " S5      5      R                  5       nUR                  U5      (       d   e S	S	S	5        S	S	S	5        g	! , (       d  f       N= f! , (       d  f       g	= f)
z!Test mutual TLS (mTLS) with gRPC.r2   r   Tr1   )r  verify_clientroot_certificatesr   )r  
cert_chainprivate_keyr`   N)r4   rB   r]   r
   r  r/   r0   r}   r	   r  r   r   )r  r|   r  r  rA   s        r   	test_mtlsr5    s     EE	#N3A67#K0
2 67!&&! -^,Q/44n-a044		6 :@}}V]]734==?{{5!!!!	6	
2 
2	6 	6	
2 
2s$   <C&AC3C
C	C
C#c                     [         R                  R                  [         R                  " [	        SS5      5      /S/S9n [        5        n[        SUR                  45       n[        R                  R                  S5      nUR                  U5      u  pEU   UR                  5       nSSS5        U W:X  d   e SSS5        SSS5        g! , (       d  f       N(= f! , (       d  f       N(= f! , (       d  f       g= f)rx  r   ry  rY   r;   r   rl  N)r=   r?   r@   r>   r8  rg  r
   r  r	   rq   r  r   r   )r  r  r  r   r   r   r|   s          r   test_doexchange_getr7    s    xx##
q)$%%U $ H 
	6+v{{34,,88@
++J7OO%E 5    5 
 	 V 54 
 	s<   	C+!5CC	'C8C+	
CC
C(	$C++
C9c                  P   [         R                  R                  [         R                  " [	        SS5      5      /S/S9n U R                  SS9n[        5        n[        SUR                  45       n[        R                  R                  S5      nUR                  U5      u  pVU   UR                  U R                  5        U H  nUR                  U5        M     UR!                  5         UR#                  5       nUR$                  b   e['        [)        U5      5      R+                  S
5      n	UR,                  U	:X  d   eUR.                  R0                  S:X  d   e S	S	S	5        S	S	S	5        S	S	S	5        g	! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g	= f)r~  r   ry  rY   r;      r   r   rm  Nr   )r=   r?   r@   r>   r8  r   rg  r
   r  r	   rq   r  r   rz  rp   r  r  r  rA   r  r  r   r  r   r   )
rA   r  r  r  r   r   r   r   r   expected_bufs
             r   test_doexchange_putr;    sS   88
q)$%!U   D ooCo0G		6+v{{34,,88@
++J7LL% ""5) !!%%'E::%%%s7|,33G<L%%555<<,,111  5 
 	 V 54 
 	s=   F05F%B6E5F$F5
F?F
F	F
F%c                  2   [         R                  R                  [         R                  " [	        SS5      5      /S/S9n U R                  SS9n[        5        n[        SUR                  45       n[        R                  R                  S5      nUR                  U5      u  pVU   [	        S	5       H_  n[        U5      R                  S
5      nUR                  U5        UR!                  5       n	U	R"                  b   eU	R$                  U:X  a  M_   e   UR'                  U R(                  5        Sn
U H  nUR+                  U5        UR(                  U R(                  :X  d   eUR!                  5       n	U	R"                  U:X  d   eU	R$                  b   eU
S-  n
UR,                  R.                  U
:X  a  M   e   [1        U5       H  u  p{[        U5      R                  S
5      nUR3                  X5        UR!                  5       n	U	R"                  U:X  d   eU	R$                  U:X  d   eU
S-  n
UR,                  R.                  U
:X  a  M   e   SSS5        SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g= f)zTry a DoExchange echo server.r   ry  rY   r;   r9  r   r   rk  r9   r   NrJ   )r=   r?   r@   r>   r8  r   rg  r
   r  r	   rq   r  r   r  r   r  r  rA   r  rz  rp   r  r   r   r   r  )rA   r  r  r  r   r   r   ir   r   r  r   s               r   test_doexchange_echor>    s>   88
q)$%!U   D ooCo0G		6+v{{34,,88A
++J72Y!fmmG,%%c*))+zz)))))S000  LL%K ""5)}}333))+zzU***))111q ||66+EEE ! &g.!fmmG,**56))+zzU***))S000q ||66+EEE /-  5 
 	 V 54 
 	sQ   J05I7%A'I&B!I&5BI&	I&I7J&
I40I77
J	J
Jc                  b   [         R                  R                  [         R                  " [	        SS5      5      /S/S9n U R                  SS9n[         R                  R                  [         R                  R                  R                  S9n[        US9 n[        S	UR                  45       n[        R                  R                  S
5      nUR!                  U5      u  pgU   UR#                  U R$                  US9  U Ha  nUR'                  U5        UR$                  U R$                  :X  d   eUR)                  5       n	U	R*                  U:X  d   eU	R,                  c  Ma   e   SSS5        SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       N(= f! , (       d  f       g= f)z;Try a DoExchange echo server using the V4 metadata version.r   ry  rY   r;   r9  r   r  ry   r   rk  N)r=   r?   r@   r>   r8  r   r"  r#  r$  r%  rg  r
   r  r	   rq   r  r   rz  rp   r  r  rA   r  )
rA   r  rf   r  r  r   r   r   r   r   s
             r   test_doexchange_echo_v4r@    s^   88
q)$%!U   D ooCo0Gff$$//22 % 4G	g	.&+v{{34,,88A
++J7LLgL6 ""5)}}333))+zzU***))111 !  5 
/	. V 54 
/	.sC   F .5F#A:E>!E>%F-F >
FF
F	F  
F.c            
      l   [         R                  R                  [         R                  " [	        SS5      5      [         R                  " [	        SS5      5      [         R                  " [	        SS5      5      // SQS9n [         R                  R                  [         R                  " [	        S	S
S	5      5      /S/S9n[        5        n[        SUR                  45       n[        R                  R                  S5      nUR                  U5      u  pVU   UR                  U R                  5        UR                  U 5        UR                  5         UR!                  5       nSSS5        UW:X  d   e SSS5        SSS5        g! , (       d  f       N(= f! , (       d  f       N(= f! , (       d  f       g= f)z!Transform a table with a service.r   r   rJ   i  rK   i  )rY   rZ   cr;   rL   i  r  r   rn  N)r=   r?   r@   r>   r8  rg  r
   r  r	   rq   r  r   rz  rp   r{  r  r   )rA   r  r  r  r   r   r   r|   s           r   test_doexchange_transformrC  
	  sO   88
q$ 
q$ 
q$ ! 	   D
 xx##
q,*+%W $ H 
	6+v{{34,,88F
++J7LL%t$!OO%E	 
 5    5 
 	 V 54 
 	s=   F%5FAF!F2F%
FF
F"	F%%
F3c            
         [        S[        5       0S9 n [        5       n[        SU R                  4U/S9 n[        UR                  [        R                  " SS5      5      5      nUR                  R                  5       R                  S5      n[        R                  " U5      n[        R                  R!                  5        Hs  u  pgUR#                  5       n[%        U[&        5      (       a  UR                  S5      nUR)                  U5      U:X  d   eUR*                  R)                  U5      U:X  a  Ms   e   SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)rH  r  r  r   r   r   asciiN)rG  r  rt  r
   r  r  r   r	   r  rJ  r   r
  astliteral_evalrz  r  r  r  r  bytesr   rw  )r  r  r  r  raw_headersrJ  headerr  s           r   test_middleware_multi_headerrK  !	  s+   	 24- 

46fkk*#9&)/F,,V]]3-DEFH"--224;;GDK --k:N"="F"F"L"L"Nfe,,#]]73F%))&1V;;;++//76AAA #O&	
 
& &	
 
s)   "EC<E6E:E
E	E
E*c                     [        5       n [        U S   S9 nS/n[        R                  " SUR                  4U S   US9n[
        R                  " [        R                  5         UR                  [        R                  " S5      5        SSS5        UR                  5         S	/n[        R                  " SUR                  4U S   US9n[
        R                  " [        R                  [        R                  45         UR                  [        R                  " S5      5        SSS5        UR                  5         SSS5        g! , (       d  f       N= f! , (       d  f       N8= f! , (       d  f       g= f)
z$Test setting generic client options.r2   r  )zgrpc.ssl_target_name_overrider  r   r1   )r  generic_optionsr`   N)zgrpc.max_receive_message_length    )r4   r]   r	   r  r  r  r  r  r}   r  r  r=   rX  rU  )r  r  rf   r  s       r   test_generic_optionsrO  7	  s    E	u^/D	EDEaff 5/4[/A079 ]]6889MM&--01 ::;aff 5/4[/A079 ]]BOOV-H-HIJMM&--01 K! 
F	E :9 KJ 
F	Es=   AE'$&E
A4E'>&E$E'
E	E'
E$	 E''
E5c                   $    \ rS rSrSrS rS rSrg)CancelFlightServeriO	  zA server for testing StopToken.c                     [         R                  " / 5      n[         R                  R                  / US9n[        R
                  " U[        R                  " U5      5      $ )Nr6  )r=   rp   r   r@   r	   r   r9  r:  )rg   rt   rz   rp   r$   s        r   r}   CancelFlightServer.do_getR	  sF    2^^''6':%%fi.>.>r.BCCr   c                 6   [         R                  " / 5      n[         R                  R                  / US9nUR	                  U5        UR                  5       (       d?  UR                  U5        [        R                  " S5        UR                  5       (       d  M>  g g )Nr6  rC  )	r=   rp   r   r@   rz  rH  r  rD  rE  )rg   rt   r   r   r   rp   r$   s          r   r   CancelFlightServer.do_exchangeW	  sm    2^^''6':V&&((r"JJsO &&((r   r!   N)r   r   r   r   r   r}   r   r   r!   r   r   rQ  rQ  O	  s    )D
r   rQ  c                    ^^ [         R                  " 5       R                  [         R                  " 5       R                  :w  a  [        R
                  " S5        S m[        [        R                  4mUU4S jn [        5        n[        SUR                  45       nUR                  [        R                  " S5      5      nU " UR                  5        [        R                   R#                  S5      nUR%                  U5      u  pSU " UR                  5         UR'                  5         S S S 5        S S S 5        g ! [        [        R(                  4 a     N-f = f! , (       d  f       N7= f! , (       d  f       g = f)Nz'test only works from main Python threadc                  x    [         R                  " S5        [        R                  " [        R                  5        g rB  )rD  rE  signalraise_signalSIGINTr!   r   r   signal_from_thread*test_interrupt.<locals>.signal_from_threade	  s    

3FMM*r   c                   >   [         R                  " TS9n[        R                  " T5       nUR	                  5         U " 5         S S S 5        UR                  5         WR                  n[        U[        R                  [        45      (       d2  [        UR                  [        R                  [        45      (       d   eg g ! , (       d  f       N= f! WR                  5         f = f! [         a    [        R                  " S5         Nf = f)Nr  z2KeyboardInterrupt didn't interrupt Flight read_all)r	  r
  r  r  r  r  KeyboardInterruptfailr  r  r=   ArrowCancelled__context__)r   texc_infor-  	exc_typesr[  s       r   r  test_interrupt.<locals>.testk	  s    	N$$,>?]]9-GGIJ .  NN!b//1BCDDq}}r'8'8:K&LMM	N NM E .-   	N KKLM	Ns:   *C CC C( 
CC C%%C( ( D
Dr   r   rk  )r	  current_threadidentmain_threadr  r  r^  r=   r`  rQ  r
   r  r}   r	   r  r   rq   r  r   r  rU  )r  r  r  r   r   r   rd  r[  s         @@r   test_interruptri  `	  s   !''9+@+@+B+H+HH=>+ #B$5$56IN$ 
	+v{{34v}}S12V__,,88A
++J7V__	LLN 5 
	 "6#>#>? 		 54 
	sC   E*A<ED9(E*9EEEE
E'	#E**
E8c                  4   Sn [        5        n[        R                  " SUR                  45       n[        R
                  " [        R                  U S9   UR                  [        R                  " S5      5      R                  5         S S S 5        UR                  [        R                  " S5      5      R                  5       nUR                  S:X  d   e S S S 5        S S S 5        g ! , (       d  f       Ne= f! , (       d  f       N(= f! , (       d  f       g = f)Nz'application server implementation errorr   r   r   r5  r8   )r3  r	   r  r  r  r  r2  r}   r  r   r  )r!  r  r  r|   s       r   test_never_sends_datark  	  s    5E	#	%NNK56&]]6335AMM&--,-668 B
 fmmM:;DDF~~""" 7 
&	%AA 76 
&	%s;   #D	$C84C'AC8D	'
C51C88
D	D		
Dc            	      z   [         R                  R                  SS-  5      n [        5        n[         R                  " SUR
                  45       n[        R                  " [        SS9   UR                  U [        R                  " / 5      5      u  p4UR                  5         S S S 5        [        R                  " [        R                  SS9   UR                  U 5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       N\= f! , (       d  f       N0= f! , (       d  f       N9= f! , (       d  f       g = f)Nr  r  r   z%Failed to serialize Flight descriptorr   )r	   rq   r  r   r  r  r  r  OSErrorr   r=   rp   r  rz  r   )large_descriptorr  r  r   rb  s        r   test_large_descriptorro  	  s    
 ..::		vNNK56&]]7!HJ&6		"FIFLLNJ ]]2,,!HJ/0J 7 
	J JJ J 76 
	sS   #D,D*9C9#+DD
 D(D,9
DD

DD
D)	%D,,
D:c            	         [         R                  R                  S5      n SS-  n[        5        n[         R                  " SUR
                  45       n[        R                  " [        R                  SS9   UR                  U [        R                  " / 5      5      u  pEU   UR                  U5        UR                  5         S S S 5        S S S 5        [        R                  " [        R                  SS9   UR                  U 5      u  pFU   UR                  U5        S S S 5        S S S 5        S S S 5        S S S 5        A[        5        n[         R                  " SUR
                  45       n[        R                  " [         R                   SS9   UR#                  [         R$                  " S5      5      nUR'                  5         S S S 5        [        R                  " [        R(                  SS9   UR                  U 5      u  pFU   UR'                  5         S S S 5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       GN}= f! , (       d  f       GN= f! , (       d  f       GNF= f! , (       d  f       GNP= f! , (       d  f       GNZ= f! , (       d  f       GNd= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr   r  r  r   zapp_metadata size overflowr   )r	   rq   r  r   r  r  r  r  r=   ArrowCapacityErrorr   rp   r  r  r   r  r2  r}   r  r   rz  )r   r  r  r  r   rb  r   s          r   test_large_metadata_clientrr  	  s     ((44S9J{#H		vNNK56&]]200!=?j"))B-@IF%%h/ ? ]]200!=?#//
;NF%%h/ ? 7 
 		"	$NNK56&]]633!=?]]6==#56FOO? ]]2,,!=?#//
;NF! ? 7 
%	$ ? ? ? ? 76 
	"? ? ? ? 76 
%	$s   #J$J6+I!"H9	I+J6I/I	I/&J.J	#K),$K6J%+K1KJ6	K K(K)9
II
IJ
I,'I//
I>9J
J	J
J"%
J3/K6
K K
KK
K&	"K))
K7c                   "    \ rS rSrSr/ rS rSrg)ActionNoneFlightServeri	  z@A server that implements a side effect to a non iterable action.c                     UR                   S:X  a0  [        R                  " U R                  5      R	                  S5      /$ UR                   S:X  a  U R                  R                  S5        g [        e)N	get_valuer   rg  T)rH   jsondumpsVALUESr   rg  r   r   s      r   r    ActionNoneFlightServer.do_action	  sV    ;;+%JJt{{+227;<<[[H$KKt$!!r   r!   N)r   r   r   r   r   ry  r   r   r!   r   r   rt  rt  	  s    JF"r   rt  c                     [        5        n [        SU R                  45       nUR                  [        R
                  " SS5      5        UR                  [        R
                  " SS5      5      n[        R                  " [        U5      R                  R                  5       5      S/:X  d   e SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)z}Ensure that actions are executed even when we don't consume iterator.

See https://issues.apache.org/jira/browse/ARROW-14255
r   rg  r   rv  TN)rt  r
   r  r   r	   r  rw  loadsr  rJ  r   )r  r  rs      r   test_none_action_side_effectr~  	  s     
 	!V+v{{34x56V]];<=zz$q',,1134>>> 5 
"	!44 
"	!s#   CBC /C 
C	
C
Cc            
      V  ^^ Sn Sn[         R                  " XS9m[         R                  R                  S5      n[        R
                  " S[        R                  " 5       4/5      n " U4S jS[         R                  5      nU" 5        n[        SUR                  45       nUR                  X#5      u  nmU4S	 jn[        R                  " US
S9n	U	R                  5         [        R                  " [         R                  5       n
 UR!                  [        R"                  " S//US95        M(  ! , (       d  f       O= fW
R$                  R&                  U:X  d   e[        R                  " [         R                  5       n
UR)                  5         SSS5        O! , (       d  f       O= fU
R$                  R&                  U:X  d   eU	R+                  5         UR-                  U5      u  nmU4S jn[        R                  " US
S9n	U	R                  5         [        R                  " [         R                  5       n
 UR/                  S5        M  ! , (       d  f       O= fU
R$                  R&                  U:X  d   e[        R                  " [         R                  5       n
UR)                  5         SSS5        O! , (       d  f       O= fU
R$                  R&                  U:X  d   eU	R+                  5         SSS5        O! , (       d  f       O= fSSS5        g! , (       d  f       g= f)zw
Ensure that exceptions during writing preserve error context.

See https://issues.apache.org/jira/browse/ARROW-16592.
rD   r  )r,  r   r  c                   .   > \ rS rSrU 4S jrU 4S jrSrg)0test_write_error_propagation.<locals>.FailServeri	  c                    > Ter   r!   rg   rt   r   r   r   excs        r   r   7test_write_error_propagation.<locals>.FailServer.do_put	      Ir   c                    > Ter   r!   r  s        r   r   <test_write_error_propagation.<locals>.FailServer.do_exchange	  r  r   r!   N)r   r   r   r   r   r   r   )r  s   r   
FailServerr  	  s    		 	r   r  r   c                  `   >   T R                  5         M  ! [        R                   a     g f = fr   )r&   r	   FlightErrorr   s   r   _reader-test_write_error_propagation.<locals>._reader
  s1    KKM %%     --Tr  rJ   r6  Nc                  `   >   T R                  5         M  ! [        R                   a     g f = fr   )r  r	   r  r  s   r   r  r  
  s4    %%' %% r  r  )r	   rU  rq   r  r=   rp   r  r   r
   r  r   r	  r
  r  r  r  r  r  r  r,  r  r  r   r  )expected_messageexpected_infor   rp   r  r  r  r   r  r  rc  r  r   s              @@r   test_write_error_propagationr  	  sC    M

%
%4C((44S9JYY"((*-./FV,,  
+v{{34z:	 !!>]]66678""2??QC5#HI  87 ~~((M999]]66678LLN 877~~((M999  ++J7	 !!>]]66678%%d+  87 ~~((M999]]66678LLN 877~~((M999] 544 
s|   	L!A$L *D//
D=9AL  F	L 
F($BL :I
IAL  J:1	L :
K3L 7	L 
L	
L
L(c                  0    [         R                  " S5        g)zy
Ensure that the gRPC server is stopped at interpreter shutdown.

See https://issues.apache.org/jira/browse/ARROW-16597.
zarrow_16597.pyN)r   invoke_scriptr!   r   r   test_interpreter_shutdownr  0
  s     	'(r   c                       \ rS rSrSrS rSrg)TracingFlightServeri9
  z/A server that echoes back trace context values.c                 f    UR                  S5      R                  nS UR                  5        5       $ )Ntracingc              3   R   #    U  H  u  pU S U 3R                  S5      v   M     g7f)z: r   N)r   ).0r0   r  s      r   	<genexpr>0TracingFlightServer.do_action.<locals>.<genexpr>A
  s2      ;$9LS 55'"**733$9s   %')r  trace_contextr  )rg   rt   r   r  s       r   r   TracingFlightServer.do_action<
  s3    ..y9GG;$1$7$7$9; 	;r   r!   Nr   r!   r   r   r  r  9
  s
    9;r   r  c                  0   [        S[        R                  " 5       0S9 n [        SU R                  45       n[        R
                  " SS/S9nUR                  SUS9 H  nM     S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)	Nr  r  r   )s   traceparents7   00-000ff00f00f0ff000f0f00ff0f00fff0-000f0000f0f00000-00)s
   tracestater   r  )r   r   ry   )r  r	   TracingServerMiddlewareFactoryr
   r  r   r   )r  r  rf   r  s       r   test_tracingr  E
  s    	v<<>) 

+v{{34 **5 	4
  %%j'%BE C 5
 
 54
 
s"   B.A6%B6
B	 B
Bc                      [        SSS9n Sn[        R                  " [        US9   U R	                  [
        R                  R                  S5      S S9  S S S 5        g ! , (       d  f       g = f)Nzgrpc+tls://localhost:9643Tr  zRArgument 'schema' has incorrect type \(expected pyarrow.lib.Schema, got NoneType\)r   rD   r6  )r
   r  r  r  r   r	   rq   r  )r  msgs     r   .test_do_put_does_not_crash_when_schema_is_noner  W
  sZ    56:<F<C	y	,f--99%@! 	 	# 
-	,	,s   .A
A+c                    ^  " S S[         5      n  " U4S jS[        5      n " S S[        5      mU" 5       nU " 5        n[        SUR                  4U/S9 nUR                  [        R                  R                  S	5      5        S
UR                  ;   d   eSUR                  ;   d   eSUR                  ;   d   eSUR                  ;   d   e SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)z9Ensure that server-sent headers/trailers make it through.c                       \ rS rSrS rSrg):test_headers_trailers.<locals>.HeadersTrailersFlightServerid
  c                     UR                  SS5        UR                  SS5        UR                  SS5        UR                  SS5        [        R                  " [        R
                  " / 5      U/ 5      $ )	Nx-headerheader-valuex-header-binzheadervalue	x-trailertrailer-valuex-trailer-binztrailervalue)
add_headeradd_trailerr	   ro   r=   rp   r  s      r   r  Jtest_headers_trailers.<locals>.HeadersTrailersFlightServer.get_flight_infoe
  sh    z>:~/@A_=1CD$$		" r   r!   N)r   r   r   r   r  r   r!   r   r   HeadersTrailersFlightServerr  d
  s    		r   r  c                   (   > \ rS rSrS rU 4S jrSrg)?test_headers_trailers.<locals>.HeadersTrailersMiddlewareFactoryip
  c                     / U l         g r   r  r  s    r   rd   Htest_headers_trailers.<locals>.HeadersTrailersMiddlewareFactory.__init__q
  s	    DLr   c                    > T" U 5      $ r   r!   )rg   r  HeadersTrailersMiddlewares     r   r  Jtest_headers_trailers.<locals>.HeadersTrailersMiddlewareFactory.start_callt
  s    ,T22r   r  N)r   r   r   r   rd   r  r   )r  s   r    HeadersTrailersMiddlewareFactoryr  p
  s    		3 	3r   r  c                        \ rS rSrS rS rSrg)8test_headers_trailers.<locals>.HeadersTrailersMiddlewareiw
  c                     Xl         g r   r  r  s     r   rd   Atest_headers_trailers.<locals>.HeadersTrailersMiddleware.__init__x
  s    "Lr   c                     UR                  5        H4  u  p#U H)  nU R                  R                  R                  X$45        M+     M6     g r   )r  r  r  rg  )rg   r  r0   r  r  s        r   r  Itest_headers_trailers.<locals>.HeadersTrailersMiddleware.received_headers{
  s8    &}}#ELL((//= $  /r   r  N)r   r   r   r   rd   r  r   r!   r   r   r  r  w
  s    	#	>r   r  r   r  r  )r  r  )r  s   headervalue)r  r  )r  s   trailervalueN)
r   r   r   r
   r  r  r	   rq   rr   r  )r  r  r  r  r  r  s        @r   test_headers_trailersr  a
  s    
&6 
3+B 3>$4 > /0G	$	&&+v{{3	Jfv66??CD+w>>>3wFFF-@@@5HHH K 
'	&JJ 
'	&s%    C2A7C!C2!
C/	+C22
D c                  N  ^	 [        SSSSSS9[        SSSSSS9S.m	 " U	4S jS	[        5      n U " 5        n[        S
UR                  45       n[	        5       nS GH  n[
        R                  R                  U5      nUR                  U[
        R                  " [        R                  R                  SS9S9S9u  pgU   UR                  UR                  [        R                  R                  US:H  S9S9  UR                  U5        UR!                  5         UR#                  5       nS S S 5        WR%                  U5      (       d   eUR&                  T	U   :X  a  GM   e   S S S 5        S S S 5        g ! , (       d  f       NQ= f! , (       d  f       N(= f! , (       d  f       g = f)Nr   rL   rK   rJ   r   r,  )dict_deltasdict_replacementc                   "   > \ rS rSrU 4S jrSrg)Dtest_flight_dictionary_deltas_do_exchange.<locals>.DeltaFlightServeri
  c                   > [        5       nUR                  5       nUR                  U5      (       d   eUR                  TUR                  R                  5          :X  d   eUR                  S:X  aH  [        R                  R                  SS9nUR                  UR                  US9  UR                  U5        UR                  S:X  a-  UR                  UR                  5        UR                  U5        g g )Ns   dict_deltasTemit_dictionary_deltasry   s   dict_replacement)rS   r   r   r   rd  r
  r=   r"  r#  rz  rp   r{  )	rg   rt   r   r   r   expected_tablereceived_tablerf   expected_statss	           r   r   Ptest_flight_dictionary_deltas_do_exchange.<locals>.DeltaFlightServer.do_exchange
  s    /1N#__.N!((8888<<>*2D2D2K2K2M#NNNN!!^3&&000M^22GD"">2!!%88^223"">2 9r   r!   N)r   r   r   r   r   r   )r  s   r   DeltaFlightServerr  
  s    	3 	3r   r  r   Tr  )write_optionsry   r  )r   r]   r
   r  rS   r	   rq   r  r   r   r=   r"  r#  rz  rp   r{  r  r   r   r   )
r  r  r  r  rd  r   r   r   r  r  s
            @r   )test_flight_dictionary_deltas_do_exchanger  
  s     #$"#&'
 & #$"#&'
N"30 3 
	+v{{34+-:G00<<WEJ#//00"$&&"8"8/3 #9 #5 0 NF ^22BFF<R<R,3},D =S =G H"">2##%!'!2  "((8888<<>'#::::% ; 5 
	  54 
	sC   FA1F?A*E4	)1FF#F4
F>F
F	F
F$c                    U R                   S:X  a  SS S S S.$ U R                   S:X  aa  SS/[        R                  R                  SS9[        R                  R	                  S	[        R                  R
                  R                  S
9S.$ 0 $ )NdefaultrL   )r  r  r  r  allr  )s   abcs   defzstd)compressionF)use_threadsensure_alignment)paramr=   r"  r#  r   	AlignmentDataTypeSpecific)requests    r   call_options_argsr  
  s    }}	!! 	
 	
 
%	()VV333GFF11!!#!1!1!B!B 2 	
 	
 	r   r  r  r  T)indirectc                     [        S0 U D6nUR                  5       nU R                  5        H  u  p4Uc	  X2;   d   eM  U SU 3U;   a  M   e   g )N=r!   )r   __repr__r  )r  call_optionsr  r  vals        r   test_call_options_reprr  
  s_     %9'89L  "D%++-;;;au~%%% .r   )rF  r  r9  r   r   rX  r   rZ  r	  rD  r(   rw  r   numpyr  ImportErrorr  r   r=   pyarrow.libr   r   r   pyarrow.utilr   pyarrow.testsr   r	   r   r
   r   r   r   r   r   r   r   r   r  mark
pytestmarkr   r"   r-   r4   rB   rS   r[   r]   r   r   r   r   r   r   r  r  r  r)  r3  r=  rJ  rg  r  r  r  r  r  r  r  r  r  r  r  r"  r$  r/  r9  r?  rC  rG  rM  rU  rW  r]  rn  rt  rz  r  r  r  r  r  r  r  r  slowr  r  r  r&  pandasr*  r0  r2  r7  r9  r;  r=  rQ  rS  rV  skipifr]  r_  rc  re  rn  rr  rt  rv  rx  r{  r}  r  r  r  r  r  r  r  r  r  %header_auth_server_middleware_factoryr  r  r  r  r  r  r  r  requires_testing_datar  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r*  r/  r5  r7  r;  r>  r@  rC  rK  rO  rQ  ri  rk  large_memoryro  rr  rt  r~  r  r  r  r  r  r  r  fixturer  parametrizer  r!   r   r   <module>r     s  $    	            : : '   " [[

B
";
<2E+ ED&+ &R' *"- """"2 """.> ""0* 06+. +#3 .. ."E 0 E F!1 F&7' 7*.A( .AbJ#+ J#Z!2 0!2 ". .. $' $
/(? 
/1!1 161(? 189!1 9/- /9.E 9'7 F#3 F*+- +5$; 5) . -+B -&/+B /

$4 
	'> 		'> 		1)@ 	12"2 2.4)@ 44"2 4. 0 ."J@Z`F!$8   ('(D6 F F
$"<.=7$( 2!6 BGGtOD  F&F&* # #*# #*# #*# #*9<J4" 0[7   ,[3  
 + + BGGtOI  K
5K
5+5I )J(K %$& 4E;@8."+ ""= # = ""	" #	" "" #  ""	2 #	2"* @
"), " "8     4  4@8Ov#L$(N	'9,)5X	5 """ #"$!20(FV20!.B, "" #.) " ) )X# 1  1  "  "@
"- 
"
? C CL)	;* 	;$#&IR5;p  , )U+d  <
&<
&sU  	B$  F%+V"L"+16((06--06--s#   Y' Y6 'Y32Y36ZZ