Ë
    ìéñié” ã                   óÆ  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlmZ 	 d dlZd dlZd dlZd dlmZmZmZmZ d dlmZ d dlmZ 	 d dlmZ d dlm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( ejT                  j<                  Z+d„ Z,d	„ Z-d
„ Z.d„ Z/d„ Z0d„ Z1d„ Z2 G d„ de!«      Z3 G d„ de!«      Z4 G d„ de!«      Z5 G d„ de5«      Z6 G d„ de5«      Z7 G d„ de5«      Z8 G d„ de!«      Z9 G d„ de!«      Z: G d„ d e!«      Z; G d!„ d"e!«      Z< G d#„ d$e!«      Z= G d%„ d&e!«      Z> G d'„ d(e!«      Z? G d)„ d*e!«      Z@ G d+„ d,e!«      ZA G d-„ d.e"«      ZB G d/„ d0e#«      ZC G d1„ d2e"«      ZD G d3„ d4e#«      ZE G d5„ d6e"«      ZFd7„ ZG G d8„ d9e'«      ZH G d:„ d;e&«      ZI G d<„ d=e%«      ZJ G d>„ d?e$«      ZK G d@„ dAe!«      ZL G dB„ dCe%«      ZM G dD„ dEe$«      ZN G dF„ dGe!«      ZO G dH„ dIe$«      ZP G dJ„ dKe%«      ZQ G dL„ dMe!«      ZR G dN„ dOe!«      ZS G dP„ dQe%«      ZT G dR„ dSe'«      ZU G dT„ dUe&«      ZV G dV„ dWe%«      ZW G dX„ dYe'«      ZX G dZ„ d[e'«      ZY G d\„ d]e&«      ZZ G d^„ d_e%«      Z[ G d`„ dae$«      Z\ G db„ dce!«      Z]dd„ Z^de„ Z_df„ Z`dg„ Zadh„ ZbejT                  j                  ejT                  jÆ                  di„ «       «       Zddj„ Zedk„ Zfdl„ ZgejT                  jÐ                  dm„ «       Zidn„ Zjdo„ Zkdp„ Zldq„ Zmdr„ Zn G ds„ dte!«      Zodu„ Zpdv„ Zqdw„ ZrejT                  jç                  ejè                  dxk(  dy¬z«      d{„ «       ZuejT                  jÆ                  d|„ «       Zvd}„ Zwd~„ Zxd„ Zyd€„ Zzd�„ Z{d‚„ Z|dƒ„ Z}d„„ Z~d…„ Zd†„ Z€ eBd‡dˆi¬‰«      Z� eDd‡dˆi¬‰«      Z‚ejT                  jÆ                  dŠ„ «       ZƒejT                  jç                  ejè                  dxk(  d‹¬z«      dŒ„ «       Z„d�„ Z…dŽ„ Z†d�„ Z‡ eJ«       Zˆ eF«       Z‰d�„ ZŠd‘„ Z‹d’„ ZŒd“„ Z�d”„ ZŽd•„ Z�d–„ Z�ejT                  jÆ                  ejT                  �j"                  d—„ «       «       Z’ejT                  �j"                  d˜„ «       Z“ejT                  �j"                  d™„ «       Z”ejT                  �j"                  dš„ «       Z•d›„ Z–dœ„ Z—d�„ Z˜dž„ Z™ejT                  j                  dŸ„ «       ZšejT                  jÆ                  d „ «       Z›ejT                  j                  ejT                  jÆ                  d¡„ «       «       Zœd¢„ Z�d£„ Zžd¤„ ZŸd¥„ Z d¦„ Z¡d§„ Z¢d¨„ Z£d©„ Z¤ejT                  �j"                  dª„ «       Z¥d«„ Z¦d¬„ Z§d­„ Z¨d®„ Z©d¯„ Zªd°„ Z«ejT                  �j"                  d±„ «       Z¬ G d²„ d³e!«      Z­ejT                  j                  d´„ «       Z®dµ„ Z¯ejT                  �j`                  ejT                  jÆ                  d¶„ «       «       Z±ejT                  �j`                  ejT                  jÆ                  d·„ «       «       Z² G d¸„ d¹e5«      Z³dº„ Z´ejT                  jÆ                  d»„ «       Zµd¼„ Z¶ G d½„ d¾e!«      Z·d¿„ Z¸ejT                  jç                  e�jr                  dÀk(  dÁ¬z«      dÂ„ «       ZºdÃ„ Z»dÄ„ Z¼dÅ„ Z½e�j|                  dÆ„ «       Z¿ejT                  �j�                  dÇdÈdÉgdÊ¬Ë«      dÌ„ «       ZÁy# e$ r dZY �Œww xY w# e$ r dZe)e)cZ Z!e)e)cZ"Z#e)e)cZ$Z%e)e)cZ&Z'e)Z(Y �Œ^w xY w)Íé    N)Údatetime)ÚIpcReadOptionsÚ	ReadStatsÚis_opentelemetry_enabledÚtobytes)Úfind_free_port)Úutil)Úflight)	ÚFlightClientÚFlightServerBaseÚServerAuthHandlerÚClientAuthHandlerÚServerMiddlewareÚServerMiddlewareFactoryÚClientMiddlewareÚClientMiddlewareFactoryÚFlightCallOptionsc                  ó   — dd l } y )Nr   )Úpyarrow.flight)Úpyarrows    ú[/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/pyarrow/tests/test_flight.pyÚtest_importr   C   s   € äó    c                  ó¨   — t         j                  j                  d«      st        d«      ‚t	        j
                  t         j                  d   «      dz  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#   H   sF   € ä�:‰:�>‰>Ð+Ô,Üð Ió Jð 	Jä�<‰<œŸ
™
Ð#4Ñ5Ó6¸ÑAÐAr   c                 óø   — t        «       }|sy	 || z  j                  d«      5 }|j                  «       cddd«       S # 1 sw Y   yxY w# t        $ r' t	        d|| z  › dt        j                  «       › �«      ‚w xY w)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.   P   s†   € ä‹?€DÙØð
Ø�T‰k×Ñ Ó%ð 	¨Ø—6‘6“8÷	÷ 	ò 	ûäò 
ÜØ˜T D™[˜Mð *)Ü)2×)=Ñ)=Ó)?Ð(@ðBó
ð 	
ð
ús%   �A	 £=³	A	 ½AÁA	 ÁA	 Á	0A9c                  ó¾   — t        d«      t        j                  t        d«      t        d«      ¬«      t        j                  t        d«      t        d«      ¬«      gdœ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_certsr5   _   sY   € ô *¨-Ó8ä×ÑÜ)¨+Ó6Ü(¨Ó5ôô ×ÑÜ)¨+Ó6Ü(¨Ó5ôð	
ñð r   c                  óv   — t        j                  g d¢«      g} t         j                  j                  | dg¬«      S )N©iöÿÿÿéûÿÿÿr   é   é
   Ú	some_ints©Únames)ÚpaÚarrayÚTableÚfrom_arrays)Údatas    r   Úsimple_ints_tablerC   p   s4   € ä
�‰Ò$Ó%ð€Dô �8‰8×Ñ ¨[¨MÐÓ:Ð:r   c                  óä  — t        j                  g d¢t        j                  «       ¬«      } t        j                  g d¢t        j                  «       ¬«      }t        j                  t         j                  j                  g d¢| «      t         j                  j                  ddg| «      t         j                  j                  ddg|«      g«      g}t         j                  j                  |d	g¬
«      S )N)ÚfooÚbazÚquux©Útype)rE   rF   rG   Únew)é   r   Né   rK   r   é   Ú
some_dictsr<   )r>   r?   Úutf8Úchunked_arrayÚDictionaryArrayrA   r@   )Údict_valuesÚnew_dict_valuesrB   s      r   Úsimple_dicts_tablerT   w   s²   € Ü—(‘(Ò1¼¿¹»	ÔB€KÜ—h‘hÒ<Ä2Ç7Á7Ã9ÔM€Oä
×ÑÜ×Ñ×*Ñ*ª<¸ÓEÜ×Ñ×*Ñ*¨A¨q¨6°;Ó?Ü×Ñ×*Ñ*¨A¨q¨6°?ÓCð
ó 	ð€Dô �8‰8×Ñ ¨\¨NÐÓ;Ð;r   c                  ó    — t         j                  j                  t        j                  g d¢«      t        j                  g d¢«      gddg¬«      S )N)rE   ÚbarrF   Úqux©rK   rL   rM   é   ÚaÚbr<   )r>   r@   rA   r?   r"   r   r   Úmultiple_column_tabler\   „   sB   € Ü�8‰8×Ñ¤§¡Ò*FÓ!GÜ!#§¡ª,Ó!7ð!9à'*¨C jð  ó 2ð 2r   c                   ó4   ‡ — e Zd ZdZdZdˆ fd„	Zd„ Zd„ Zˆ xZS )ÚConstantFlightServerz»A 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        ‰| �  |fi |¤Ž t        t        t        dœ| _        || _        y )N)ó   intsó   dictsó   multi)ÚsuperÚ__init__rC   rT   r\   Útable_factoriesÚoptions)ÚselfÚlocationrf   ÚkwargsÚ	__class__s       €r   rd   zConstantFlightServer.__init__“   s3   ø€ Ü‰Ñ˜Ñ, VÒ,ô 'Ü(Ü+ñ 
ˆÔð
 ˆ�r   c              #   ó¾   K  — || j                   k(  rJt        j                  t        j                  g «      t        j
                  j                  d«      g «      –— y y ­w)Nú/foo)ÚCRITERIAr
   Ú
FlightInfor>   ÚschemaÚFlightDescriptorÚfor_path©rg   ÚcontextÚcriterias      r   Úlist_flightsz!ConstantFlightServer.list_flights�   sL   è ø€ Ø�t—}‘}Ò$Ü×#Ñ#Ü—	‘	˜"“Ü×'Ñ'×0Ñ0°Ó8Øóó ð %ùs   ‚AAc                 ó€   —  | j                   |j                     «       }t        j                  || j                  ¬«      S )N©rf   )re   Úticketr
   ÚRecordBatchStreamrf   )rg   rs   rx   Útables       r   Údo_getzConstantFlightServer.do_get¥   s4   € ð 4�×$Ñ$ V§]¡]Ñ3Ó5ˆÜ×'Ñ'¨°t·|±|ÔDÐDr   ©NN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__rm   rd   ru   r{   Ú__classcell__©rj   s   @r   r^   r^   Š   s   ø„ ñð (€HõòöEr   r^   c                   ó@   ‡ — e Zd ZdZdˆ fd„	Zd„ Zd„ Zed„ «       Zˆ xZ	S )ÚMetadataFlightServerz4A Flight server that numbers incoming/outgoing data.c                 ó2   •— t        ‰| �  di |¤Ž || _        y ©Nr"   ©rc   rd   rf   ©rg   rf   ri   rj   s      €r   rd   zMetadataFlightServer.__init__¯   ó   ø€ Ü‰ÑÑ"˜6Ò"Øˆ�r   c                 óì   — t        j                  g d¢«      g}t         j                  j                  |dg¬«      }t	        j
                  |j                  | j                  |«      | j                  ¬«      S )Nr7   rZ   r<   rw   )	r>   r?   r@   rA   r
   ÚGeneratorStreamro   Únumber_batchesrf   )rg   rs   rx   rB   rz   s        r   r{   zMetadataFlightServer.do_get³   sb   € ä�H‰HÒ(Ó)ð
ˆô —‘×$Ñ$ T°#°Ð$Ó7ˆÜ×%Ñ%Ø�L‰LØ×Ñ Ó&Ø—L‘Lô"ð 	"r   c           	      ó  — d}g d¢}|j                   j                  dk(  sJ ‚|D ]ª  \  }}|j                  t        j                  j                  t        j                  ||   g«      gdg«      «      sJ ‚|€J ‚t        j                  d|j                  «       «      \  }	||	k(  sJ ‚|j                  t        j                  d|«      «       |dz  }Œ¬ |j                   j                  dk(  sJ ‚|j                   j                  dk(  sJ ‚y )Nr   r7   rK   rZ   ú<ié   r9   )ÚstatsÚnum_messagesÚequalsr>   ÚRecordBatchrA   r?   ÚstructÚunpackÚ
to_pybytesÚwriteÚpackÚnum_record_batches)
rg   rs   Ú
descriptorÚreaderÚwriterÚcounterÚexpected_dataÚbatchÚbufÚclient_counters
             r   Údo_putzMetadataFlightServer.do_put½   sÿ   € ØˆÚ+ˆØ�|‰|×(Ñ(¨AÒ-Ð-Ð-Ø ò 		‰JˆE�3Ø—<‘<¤§¡× :Ñ :Ü—‘˜=¨Ñ1Ð2Ó3Ð4Ø�ó!ô ð ð ð �?Ð"�?Ü$Ÿm™m¨D°#·.±.Ó2BÓC‰OˆNØ˜nÒ,Ð,Ð,Ø�L‰LœŸ™ T¨7Ó3Ô4Ø�q‰L‰Gð		ð �|‰|×(Ñ(¨AÒ-Ð-Ð-Ø�|‰|×.Ñ.°!Ò3Ð3Ñ3r   c              #   ó†   K  — t        | j                  «       «      D ]!  \  }}t        j                  d|«      }||f–— Œ# y ­w)NrŽ   )Ú	enumerateÚ
to_batchesr”   r˜   )rz   ÚidxrŸ   r    s       r   rŒ   z#MetadataFlightServer.number_batchesÎ   sA   è ø€ ä# E×$4Ñ$4Ó$6Ó7ò 	‰JˆC�Ü—+‘+˜d CÓ(ˆCØ˜�*Óñ	ùs   ‚?A©N)
r}   r~   r   r€   rd   r{   r¢   ÚstaticmethodrŒ   r�   r‚   s   @r   r„   r„   ¬   s)   ø„ Ù>õò"ò4ð" ñó ôr   r„   c                   ó6   ‡ — e Zd ZdZdˆ fd„	Zd„ Zd„ Zd„ Zˆ xZS )ÚEchoFlightServerz4A Flight server that returns the last data uploaded.c                 óB   •— t        ‰| �  |fi |¤Ž d | _        || _        y r§   )rc   rd   Úlast_messageÚexpected_schema)rg   rh   r­   ri   rj   s       €r   rd   zEchoFlightServer.__init__Ø   s%   ø€ Ü‰Ñ˜Ñ, VÒ,Ø ˆÔØ.ˆÕr   c                 ó@   — t        j                  | j                  «      S r§   )r
   ry   r¬   ©rg   rs   rx   s      r   r{   zEchoFlightServer.do_getÝ   s   € Ü×'Ñ'¨×(9Ñ(9Ó:Ð:r   c                 ó|   — | j                   r| j                   |j                  k(  sJ ‚|j                  «       | _        y r§   )r­   ro   Úread_allr¬   ©rg   rs   rš   r›   rœ   s        r   r¢   zEchoFlightServer.do_putà   s2   € Ø×ÒØ×'Ñ'¨6¯=©=Ò8Ð8Ð8Ø"ŸO™OÓ-ˆÕr   c                 ó   — |D ]  }Œ y r§   r"   )rg   rs   rš   r›   rœ   Úchunks         r   Údo_exchangezEchoFlightServer.do_exchangeå   s   € Øò 	ˆEØñ	r   r|   )	r}   r~   r   r€   rd   r{   r¢   rµ   r�   r‚   s   @r   rª   rª   Õ   s   ø„ Ù>õ/ò
;ò.ö
r   rª   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚEchoStreamFlightServerz6An echo server that streams individual record batches.c                 óŠ   — t        j                  | j                  j                  | j                  j	                  d¬«      «      S )Né   ©Úmax_chunksize)r
   r‹   r¬   ro   r¥   r¯   s      r   r{   zEchoStreamFlightServer.do_getí   s;   € Ü×%Ñ%Ø×Ñ×$Ñ$Ø×Ñ×(Ñ(°tÐ(Ó<ó>ð 	>r   c                 ó   — g S r§   r"   ©rg   rs   s     r   Úlist_actionsz#EchoStreamFlightServer.list_actionsò   ó   € Øˆ	r   c                 óŠ   — |j                   dk(  r/|j                  «       |j                  «       j                  d«      gS t        ‚©Núwho-am-iúutf-8©rI   Úpeer_identityÚpeerÚencodeÚNotImplementedError©rg   rs   Úactions      r   Ú	do_actionz EchoStreamFlightServer.do_actionõ   ó9   € Ø�;‰;˜*Ò$Ø×)Ñ)Ó+¨W¯\©\«^×-BÑ-BÀ7Ó-KÐLÐLÜ!Ð!r   N©r}   r~   r   r€   r{   r¾   rË   r"   r   r   r·   r·   ê   s   „ Ù@ò>ò
ó"r   r·   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚEchoTableStreamFlightServerz,An echo server that streams the whole table.c                 ól   — t        j                  | j                  j                  | j                  g«      S r§   )r
   r‹   r¬   ro   r¯   s      r   r{   z"EchoTableStreamFlightServer.do_getþ   s0   € Ü×%Ñ%Ø×Ñ×$Ñ$Ø×ÑÐó!ð 	!r   c                 ó   — g S r§   r"   r½   s     r   r¾   z(EchoTableStreamFlightServer.list_actions  r¿   r   c                 óŠ   — |j                   dk(  r/|j                  «       |j                  «       j                  d«      gS t        ‚rÁ   rÄ   rÉ   s      r   rË   z%EchoTableStreamFlightServer.do_action  rÌ   r   NrÍ   r"   r   r   rÏ   rÏ   û   s   „ Ù6ò!ò
ó"r   rÏ   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)Ú'EchoRecordBatchReaderStreamFlightServerzCAn echo server that streams the whole table as a RecordBatchReader.c                 óˆ   — t        j                  | j                  j                  | j                  j	                  «       g«      S r§   )r
   r‹   r¬   ro   Ú	to_readerr¯   s      r   r{   z.EchoRecordBatchReaderStreamFlightServer.do_get  s9   € Ü×%Ñ%Ø×Ñ×$Ñ$Ø×Ñ×(Ñ(Ó*Ð+ó-ð 	-r   c                 ó   — g S r§   r"   r½   s     r   r¾   z4EchoRecordBatchReaderStreamFlightServer.list_actions  r¿   r   c                 óŠ   — |j                   dk(  r/|j                  «       |j                  «       j                  d«      gS t        ‚rÁ   rÄ   rÉ   s      r   rË   z1EchoRecordBatchReaderStreamFlightServer.do_action  rÌ   r   NrÍ   r"   r   r   rÔ   rÔ     s   „ ÙMò-ò
ó"r   rÔ   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚGetInfoFlightServerz)A Flight server that tests GetFlightInfo.c                 óŠ  — t        j                  t        j                  dt        j                  «       fg«      |t        j
                  ddg«      t        j
                  dt         j                  j                  dd«      gt        j                  d«      j                  t        j                  d«      «      d«      gd	d
dd«      S )NrZ   r   úgrpc://testÚ	localhosté�  ú2023-04-05T12:34:56.789012345Únszendpoint app metadatarK   é*   Tzinfo app metadata)r
   rn   r>   ro   Úint32ÚFlightEndpointÚLocationÚfor_grpc_tcpÚscalarÚcastÚ	timestamp©rg   rs   rš   s      r   Úget_flight_infoz#GetInfoFlightServer.get_flight_info   s¤   € Ü× Ñ Ü�I‰I˜œRŸX™X›ZÐ(Ð)Ó*Øä×%Ñ% c¨M¨?Ó;Ü×%Ñ%ØÜ—_‘_×1Ñ1°+¸tÓDÐEÜ—I‘IÐ=Ó>×CÑCÄBÇLÁLÐQUÓDVÓWØ+ó	ðð ØØØó
ð 	
r   c                 ód   — | j                  ||«      }t        j                  |j                  «      S r§   )rê   r
   ÚSchemaResultro   )rg   rs   rš   Úinfos       r   Ú
get_schemazGetInfoFlightServer.get_schema3  s)   € Ø×#Ñ# G¨ZÓ8ˆÜ×"Ñ" 4§;¡;Ó/Ð/r   N)r}   r~   r   r€   rê   rî   r"   r   r   rÚ   rÚ     s   „ Ù3ò
ó&0r   rÚ   c                   ó&   — e Zd ZdZed„ «       Zd„ Zy)ÚListActionsFlightServerú'A Flight server that tests ListActions.c                 ó4   — ddt        j                  dd«      gS )N)úaction-1Údescription)zaction-2Ú zaction-3zmore detail©r
   Ú
ActionType)Úclss    r   Úexpected_actionsz(ListActionsFlightServer.expected_actions;  s$   € ð (ØÜ×Ñ˜j¨-Ó8ð
ð 	
r   c              #   ó@   K  — | j                  «       E d {  –—†  y 7 Œ­wr§   )rù   r½   s     r   r¾   z$ListActionsFlightServer.list_actionsC  s   è ø€ Ø×(Ñ(Ó*×*Ò*ús   ‚–—N)r}   r~   r   r€   Úclassmethodrù   r¾   r"   r   r   rð   rð   8  s   „ Ù1àñ
ó ð
ó+r   rð   c                   ó   — e Zd ZdZd„ Zy)ÚListActionsErrorFlightServerrñ   c              #   ó   K  — d–— d–— y ­w)N)ró   rõ   rE   r"   r½   s     r   r¾   z)ListActionsErrorFlightServer.list_actionsJ  s   è ø€ ØÒØ‹ùs   ‚
N)r}   r~   r   r€   r¾   r"   r   r   rý   rý   G  s
   „ Ù1ór   rý   c                   ó0   ‡ — e Zd ZdZdˆ fd„	Zd„ Zd„ Zˆ xZS )ÚCheckTicketFlightServerzDA Flight server that compares the given ticket to an expected value.c                 ó4   •— t        ‰| �  |fi |¤Ž || _        y r§   )rc   rd   Úexpected_ticket)rg   r  rh   ri   rj   s       €r   rd   z CheckTicketFlightServer.__init__R  s   ø€ Ü‰Ñ˜Ñ, VÒ,Ø.ˆÕr   c                 óþ   — | j                   |j                  k(  sJ ‚t        j                  g d¢t        j                  «       ¬«      g}t        j
                  j                  |dg¬«      }t        j                  |«      S )Nr7   rH   rZ   r<   )	r  rx   r>   r?   râ   r@   rA   r
   ry   )rg   rs   rx   Údata1rz   s        r   r{   zCheckTicketFlightServer.do_getV  s`   € Ø×#Ñ# v§}¡}Ò4Ð4Ð4Ü—‘Ò-´B·H±H³JÔ?Ð@ˆÜ—‘×$Ñ$ U°3°%Ð$Ó8ˆÜ×'Ñ'¨Ó.Ð.r   c                 ó.   — |j                  «       | _        y r§   )r±   r¬   )rg   rs   rš   r›   s       r   r¢   zCheckTicketFlightServer.do_put\  s   € Ø"ŸO™OÓ-ˆÕr   r§   )r}   r~   r   r€   rd   r{   r¢   r�   r‚   s   @r   r   r   O  s   ø„ ÙNõ/ò/ö.r   r   c                   ó^   — e Zd ZdZ ej
                  d ej                  «       fg«      Zd„ Zy)ÚInvalidStreamFlightServerzEA Flight server that tries to return messages with differing schemas.rZ   c                 óê  — t        j                  g d¢t        j                  «       ¬«      g}t        j                  g d¢t        j                  «       ¬«      g}|j                  |j                  k7  sJ ‚t         j
                  j                  |dg¬«      }t         j
                  j                  |dg¬«      }|j                  | j                  k(  sJ ‚t        j                  | j                  ||g«      S )Nr7   rH   )g      $Àg      Àg        ç      @g      $@rZ   r<   )
r>   r?   râ   Úfloat64rI   r@   rA   ro   r
   r‹   )rg   rs   rx   r  Údata2Útable1Útable2s          r   r{   z InvalidStreamFlightServer.do_gete  s´   € Ü—‘Ò-´B·H±H³JÔ?Ð@ˆÜ—‘Ò7¼b¿j¹j»lÔKÐLˆØ�z‰z˜UŸZ™ZÒ'Ð'Ð'Ü—‘×%Ñ% e°C°5Ð%Ó9ˆÜ—‘×%Ñ% e°C°5Ð%Ó9ˆØ�}‰} §¡Ò+Ð+Ð+ä×%Ñ% d§k¡k°F¸FÐ3CÓDÐDr   N©r}   r~   r   r€   r>   ro   râ   r{   r"   r   r   r  r  `  s+   „ ÙOàˆR�Y‰Y˜˜h˜bŸh™h›jÐ)Ð*Ó+€FóEr   r  c                   ó^   — e Zd ZdZ ej
                  d ej                  «       fg«      Zd„ Zy)ÚNeverSendsDataFlightServerz0A Flight server that never actually yields data.rZ   c                 óÆ  — |j                   dk(  rˆ| j                  j                  «       | j                  j                  «       t        j                  j                  t        d«      g| j                  ¬«      g}t        j                  | j                  |«      S t        j                  | j                  t        j                  | j                  j                  «       «      «      S )Nó
   yield_datar9   ©ro   )rx   ro   Úempty_tabler>   r“   rA   Úranger
   r‹   Ú	itertoolsÚrepeat)rg   rs   rx   rB   s       r   r{   z!NeverSendsDataFlightServer.do_getu  s§   € Ø�=‰=˜MÒ)ð —‘×'Ñ'Ó)Ø—‘×'Ñ'Ó)Ü—‘×*Ñ*¬E°!«H¨:¸d¿k¹kÐ*ÓJðˆDô
 ×)Ñ)¨$¯+©+°tÓ<Ð<Ü×%Ñ%Ø�K‰Kœ×)Ñ)¨$¯+©+×*AÑ*AÓ*CÓDóFð 	Fr   Nr  r"   r   r   r  r  p  s+   „ Ù:àˆR�Y‰Y˜˜h˜bŸh™h›jÐ)Ð*Ó+€FóFr   r  c                   ó,   — e Zd ZdZd„ Zd„ Zed„ «       Zy)ÚSlowFlightServerz;A Flight server that delays its responses to test timeouts.c                 óš   — t        j                  t        j                  dt        j                  «       fg«      | j                  «       «      S )NrZ   )r
   r‹   r>   ro   râ   Úslow_streamr¯   s      r   r{   zSlowFlightServer.do_get†  s:   € Ü×%Ñ%¤b§i¡i°#´r·x±x³zÐ1BÐ0CÓ&DØ&*×&6Ñ&6Ó&8ó:ð 	:r   c                 ó0   — t        j                  d«       g S ©Nç      à?)ÚtimeÚsleeprÉ   s      r   rË   zSlowFlightServer.do_actionŠ  s   € Ü�
‰
�3ŒØˆ	r   c               #   ó  K  — t        j                  g d¢t        j                  «       ¬«      g} t         j                  j	                  | dg¬«      –— t        j                  d«       t         j                  j	                  | dg¬«      –— y ­w)Nr7   rH   rZ   r<   r:   )r>   r?   râ   r@   rA   r  r   )r  s    r   r  zSlowFlightServer.slow_streamŽ  se   è ø€ ä—‘Ò-´B·H±H³JÔ?Ð@ˆÜ�h‰h×"Ñ" 5°°Ð"Ó6Ò6ô 	�
‰
�2ŒÜ�h‰h×"Ñ" 5°°Ð"Ó6Ó6ùs   ‚BBN)r}   r~   r   r€   r{   rË   r¨   r  r"   r   r   r  r  ƒ  s#   „ ÙEò:òð ñ7ó ñ7r   r  c                   ó2   — e Zd ZdZed„ «       Zd„ Zd„ Zd„ Zy)ÚErrorFlightServerz9A Flight server that uses all the Flight-specific errors.c            	      óÐ   — t         j                  t         j                  t         j                  t         j                  t         j
                  t        t        j                  t        dœS )N)ÚinternalÚtimedoutÚcancelÚunauthenticatedÚunauthorizedÚnotimplementedÚinvalidr1   )
r
   ÚFlightInternalErrorÚFlightTimedOutErrorÚFlightCancelledErrorÚFlightUnauthenticatedErrorÚFlightUnauthorizedErrorrÈ   r>   ÚArrowInvalidÚKeyErrorr"   r   r   Úerror_caseszErrorFlightServer.error_cases›  sH   € ô ×2Ñ2Ü×2Ñ2Ü×1Ñ1Ü%×@Ñ@Ü"×:Ñ:Ü1Ü—‘Üñ	
ð 		
r   c                 óÊ   — t         j                  «       }|j                  |v r ||j                     d«      ‚|j                  dk(  rd}t        j                  d|«      ‚t
        ‚)NrE   Úprotobufó   this is an error message)r#  r3  rI   r
   r0  rÈ   )rg   rs   rÊ   r3  Úerr_msgs        r   rË   zErrorFlightServer.do_action¨  s\   € Ü'×3Ñ3Ó5ˆØ�;‰;˜+Ñ%Ø*�+˜fŸk™kÑ*¨5Ó1Ð1Ø�[‰[˜JÒ&Ø1ˆGÜ×0Ñ0°¸Ó@Ð@Ü!Ð!r   c              #   óÆ   K  — t        j                  t        j                  g «      t         j                  j                  d«      g «      –— t        j                  d«      ‚­w)Nrl   rE   )r
   rn   r>   ro   rp   rq   r,  rr   s      r   ru   zErrorFlightServer.list_flights±  sN   è ø€ Ü×ÑÜ�I‰I�b‹MÜ×#Ñ#×,Ñ,¨VÓ4Øó
ò 	
ô
 ×(Ñ(¨Ó/Ð/ùs   ‚AA!c                 óº  — |j                   dk(  rt        j                  d«      ‚|j                   dk(  rt        j                  d«      ‚|j                   dk(  rt        j                  d«      ‚|j                   dk(  rt        j
                  d«      ‚|j                   dk(  rt        j                  d«      ‚|j                   dk(  rd}t        j                  d|«      ‚y )	Ns   internalrE   s   timedouts   cancels   unauthenticateds   unauthorizeds   protobufr6  )Úcommandr
   r,  r-  r.  r/  r0  )rg   rs   rš   r›   rœ   r7  s         r   r¢   zErrorFlightServer.do_put¹  sÉ   € Ø×Ñ Ò,Ü×,Ñ,¨UÓ3Ð3Ø×Ñ ;Ò.Ü×,Ñ,¨UÓ3Ð3Ø×Ñ 9Ò,Ü×-Ñ-¨eÓ4Ð4Ø×ÑÐ#5Ò5Ü×3Ñ3°EÓ:Ð:Ø×Ñ ?Ò2Ü×0Ñ0°Ó7Ð7Ø×Ñ ;Ò.Ø1ˆGÜ×0Ñ0°¸Ó@Ð@ð /r   N)	r}   r~   r   r€   r¨   r3  rË   ru   r¢   r"   r   r   r#  r#  ˜  s'   „ ÙCàñ

ó ð

ò"ò0óAr   r#  c                   óB   ‡ — e Zd ZdZdˆ fd„	Zd„ Zd„ Zd„ Zd„ Zd„ Z	ˆ xZ
S )	ÚExchangeFlightServerz A server for testing DoExchange.c                 ó2   •— t        ‰| �  di |¤Ž || _        y r†   r‡   rˆ   s      €r   rd   zExchangeFlightServer.__init__Ì  r‰   r   c                 ó  — |j                   j                  dk(  sJ ‚|j                  t        j                  j
                  k7  rt        j                  d«      ‚|j                  dk(  r| j                  |||«      S |j                  dk(  r| j                  |||«      S |j                  dk(  r| j                  |||«      S |j                  dk(  r| j                  |||«      S t        j                  d|j                  › �«      ‚)Nr   z!Must provide a command descriptoró   echoó   getó   putó	   transformzUnknown command: )r�   r‘   Údescriptor_typer
   ÚDescriptorTypeÚCMDr>   r1  r:  Úexchange_echoÚexchange_do_getÚexchange_do_putÚexchange_transformr²   s        r   rµ   z ExchangeFlightServer.do_exchangeÐ  sò   € Ø�|‰|×(Ñ(¨AÒ-Ð-Ð-Ø×%Ñ%¬×)>Ñ)>×)BÑ)BÒBÜ—/‘/Ð"EÓFÐFØ×Ñ 7Ò*Ø×%Ñ% g¨v°vÓ>Ð>Ø×Ñ 6Ò)Ø×'Ñ'¨°¸Ó@Ð@Ø×Ñ 6Ò)Ø×'Ñ'¨°¸Ó@Ð@Ø×Ñ <Ò/Ø×*Ñ*¨7°F¸FÓCÐCä—/‘/Ø# J×$6Ñ$6Ð#7Ð8ó:ð :r   c                 óÜ   — t         j                  j                  t        j                  t	        dd«      «      gdg¬«      }|j                  |j                  «       |j                  |«       y)úEmulate DoGet with DoExchange.r   é (  rZ   r<   N)r>   r@   rA   r?   r  Úbeginro   Úwrite_table)rg   rs   r›   rœ   rB   s        r   rG  z$ExchangeFlightServer.exchange_do_getà  sX   € ä�x‰x×#Ñ#Ü�H‰H”U˜1˜iÓ(Ó)ð%
à�ð $ó ˆð 	�‰�T—[‘[Ô!Ø×Ñ˜4Õ r   c                 ó   — d}|D ]C  }|j                   st        j                  d«      ‚|j                  j                  dk7  sJ ‚|dz  }ŒE |j                  j
                  |k(  sJ ‚|j                  t        |«      j                  d«      «       y)úEmulate DoPut with DoExchange.r   zAll chunks must have data.rK   rÃ   N)	rB   r>   r1  r�   r‘   r™   Úwrite_metadataÚstrrÇ   )rg   rs   r›   rœ   Únum_batchesr´   s         r   rH  z$ExchangeFlightServer.exchange_do_putè  s‡   € àˆØò 	ˆEØ—:’:Ü—o‘oÐ&BÓCÐCØ—<‘<×,Ñ,°Ò1Ð1Ð1Ø˜1Ñ‰Kð		ð
 �|‰|×.Ñ.°+Ò=Ð=Ð=Ø×Ñœc +Ó.×5Ñ5°gÓ>Õ?r   c                 ó.  — |j                   j                  dk(  sJ ‚d}|D ]ó  }|s?|j                  r3|j                  |j                  j                  | j
                  ¬«       d}|j                  r3|j                  r'|j                  |j                  |j                  «       Œƒ|j                  r|j                  |j                  «       Œ«|j                  r7|j                   j                  dk7  sJ ‚|j                  |j                  «       ŒîJ d«       ‚ y)zRun a simple echo server.r   Frw   TzShould not happenN)
r�   r‘   rB   rM  ro   rf   Úapp_metadataÚwrite_with_metadatarQ  Úwrite_batch)rg   rs   r›   rœ   Ústartedr´   s         r   rF  z"ExchangeFlightServer.exchange_echoó  sÜ   € à�|‰|×(Ñ(¨AÒ-Ð-Ð-ØˆØò 	2ˆEÙ˜uŸzšzØ—‘˜UŸZ™Z×.Ñ.¸¿¹�ÔEØ�Ø×!Ò! e§j¢jØ×*Ñ*¨5¯:©:°u×7IÑ7IÕJØ×#Ò#Ø×%Ñ% e×&8Ñ&8Õ9Ø—’Ø—|‘|×0Ñ0°AÒ5Ð5Ð5Ø×"Ñ" 5§:¡:Õ.à1Ð1Ó1�uñ	2r   c                 ó”  — |j                   j                  dk(  sJ ‚|j                  D ]L  }t        j                  j                  |j                  «      rŒ-t        j                  dt        |«      z   «      ‚ |j                  «       }|j                   j                  dk7  sJ ‚dg|j                  z  }|D ]0  }t        |«      D ]   \  }}	||xx   |	j                  «       z  cc<   Œ" Œ2 t        j                  j                  t        j                  |«      gdg¬«      }
|j!                  |
j                  «       |j#                  |
«       y)zSum rows in an uploaded table.r   zInvalid field: Úsumr<   N)r�   r‘   ro   r>   ÚtypesÚ
is_integerrI   r1  Úreprr±   Únum_rowsr¤   Úas_pyr@   rA   r?   rM  rN  )rg   rs   r›   rœ   Úfieldrz   ÚsumsÚcolumnÚrowÚvalueÚresults              r   rI  z'ExchangeFlightServer.exchange_transform  s  € à�|‰|×(Ñ(¨AÒ-Ð-Ð-Ø—]‘]ò 	GˆEÜ—8‘8×&Ñ& u§z¡zÕ2Ü—o‘oÐ&7¼$¸u»+Ñ&EÓFÐFð	Gð —‘Ó!ˆØ�|‰|×(Ñ(¨AÒ-Ð-Ð-Øˆs�U—^‘^Ñ#ˆØò 	+ˆFÜ'¨Ó/ò +‘
��UØ�S“	˜UŸ[™[›]Ñ*”	ñ+ð	+ô —‘×%Ñ%¤r§x¡x°£~Ð&6¸u¸gÐ%ÓFˆØ�‰�V—]‘]Ô#Ø×Ñ˜6Õ"r   r§   )r}   r~   r   r€   rd   rµ   rG  rH  rF  rI  r�   r‚   s   @r   r<  r<  É  s%   ø„ Ù*õò:ò !ò	@ò2ö$#r   r<  c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚHttpBasicServerAuthHandlerú7An example implementation of HTTP basic authentication.c                 ó0   •— t         ‰| �  «        || _        y r§   ©rc   rd   Úcreds©rg   rk  rj   s     €r   rd   z#HttpBasicServerAuthHandler.__init__  ó   ø€ Ü‰ÑÔØˆ�
r   c                 óz  — |j                  «       }t        j                  j                  |«      }|j                  | j
                  vrt        j                  d«      ‚| j
                  |j                     |j                  k7  rt        j                  d«      ‚|j                  t        |j                  «      «       y )Núunknown userzwrong password)
r'   r
   Ú	BasicAuthÚdeserializeÚusernamerk  r/  Úpasswordr—   r   )rg   ÚoutgoingÚincomingr    Úauths        r   Úauthenticatez'HttpBasicServerAuthHandler.authenticate  s„   € Ø�m‰m‹oˆÜ×Ñ×+Ñ+¨CÓ0ˆØ�=‰= §
¡
Ñ*Ü×3Ñ3°NÓCÐCØ�:‰:�d—m‘mÑ$¨¯©Ò5Ü×3Ñ3Ð4DÓEÐEØ�‰”w˜tŸ}™}Ó-Õ.r   c                 óz   — |st        j                  d«      ‚|| j                  vrt        j                  d«      ‚|S )Nztoken not providedro  )r
   r/  rk  ©rg   Útokens     r   Úis_validz#HttpBasicServerAuthHandler.is_valid&  s9   € ÙÜ×3Ñ3Ð4HÓIÐIØ˜Ÿ
™
Ñ"Ü×3Ñ3°NÓCÐCØˆr   ©r}   r~   r   r€   rd   rw  r{  r�   r‚   s   @r   rg  rg    s   ø„ ÙAôò/ör   rg  c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚHttpBasicClientAuthHandlerrh  c                 óf   •— t         ‰| �  «        t        j                  ||«      | _        d | _        y r§   )rc   rd   r
   rp  Ú
basic_authrz  ©rg   rr  rs  rj   s      €r   rd   z#HttpBasicClientAuthHandler.__init__1  s)   ø€ Ü‰ÑÔÜ ×*Ñ*¨8°XÓ>ˆŒØˆ�
r   c                 ó„   — | j                   j                  «       }|j                  |«       |j                  «       | _        y r§   )r€  Ú	serializer—   r'   rz  )rg   rt  ru  rv  s       r   rw  z'HttpBasicClientAuthHandler.authenticate6  s-   € Ø�‰×(Ñ(Ó*ˆØ�‰�tÔØ—]‘]“_ˆ�
r   c                 ó   — | j                   S r§   ©rz  ©rg   s    r   Ú	get_tokenz$HttpBasicClientAuthHandler.get_token;  ó   € Ø�z‰zÐr   ©r}   r~   r   r€   rd   rw  r‡  r�   r‚   s   @r   r~  r~  .  s   ø„ ÙAôò
%ö
r   r~  c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚTokenServerAuthHandlerú:An example implementation of authentication via handshake.c                 ó0   •— t         ‰| �  «        || _        y r§   rj  rl  s     €r   rd   zTokenServerAuthHandler.__init__B  rm  r   c                 óü   — |j                  «       }|j                  «       }|| j                  v r:| j                  |   |k(  r(|j                  t        j                  d|z   «      «       y t        j                  d«      ‚)Nó   secret:zinvalid username/password)r'   rk  r—   Úbase64Ú	b64encoder
   r/  )rg   rt  ru  rr  rs  s        r   rw  z#TokenServerAuthHandler.authenticateF  sf   € Ø—=‘=“?ˆØ—=‘=“?ˆØ�t—z‘zÑ! d§j¡j°Ñ&:¸hÒ&FØ�N‰Nœ6×+Ñ+¨J¸Ñ,AÓBÕCä×3Ñ3Ø+ó-ð -r   c                 ó‚   — t        j                  |«      }|j                  d«      st        j                  d«      ‚|dd  S )Nr�  zinvalid tokené   )r�  Ú	b64decodeÚ
startswithr
   r/  ry  s     r   r{  zTokenServerAuthHandler.is_validO  s=   € Ü× Ñ  Ó'ˆØ×Ñ 
Ô+Ü×3Ñ3°OÓDÐDØ�Q�RˆyÐr   r|  r‚   s   @r   r‹  r‹  ?  s   ø„ ÙDôò-ör   r‹  c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚTokenClientAuthHandlerrŒ  c                 óL   •— t         ‰| �  «        || _        || _        d| _        y )Nr   )rc   rd   rr  rs  rz  r�  s      €r   rd   zTokenClientAuthHandler.__init__Y  s#   ø€ Ü‰ÑÔØ ˆŒØ ˆŒØˆ�
r   c                 óš   — |j                  | j                  «       |j                  | j                  «       |j                  «       | _        y r§   )r—   rr  rs  r'   rz  ©rg   rt  ru  s      r   rw  z#TokenClientAuthHandler.authenticate_  s/   € Ø�‰�t—}‘}Ô%Ø�‰�t—}‘}Ô%Ø—]‘]“_ˆ�
r   c                 ó   — | j                   S r§   r…  r†  s    r   r‡  z TokenClientAuthHandler.get_tokend  rˆ  r   r‰  r‚   s   @r   r—  r—  V  s   ø„ ÙDôò%ö
r   r—  c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚNoopAuthHandlerzA no-op auth handler.c                  ó   — y)zDo nothing.Nr"   rš  s      r   rw  zNoopAuthHandler.authenticatek  s   � r   c                  ó   — y)zV
        Returning an empty string.
        Returning None causes Type error.
        rõ   r"   ry  s     r   r{  zNoopAuthHandler.is_validn  s   € ð
 r   N)r}   r~   r   r€   rw  r{  r"   r   r   r�  r�  h  s   „ Ùòór   r�  c                 óz   — | D ]6  }|j                  «       |j                  «       k(  sŒ%| j                  |«      c S  y)zcLookup the value of given key in the given headers.
       The key lookup is case-insensitive.
    N)Úlowerr   )ÚheadersÚ
lookup_keyr1   s      r   Úcase_insensitive_header_lookupr¤  v  s9   € ð ò $ˆØ�9‰9‹;˜*×*Ñ*Ó,Ó,Ø—;‘;˜sÓ#Ò#ñ$r   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)Ú!ClientHeaderAuthMiddlewareFactoryz@ClientMiddlewareFactory that creates ClientAuthHeaderMiddleware.c                 ó   — g | _         y r§   ©Úcall_credentialr†  s    r   rd   z*ClientHeaderAuthMiddlewareFactory.__init__‚  s
   € Ø!ˆÕr   c                 ó   — t        | «      S r§   )ÚClientHeaderAuthMiddleware©rg   rí   s     r   Ú
start_callz,ClientHeaderAuthMiddlewareFactory.start_call…  s   € Ü)¨$Ó/Ð/r   c                 ó   — || _         y r§   r¨  )rg   r©  s     r   Úset_call_credentialz5ClientHeaderAuthMiddlewareFactory.set_call_credentialˆ  s
   € Ø.ˆÕr   N)r}   r~   r   r€   rd   r­  r¯  r"   r   r   r¦  r¦    s   „ ÙJò"ò0ó/r   r¦  c                   ó   — e Zd ZdZd„ Zd„ Zy)r«  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                 ó   — || _         y r§   ©Úfactory©rg   r³  s     r   rd   z#ClientHeaderAuthMiddleware.__init__œ  ó	   € Øˆ�r   c                 ó€   — t        |d«      }|r0| j                  j                  d|d   j                  d«      g«       y y )NÚAuthorizationó   authorizationr   rÃ   )r¤  r³  r¯  rÇ   )rg   r¢  Úauth_headers      r   Úreceived_headersz+ClientHeaderAuthMiddleware.received_headersŸ  sB   € Ü4°W¸oÓNˆÙØ�L‰L×,Ñ,Ø Ø˜A‘×%Ñ% gÓ.ð.0õ 1ð r   N)r}   r~   r   r€   rd   rº  r"   r   r   r«  r«  Œ  s   „ ñòó1r   r«  c                   ó   — e Zd ZdZd„ Zy)Ú!HeaderAuthServerMiddlewareFactoryz)Validates incoming username and password.c                 ó¼  — t        |d«      }|d   j                  d«      }d}d}|d   dk(  rjt        j                  |d   «      }|j	                  d«      j                  d	«      }|d   d
k(  r|d   dk(  st        j                  |«      ‚d}t        |«      S |d   dk(  r|d   }|dk(  s*t        j                  |«      ‚t        j                  |«      ‚t        |«      S )Nr·  r   ú rõ   zInvalid credentialsÚBasicrK   rÃ   ú:Útestrs  Ú	token1234ÚBearer)r¤  Úsplitr�  r”  Údecoder
   r/  ÚHeaderAuthServerMiddleware)	rg   rí   r¢  r¹  Úvaluesrz  Úerror_messageÚdecodedÚpairs	            r   r­  z,HeaderAuthServerMiddlewareFactory.start_callª  sñ   € Ü4ØØó
ˆð ˜Q‘×%Ñ% cÓ*ˆØˆØ-ˆà�!‰9˜ÒÜ×&Ñ& v¨a¡yÓ1ˆGØ—>‘> 'Ó*×0Ñ0°Ó5ˆDØ˜‘G˜vÒ%¨$¨q©'°ZÒ*?Ü×7Ñ7¸ÓFÐFØˆEô *¨%Ó0Ð0ð �A‰Y˜(Ò"Ø˜1‘IˆEØ˜KÒ'Ü×7Ñ7¸ÓFÐFä×3Ñ3°MÓBÐBä)¨%Ó0Ð0r   N©r}   r~   r   r€   r­  r"   r   r   r¼  r¼  §  s
   „ Ù3ó1r   r¼  c                   ó   — e Zd ZdZd„ Zd„ Zy)rÆ  zBA ServerMiddleware that transports incoming username and password.c                 ó   — || _         y r§   r…  ry  s     r   rd   z#HeaderAuthServerMiddleware.__init__Æ  s	   € Øˆ�
r   c                 ó$   — dd| j                   z   iS )NÚauthorizationzBearer r…  r†  s    r   Úsending_headersz*HeaderAuthServerMiddleware.sending_headersÉ  s   € Ø ¨T¯Z©ZÑ!7Ð8Ð8r   N©r}   r~   r   r€   rd   rÐ  r"   r   r   rÆ  rÆ  Ã  s   „ ÙLòó9r   rÆ  c                   ó   — e Zd ZdZd„ Zy)ÚHeaderAuthFlightServerz<A Flight server that tests with basic token authentication. c                 óÒ   — |j                  d«      }|r@t        |j                  «       d«      }|j                  d«      }|d   j	                  d«      gS t        j                  d«      ‚)Nrv  r·  r¾  rK   rÃ   zNo token auth middleware found.)Úget_middlewarer¤  rÐ  rÄ  rÇ   r
   r/  )rg   rs   rÊ   Ú
middlewarer¹  rÇ  s         r   rË   z HeaderAuthFlightServer.do_actionÐ  sk   € Ø×+Ñ+¨FÓ3ˆ
ÙÜ8Ø×*Ñ*Ó,¨oó?ˆKà ×&Ñ& sÓ+ˆFØ˜1‘I×$Ñ$ WÓ-Ð.Ð.Ü×/Ñ/Ø-ó/ð 	/r   N©r}   r~   r   r€   rË   r"   r   r   rÓ  rÓ  Í  s
   „ ÙFó/r   rÓ  c                   ó   — e Zd ZdZd„ Zy)Ú'ArbitraryHeadersServerMiddlewareFactoryz<A ServerMiddlewareFactory that transports arbitrary headers.c                 ó   — t        |«      S r§   )Ú ArbitraryHeadersServerMiddleware©rg   rí   r¢  s      r   r­  z2ArbitraryHeadersServerMiddlewareFactory.start_callÞ  s   € Ü/°Ó8Ð8r   NrË  r"   r   r   rÙ  rÙ  Û  s
   „ ÙFó9r   rÙ  c                   ó   — e Zd ZdZd„ Zd„ Zy)rÛ  z5A ServerMiddleware that transports arbitrary headers.c                 ó   — || _         y r§   ©ru  )rg   ru  s     r   rd   z)ArbitraryHeadersServerMiddleware.__init__å  s	   € Ø ˆ�r   c                 ó   — | j                   S r§   rß  r†  s    r   rÐ  z0ArbitraryHeadersServerMiddleware.sending_headersè  ó   € Ø�}‰}Ðr   NrÑ  r"   r   r   rÛ  rÛ  â  s   „ Ù?ò!ór   rÛ  c                   ó   — e Zd ZdZd„ Zy)ÚArbitraryHeadersFlightServerz6A Flight server that tests multiple arbitrary headers.c                 óú   — |j                  d«      }|rT|j                  «       }t        |d«      }t        |d«      }|d   j                  d«      }|d   j                  d«      }||gS t	        j
                  d«      ‚)Núarbitrary-headersztest-header-1ztest-header-2r   rÃ   zNo headers middleware found)rÕ  rÐ  r¤  rÇ   r
   ÚFlightServerError)	rg   rs   rÊ   rÖ  r¢  Úheader_1Úheader_2Úvalue1Úvalue2s	            r   rË   z&ArbitraryHeadersFlightServer.do_actionï  s�   € Ø×+Ñ+Ð,?Ó@ˆ
ÙØ ×0Ñ0Ó2ˆGÜ5ØØóˆHô 6ØØóˆHð ˜a‘[×'Ñ'¨Ó0ˆFØ˜a‘[×'Ñ'¨Ó0ˆFØ˜FÐ#Ð#Ü×&Ñ&Ð'DÓEÐEr   Nr×  r"   r   r   rã  rã  ì  s   „ Ù@óFr   rã  c                   ó   — e Zd ZdZd„ Zy)ÚHeaderServerMiddlewarez/Expose a per-call value to the RPC method body.c                 ó   — || _         y r§   )Úspecial_value)rg   rî  s     r   rd   zHeaderServerMiddleware.__init__  s
   € Ø*ˆÕr   N)r}   r~   r   r€   rd   r"   r   r   rì  rì    s
   „ Ù9ó+r   rì  c                   ó   — e Zd ZdZd„ Zy)ÚHeaderServerMiddlewareFactoryz:Expose a per-call hard-coded value to the RPC method body.c                 ó   — t        d«      S )Nzright value)rì  rÜ  s      r   r­  z(HeaderServerMiddlewareFactory.start_call  s   € Ü% mÓ4Ð4r   NrË  r"   r   r   rð  rð    s
   „ ÙDó5r   rð  c                   ó   — e Zd ZdZd„ Zy)ÚHeaderFlightServerz(Echo back the per-call hard-coded value.c                 ód   — |j                  d«      }|r|j                  j                  «       gS dgS )NrÁ  r   )rÕ  rî  rÇ   )rg   rs   rÊ   rÖ  s       r   rË   zHeaderFlightServer.do_action  s4   € Ø×+Ñ+¨FÓ3ˆ
ÙØ×,Ñ,×3Ñ3Ó5Ð6Ð6Øˆuˆr   Nr×  r"   r   r   ró  ró    s
   „ Ù2ór   ró  c                   ó   — e Zd ZdZd„ Zy)ÚMultiHeaderFlightServerú8Test sending/receiving multiple (binary-valued) headers.c                 ór   — |j                  d«      }t        |j                  «      j                  d«      }|gS )NrÁ  rÃ   )rÕ  r]  Úclient_headersrÇ   )rg   rs   rÊ   rÖ  r¢  s        r   rË   z!MultiHeaderFlightServer.do_action  s5   € Ø×+Ñ+¨FÓ3ˆ
Ü�z×0Ñ0Ó1×8Ñ8¸ÓAˆØˆyÐr   Nr×  r"   r   r   rö  rö    s
   „ ÙBór   rö  c                   ó   — e Zd ZdZd„ Zy)Ú$SelectiveAuthServerMiddlewareFactoryz1Deny access to certain methods based on a header.c                 óö   — |j                   t        j                  j                  k(  ry |j	                  d«      }|st        j
                  d«      ‚|d   }|dk7  rt        j
                  d«      ‚t        |«      S )Núx-auth-tokenzNo tokenr   rs  zInvalid token)Úmethodr
   ÚFlightMethodÚLIST_ACTIONSr   r/  rì  )rg   rí   r¢  rz  s       r   r­  z/SelectiveAuthServerMiddlewareFactory.start_call%  sl   € Ø�;‰;œ&×-Ñ-×:Ñ:Ò:àà—‘˜NÓ+ˆÙÜ×3Ñ3°JÓ?Ð?à�a‘ˆØ�JÒÜ×3Ñ3°OÓDÐDä% eÓ,Ð,r   NrË  r"   r   r   rû  rû  "  s
   „ Ù;ó-r   rû  c                   ó   — e Zd Zd„ Zy)Ú$SelectiveAuthClientMiddlewareFactoryc                 ó   — t        «       S r§   )ÚSelectiveAuthClientMiddlewarer¬  s     r   r­  z/SelectiveAuthClientMiddlewareFactory.start_call6  s   € Ü,Ó.Ð.r   N)r}   r~   r   r­  r"   r   r   r  r  5  s   „ ó/r   r  c                   ó   — e Zd Zd„ Zy)r  c                 ó
   — ddiS )Nrý  rs  r"   r†  s    r   rÐ  z-SelectiveAuthClientMiddleware.sending_headers;  s   € à˜Jð
ð 	
r   N)r}   r~   r   rÐ  r"   r   r   r  r  :  s   „ ó
r   r  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )Ú RecordingServerMiddlewareFactoryú Record what methods were called.c                 ó0   •— t         ‰| �  «        g | _        y r§   ©rc   rd   Úmethods©rg   rj   s    €r   rd   z)RecordingServerMiddlewareFactory.__init__D  ó   ø€ Ü‰ÑÔØˆ�r   c                 óN   — | j                   j                  |j                  «       y r§   ©r  Úappendrþ  rÜ  s      r   r­  z+RecordingServerMiddlewareFactory.start_callH  ó   € Ø�‰×Ñ˜DŸK™KÔ(Ør   ©r}   r~   r   r€   rd   r­  r�   r‚   s   @r   r  r  A  ó   ø„ Ù*ôör   r  c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )Ú RecordingClientMiddlewareFactoryr	  c                 ó0   •— t         ‰| �  «        g | _        y r§   r  r  s    €r   rd   z)RecordingClientMiddlewareFactory.__init__P  r  r   c                 óN   — | j                   j                  |j                  «       y r§   r  r¬  s     r   r­  z+RecordingClientMiddlewareFactory.start_callT  r  r   r  r‚   s   @r   r  r  M  r  r   r  c                   ó   — e Zd ZdZd„ Zd„ Zy)Ú"MultiHeaderClientMiddlewareFactoryr÷  c                 ó   — i | _         y r§   )Úlast_headersr†  s    r   rd   z+MultiHeaderClientMiddlewareFactory.__init__\  s   € ð ˆÕr   c                 ó   — t        | «      S r§   )ÚMultiHeaderClientMiddlewarer¬  s     r   r­  z-MultiHeaderClientMiddlewareFactory.start_calla  s   € Ü*¨4Ó0Ð0r   N)r}   r~   r   r€   rd   r­  r"   r   r   r  r  Y  s   „ ÙBòó
1r   r  c                   ó<   — e Zd ZdZddgddgdgdgdœZd„ Zd	„ Zd
„ Zy)r  r÷  rE   rV   ó    ó   rF   )zx-textzx-binary-binzx-MIXED-cases   x-other-MIXED-casec                 ó   — || _         y r§   r²  r´  s     r   rd   z$MultiHeaderClientMiddleware.__init__p  rµ  r   c                 ó   — | j                   S r§   )ÚEXPECTEDr†  s    r   rÐ  z+MultiHeaderClientMiddleware.sending_headerss  rá  r   c                 óN   — | j                   j                  j                  |«       y r§   )r³  r  Úupdate)rg   r¢  s     r   rº  z,MultiHeaderClientMiddleware.received_headersv  s   € ð 	�‰×!Ñ!×(Ñ(¨Õ1r   N)r}   r~   r   r€   r$  rd   rÐ  rº  r"   r   r   r  r  e  s6   „ ÙBð ˜%�.Ø  'Ð*à˜Ø %˜wñ€Hòòó2r   r  c                   ó   — e Zd ZdZd„ Zy)Ú"MultiHeaderServerMiddlewareFactoryr÷  c                 ó   — t        |«      S r§   )ÚMultiHeaderServerMiddlewarerÜ  s      r   r­  z-MultiHeaderServerMiddlewareFactory.start_call  s   € Ü*¨7Ó3Ð3r   NrË  r"   r   r   r(  r(  |  s
   „ ÙBó4r   r(  c                   ó   — e Zd ZdZd„ Zd„ Zy)r*  r÷  c                 ó   — || _         y r§   )rù  )rg   rù  s     r   rd   z$MultiHeaderServerMiddleware.__init__†  s
   € Ø,ˆÕr   c                 ó"   — t         j                  S r§   )r  r$  r†  s    r   rÐ  z+MultiHeaderServerMiddleware.sending_headers‰  s   € Ü*×3Ñ3Ð3r   NrÑ  r"   r   r   r*  r*  ƒ  s   „ ÙBò-ó4r   r*  c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )ÚLargeMetadataFlightServerz Regression test for ARROW-13253.c                 ó8   •— t        ‰| �  |i |¤Ž ddz  | _        y )Nó    ì       )rc   rd   Ú	_metadata)rg   Úargsri   rj   s      €r   rd   z"LargeMetadataFlightServer.__init__�  s!   ø€ Ü‰Ñ˜$Ð) &Ò)Ø Ñ-ˆ�r   c                 óÊ   — t        j                  dt        j                  «       fg«      }t        j                  |t        j
                  dgg|¬«      | j                  fg«      S )NrZ   rK   r  )r>   ro   Úint64r
   r‹   Úrecord_batchr3  )rg   rs   rx   ro   s       r   r{   z LargeMetadataFlightServer.do_get”  sS   € Ü—‘˜S¤"§(¡(£*Ð-Ð.Ó/ˆÜ×%Ñ% fÜ�_‰_˜q˜c˜U¨6Ô2°D·N±NÐCð/
ó ð 	r   c                 ó:   — |j                  | j                  «       y r§   )rQ  r3  r²   s        r   rµ   z%LargeMetadataFlightServer.do_exchangeš  s   € Ø×Ñ˜dŸn™nÕ-r   )r}   r~   r   r€   rd   r{   rµ   r�   r‚   s   @r   r/  r/  �  s   ø„ Ù*ô.òö.r   r/  c                  ó 	  — d} d}d}d}d}d}d}d}d	}d
}	t        t        j                  dd«      «      | k(  sJ ‚t        t        j                  dd«      «      |k(  sJ ‚t        t        j                  dd«      «      |k(  sJ ‚t        t        j
                  j                  d«      «      |k(  sJ ‚t        j                  dg t        j                  d«      j                  t        j                  d«      «      d«      }
t        |
«      |k(  sJ ‚t        j                  t        j                  g «      t        j
                  j                  «       g dddd«      }t        |«      |k(  sJ ‚t        t        j                  d«      «      |k(  sJ ‚t        t        j                   d«      «      |k(  sJ ‚t        t        j"                  t        j                  g «      «      «      |k(  sJ ‚t        t        j"                  t        j                  dg«      «      «      dk(  sJ ‚t        t        j$                  d«      «      |	k(  sJ ‚|j                  t        j                  g «      k(  sJ ‚t        j                  d t        j
                  j                  «       g dddd«      }d}t        |«      |k(  sJ ‚|j                  �J ‚t'        j(                  t*        «      5  t        j                  dd «       d d d «       t'        j(                  t*        «      5  t        j                  t-        «       g «       d d d «       t'        j(                  t*        «      5  t        j                  dddt-        «       g«       d d d «       t'        j(                  t*        «      5  t        j                  dg d¬«       d d d «       t'        j(                  t*        «      5  t        j                  dg t/        d d!d"dd#d$«      ¬«       d d d «       t'        j(                  t*        «      5  t        j                  dg t-        «       ¬%«       d d d «       y # 1 sw Y   �ŒRxY w# 1 sw Y   �ŒxY w# 1 sw Y   ŒèxY w# 1 sw Y   ŒºxY w# 1 sw Y   Œ~xY w# 1 sw Y   y xY w)&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'>rE   r   rV   ÚuserÚpassó   fooú2023-04-05T12:34:56Úsó   endpoint app metadatarK   rá   Tó   test app metadataúgrpc+tcp://localhost:1234)Úintr6  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ç  rY   r9   rL   rM   ©rU  )r]  r
   ÚActionr÷   rp  rp   Úfor_commandrã   r>   ræ   rç   rè   rn   ro   rq   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_reprrX  ž  sâ  € ØE€KØBÐØW€OØD€Oð>€Mð	-ð ð M€MØ:€KØBÐØ9€Kä”—‘˜e SÓ)Ó*¨kÒ9Ð9Ð9Ü”×!Ñ! %¨Ó/Ó0Ð4DÒDÐDÐDÜ”× Ñ  ¨Ó0Ó1°_ÒDÐDÐDÜ”×'Ñ'×3Ñ3°EÓ:Ó;¸ÒNÐNÐNÜ×$Ñ$Ø�”B—I‘IÐ3Ó4×9Ñ9¼"¿,¹,ÀsÓ:KÓLØ ó€Hô �‹>˜]Ò*Ð*Ð*Ü×ÑÜ
�	‰	�"‹”v×.Ñ.×7Ñ7Ó9¸2Ø	ˆ2ˆtÐ)ó€Dô �‹:˜Ò"Ð"Ð"Ü”—‘Ð ;Ó<Ó=ÀÒNÐNÐNÜ”—‘˜fÓ%Ó&¨+Ò5Ð5Ð5Ü”×#Ñ#¤B§I¡I¨b£MÓ2Ó3Ð7IÒIÐIÐIÜ”×#Ñ#¤B§I¡IÐ/?Ð.@Ó$AÓBÓCØ;ò<ð <ð <ä”—‘˜fÓ%Ó&¨+Ò5Ð5Ð5Ø�;‰;œ"Ÿ)™) B›-Ò'Ð'Ð'ä×ÑØŒf×%Ñ%×.Ñ.Ó0°"Ø	ˆ2ˆtÐ)ó€Dð
	-ð ô �‹:˜Ò"Ð"Ð"Ø�;‰;ÐÐÐä	�‰”yÓ	!ñ #Ü�‰�e˜TÔ"÷#ô 
�‰”yÓ	!ñ ,Ü×Ñœf›h¨Ô+÷,ä	�‰”yÓ	!ñ PÜ×Ñ˜e m°^ÄVÃXÐ%NÔO÷Pä	�‰”yÓ	!ñ PÜ×Ñ˜e RÐ9NÕO÷Pä	�‰”yÓ	!ñ XÜ×Ñ˜e R¼À$ÈÈ1ÈaÐQRÐTUÓ9VÕW÷Xä	�‰”yÓ	!ñ @Ü×Ñ˜e R´f³hÕ?÷@ð @÷#ñ #ú÷,ñ ,ú÷Pð Pú÷Pð Pú÷Xð Xú÷@ð @úsH   ËP6ÌQÍ"QÎ
QÏ'Q(Ð!Q4Ð6Q ÑQÑQÑQ%Ñ(Q1Ñ4Q=c                  óô   — d„ d„ d„ d„ d„ d„ d„ d„ d	„ d
„ d„ d„ d„ d„ d„ d„ d„ d„ d„ d„ d„ g} | D ]G  } |«       \  }} |«       \  }}||k(  sJ ‚||k(  sJ ‚||k(  sJ ‚||k(  sJ ‚||k(  sJ ‚||k(  sJ ‚||k7  rŒGJ ‚ y )Nc                  óZ   — t        j                  dd«      t        j                  dd«      fS )NrE   r   rV   ©r
   rE  r"   r   r   ú<lambda>ztest_eq.<locals>.<lambda>í  s!   € ”—‘˜u cÓ*¬F¯M©M¸%ÀÓ,EÐF€ r   c                  óZ   — t        j                  dd«      t        j                  dd«      fS )NrE   r   ó   barr[  r"   r   r   r\  ztest_eq.<locals>.<lambda>î  s!   € ”—‘˜u cÓ*¬F¯M©M¸%ÀÓ,HÐI€ r   c                  óZ   — t        j                  dd«      t        j                  dd«      fS )NrE   rV   rF   rö   r"   r   r   r\  ztest_eq.<locals>.<lambda>ï  s(   € ”×"Ñ" 5¨%Ó0Ü×"Ñ" 5¨%Ó0ð2€ r   c                  óZ   — t        j                  dd«      t        j                  dd«      fS )Nr:  r;  Úuser2©r
   rp  r"   r   r   r\  ztest_eq.<locals>.<lambda>ñ  s(   € ”×!Ñ! &¨&Ó1Ü×!Ñ! '¨6Ó2ð4€ r   c                  óZ   — t        j                  dd«      t        j                  dd«      fS )Nr:  r;  Úpass2rb  r"   r   r   r\  ztest_eq.<locals>.<lambda>ó  s(   € ”×!Ñ! &¨&Ó1Ü×!Ñ! &¨'Ó2ð4€ r   c                  ó~   — t         j                  j                  d«      t         j                  j                  d«      fS )NrE   )r
   rp   rF  rq   r"   r   r   r\  ztest_eq.<locals>.<lambda>õ  s0   € ”×(Ñ(×4Ñ4°UÓ;Ü×(Ñ(×1Ñ1°%Ó8ð:€ r   c                  óZ   — t        j                  dg «      t        j                  dg «      fS ©Nr<  r^  ©r
   rã   r"   r   r   r\  ztest_eq.<locals>.<lambda>÷  s(   € ”×&Ñ& v¨rÓ2Ü×&Ñ& v¨rÓ2ð4€ r   c                  óª   — t        j                  dt        j                  d«      g«      t        j                  dt        j                  d«      g«      fS )Nr<  rA  úgrpc+tls://localhost:1234)r
   rã   rä   r"   r   r   r\  ztest_eq.<locals>.<lambda>ù  sK   € Ü×!Ñ!ØœŸ™Ð)DÓEÐFóHä×!Ñ!ØœŸ™Ð)DÓEÐFóHð
€ r   c            
      ó2  — t        j                  dg t        j                  d«      j	                  t        j
                  d«      «      «      t        j                  dg t        j                  d«      j	                  t        j
                  d«      «      «      fS )Nr<  r=  r>  z2023-04-05T12:34:56.789Úms)r
   rã   r>   ræ   rç   rè   r"   r   r   r\  ztest_eq.<locals>.<lambda>ÿ  ss   € Ü×!Ñ!Ø˜œBŸI™IÐ&;Ó<×AÑAÄ"Ç,Á,ÈsÓBSÓTóVä×!Ñ!Ø˜Ü—	‘	Ð3Ó4×9Ñ9¼"¿,¹,ÀtÓ:LÓMóOðP€ r   c                  ób   — t        j                  dg d¬«      t        j                  dg d¬«      fS )Nr<  r   rD  ó   metarh  r"   r   r   r\  ztest_eq.<locals>.<lambda>  s-   € ”×&Ñ& v¨rÀÔDÜ×&Ñ& v¨rÀÔHðJ€ r   c                  óD  — t        j                  t        j                  g «      t         j                  j                  «       g «      t        j                  t        j                  dt        j                  «       fg«      t         j                  j                  «       g «      fS ©NÚints)r
   rn   r>   ro   rp   rq   r6  r"   r   r   r\  ztest_eq.<locals>.<lambda>  st   € Ü×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2°Bó8ô ×ÑÜ—	‘	˜F¤B§H¡H£JÐ/Ð0Ó1Ü×'Ñ'×0Ñ0Ó2°Bó8ð	9€ r   c                  ó  — t        j                  t        j                  g «      t         j                  j                  «       g «      t        j                  t        j                  g «      t         j                  j                  d«      g «      fS ©Nr<  )r
   rn   r>   ro   rp   rq   rF  r"   r   r   r\  ztest_eq.<locals>.<lambda>  si   € Ü×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2°Bó8ô ×ÑÜ—	‘	˜"“Ü×'Ñ'×3Ñ3°FÓ;¸RóAð	B€ r   c            	      ón  — t        j                  t        j                  g «      t         j                  j                  «       t        j                  dg «      g«      t        j                  t        j                  g «      t         j                  j                  «       t        j                  dg «      g«      fS rg  )r
   rn   r>   ro   rp   rq   rã   r"   r   r   r\  ztest_eq.<locals>.<lambda>  s‡   € Ü×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2Ü×&Ñ& v¨rÓ2Ð3ó5ô ×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2Ü×&Ñ& v¨rÓ2Ð3ó5ð6€ r   c                  ó"  — t        j                  t        j                  g «      t         j                  j                  «       g d¬«      t        j                  t        j                  g «      t         j                  j                  «       g d¬«      fS )Néÿÿÿÿ)Útotal_recordsrK   ©r
   rn   r>   ro   rp   rq   r"   r   r   r\  ztest_eq.<locals>.<lambda>  sl   € Ü×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2°BÀbôJô ×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2°BÀaôIð	J€ r   c                  ó"  — t        j                  t        j                  g «      t         j                  j                  «       g d¬«      t        j                  t        j                  g «      t         j                  j                  «       g d¬«      fS )Nrv  )Útotal_bytesrá   rx  r"   r   r   r\  ztest_eq.<locals>.<lambda>%  sl   € Ü×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2°BÀBôHô ×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2°BÀBôHð	I€ r   c                  ó"  — t        j                  t        j                  g «      t         j                  j                  «       g d¬«      t        j                  t        j                  g «      t         j                  j                  «       g d¬«      fS )NF)ÚorderedTrx  r"   r   r   r\  ztest_eq.<locals>.<lambda>,  sl   € Ü×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2°BÀôGô ×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2°BÀôFð	G€ r   c                  ó"  — t        j                  t        j                  g «      t         j                  j                  «       g d¬«      t        j                  t        j                  g «      t         j                  j                  «       g d¬«      fS )Nr   rD  rn  rx  r"   r   r   r\  ztest_eq.<locals>.<lambda>3  sl   € Ü×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2°BÀSôJô ×ÑÜ—	‘	˜"“Ü×'Ñ'×0Ñ0Ó2°BÀWôNð	O€ r   c                  óV   — t        j                  d«      t        j                  d«      fS )NrA  rj  )r
   rä   r"   r   r   r\  ztest_eq.<locals>.<lambda>:  s"   € ”—‘Ð!<Ó=Ü—‘Ð!<Ó=ð?€ r   c                  óV   — t        j                  d«      t        j                  d«      fS rg  )r
   rG  r"   r   r   r\  ztest_eq.<locals>.<lambda><  s   € ”—‘˜vÓ&¬¯©°fÓ(=Ð>€ r   c                  óÌ   — t        j                  t        j                  g «      «      t        j                  t        j                  dt        j                  «       fg«      «      fS rp  )r
   rì   r>   ro   r6  r"   r   r   r\  ztest_eq.<locals>.<lambda>=  sD   € ”×$Ñ$¤R§Y¡Y¨r£]Ó3Ü×$Ñ$¤R§Y¡Y°¼¿¹»Ð0DÐ/EÓ%FÓGðI€ r   c                  óV   — t        j                  d«      t        j                  d«      fS )Nr   r<  )r
   rH  r"   r   r   r\  ztest_eq.<locals>.<lambda>?  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€Eðl ò 	ˆÙ“U‰
ˆˆdÙ“U‰
ˆˆdØ�tŠ|Ðˆ|Ø�tŠ|Ðˆ|Ø�tŠ|Ðˆ|Ø�tŠ|Ðˆ|Ø�tŠ|Ðˆ|Ø�tŠ|Ðˆ|Ø�t‹|Ðˆ|ñ	r   c                  ó€  — t        j                  t        j                  g «      t         j                  j                  «       g «      } t        j                  t        j                  g «      t         j                  j                  «       g dd¬«      }t        j                  t        j                  g «      t         j                  j                  «       g d d ¬«      }| j                  dk(  sJ ‚|j                  dk(  sJ ‚|j                  dk(  sJ ‚| j                  dk(  sJ ‚|j                  dk(  sJ ‚|j                  dk(  sJ ‚y )Nrv  )rw  rz  )r
   rn   r>   ro   rp   rq   rw  rz  )Úfi1Úfi2Úfi3s      r   Útest_flight_info_defaultsr�  N  s  € Ü
×
Ñ
œBŸI™I b›M¬6×+BÑ+B×+KÑ+KÓ+MÈrÓ
R€CÜ
×
Ñ
Ü
�	‰	�"‹Ü×Ñ×(Ñ(Ó*¨B¸bÈbôR€Cô ×
Ñ
Ü
�	‰	�"‹Ü×Ñ×(Ñ(Ó*¨B¸dÐPTôV€Cð ×Ñ Ò"Ð"Ð"Ø×Ñ Ò"Ð"Ð"Ø×Ñ Ò"Ð"Ð"à�?‰?˜bÒ Ð Ð Ø�?‰?˜bÒ Ð Ð Ø�?‰?˜bÒ Ð Ñ r   c                  ó–   — d ddt        «       fg} | D ])  }t        |«      5 }t        |t        «      sJ ‚	 d d d «       Œ+ y # 1 sw Y   Œ6xY w)Núgrpc://localhost:0rÝ   )r   r   Ú
isinstance)Ú	locationsrh   Úservers      r   Ú$test_flight_server_location_argumentr“  `  s`   € àØØ	”nÓ&Ð'ð€Ið
 ò 8ˆÜ˜hÓ'ð 	8¨6Ü˜fÔ&6Ô7Ð7Ñ7÷	8ð 	8ñ8÷	8ð 	8ús	    ?¿A	c                  ó¤   — t        j                  t        «      5  t        «       5  t        «       ‚# 1 sw Y   nxY w	 d d d «       y # 1 sw Y   y xY wr§   )rI  rJ  Ú
ValueErrorr   r"   r   r   Ú#test_server_exit_reraises_exceptionr–  k  sF   € Ü	�‰”zÓ	"ñ ÜÓñ 	Ü“,Ð÷	ð 	úð 	÷÷ ñ ús   šA¥0°9	µAÁAc                  óD  ‡— dt        «       fŠd } ˆfd„}t        ‰«      5 }t        j                  |d¬«      }|j	                  «        t        j
                  «       }|j                  d¬«       t        j
                  «       |z
  }|dk\  sJ ‚	 d d d «       y # 1 sw Y   y xY w)NrÝ   c                  ón   •— t        j                  d«       t        ‰ «      at        j	                  «        y r  )r  r   r   r’  Úserve©rh   s   €r   r™  z-test_client_wait_for_available.<locals>.servew  s!   ø€ ä�
‰
�3ŒÜ! (Ó+ˆÜ�‰�r   T©ÚtargetÚdaemonr9   ©Útimeoutr  )r   r   Ú	threadingÚThreadÚstartr  Úwait_for_available)r’  r™  ÚclientÚthreadrX  Úelapsedrh   s         @r   Útest_client_wait_for_availabler§  q  s�   ø€ ð œ^Ó-Ð.€HØ€Fôô 
�hÓ	ð  6Ü×!Ñ!¨°tÔ<ˆØ�‰Œä—)‘)“+ˆØ×!Ñ!¨!Ð!Ô,Ü—)‘)“+ Ñ'ˆØ˜#Š~Ð‰~÷÷ ñ ús    A,BÂBc                  ó\  — t        «       5 } t        j                  d| j                  f«      5 }t	        |j                  «       «      g k(  sJ ‚|j                  t         j                  «      }t        t	        |«      «      dk(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)zTry a simple list_flights call.rÝ   rK   N)r^   r
   ÚconnectÚportÚlistru   rm   Úlen)r’  r¤  Úflightss      r   Útest_flight_list_flightsr®  ‡  s–   € ä	Ó	ð ' 6Ü�N‰N˜K¨¯©Ð5Ó6ð'Ø:@Ü�F×'Ñ'Ó)Ó*¨bÒ0Ð0Ð0Ø×%Ñ%Ô&:×&CÑ&CÓDˆÜ”4˜“=Ó! QÒ&Ð&Ñ&÷	'÷ '÷ 'ñ 'ú÷ 'ð 'ús#   ‹"B"­ABÂB"ÂB	ÂB"Â"B+c                  óÌ  — t        «       5 } t        j                  d| j                  f«      5 }t	        |j                  «       «      g k(  sJ ‚|j                  «        |j                  «        t        j                  t        j                  «      5  t	        |j                  «       «       d d d «       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   y xY w)NrÝ   )r^   r
   r©  rª  r«  ru   ÚcloserI  rJ  r>   r1  ©r’  r¤  s     r   Útest_flight_client_closer²  �  sµ   € Ü	Ó	ð ( 6Ü�N‰N˜K¨¯©Ð5Ó6ð(Ø:@Ü�F×'Ñ'Ó)Ó*¨bÒ0Ð0Ð0Ø�‰ŒØ�‰ŒÜ�]‰]œ2Ÿ?™?Ó+ñ 	(Ü�×$Ñ$Ó&Ô'÷	(÷(÷ (ð (÷
	(ð 	(ú÷(ð (ú÷ (ð (ús;   ‹"C­A"CÂCÂ)CÂ1CÃCÃCÃC	ÃCÃC#c                  ó<  — t        «       } t        «       5 }t        j                  d|j                  f«      5 }|j                  t        j                  d«      «      j                  «       }|j                  | «      sJ ‚	 ddd«       ddd«       t        j                  j                  t        j                  j                  j                  ¬«      }t        |¬«      5 }t        j                  d|j                  f«      5 }|j                  t        j                  d«      «      j                  «       }|j                  | «      sJ ‚|j                  t        j                  d«      «      j                  «       j                  «       }|j                  | «      sJ ‚	 ddd«       ddd«       t        j                   t        j"                  d¬«      5  t        d¬«      5 }t        j                  d|j                  f«      5 }|j                  t        j                  d«      «      j                  «       }ddd«       ddd«       ddd«       y# 1 sw Y   �ŒÌxY w# 1 sw Y   �ŒÑxY w# 1 sw Y   ŒËxY w# 1 sw Y   ŒÏxY w# 1 sw Y   ŒLxY w# 1 sw Y   ŒPxY w# 1 sw Y   yxY w)	úTry a simple do_get call.rÝ   r`   N©Úmetadata_versionrw   z+expected IpcWriteOptions, got <class 'int'>©Úmatchrá   )rC   r^   r
   r©  rª  r{   rH  r±   r’   r>   ÚipcÚIpcWriteOptionsÚMetadataVersionÚV4rÖ   rI  rJ  ræ  )rz   r’  r¤  rB   rf   s        r   Útest_flight_do_get_intsr½  š  s  € äÓ€Eä	Ó	ð " 6Ü�N‰N˜K¨¯©Ð5Ó6ð"Ø:@Ø�}‰}œVŸ]™]¨7Ó3Ó4×=Ñ=Ó?ˆØ�{‰{˜5Ô!Ð!Ñ!÷"÷ "ô
 �f‰f×$Ñ$ÜŸ™×/Ñ/×2Ñ2ð %ó 4€Gä	 gÔ	.ð "°&Ü�N‰N˜K¨¯©Ð5Ó6ð"Ø:@Ø�}‰}œVŸ]™]¨7Ó3Ó4×=Ñ=Ó?ˆØ�{‰{˜5Ô!Ð!Ð!ð �}‰}œVŸ]™]¨7Ó3Ó4×>Ñ>Ó@×IÑIÓKˆØ�{‰{˜5Ô!Ð!Ñ!÷"÷ "ô 
�‰”v×/Ñ/ØJô
Lñ Dä!¨"Ô-ð 	D°Ü—‘ ¨V¯[©[Ð9Ó:ð	DØ>DØ—=‘=¤§¡¨wÓ!7Ó8×AÑAÓCˆD÷	D÷ 	D÷Dð D÷!"ñ "ú÷ "ñ "ú÷"ð "ú÷ "ð "ú÷	Dð 	Dú÷ 	Dð 	Dú÷Dð Dús„   •"I·AIÁ>IÃ"I.Ã>BI"ÆI.ÇJÇ"JÇ<3I:È/JÈ7JÉI	ÉIÉIÉ"I+	É'I.É.I7É:JÉ?JÊJ	ÊJÊJc                  óˆ  — t        «       } t        «       5 }t        j                  d|j                  f«      5 }|j                  t        j                  d«      «      j                  «       }t        |d   «      | j                  d«      j                  «       k(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)r´  rÝ   r`   r;   r   N)rC   r^   r
   r©  rª  r{   rH  Úread_pandasr«  rb  Ú	to_pylist)rz   r’  r¤  rB   s       r   Útest_do_get_ints_pandasrÁ  µ  s§   € ô Ó€Eä	Ó	ð F 6Ü�N‰N˜K¨¯©Ð5Ó6ðFØ:@Ø�}‰}œVŸ]™]¨7Ó3Ó4×@Ñ@ÓBˆÜ�D˜Ñ%Ó&¨%¯,©,°q«/×*CÑ*CÓ*EÒEÐEÑE÷F÷ F÷ Fñ Fú÷ Fð Fús#   •"B8·A#B,ÂB8Â,B5	Â1B8Â8Cc            
      óÆ  — t        «       } t        «       5 }t        j                  d|j                  f«      5 }|j                  t        j                  d«      «      }|j                  j                  dk(  sJ ‚|j                  «       }|j                  | «      sJ ‚|j                  t        ddddd¬«      k(  sJ ‚	 d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)	NrÝ   ra   rK   r�   rM   rL   r   ©r‘   r™   Únum_dictionary_batchesÚnum_dictionary_deltasÚnum_replaced_dictionaries)rT   r^   r
   r©  rª  r{   rH  r�   r‘   r±   r’   r   )rz   r’  r¤  r›   rB   s        r   Útest_flight_do_get_dictsrÇ  À  sÍ   € ÜÓ €Eä	Ó	ð 
 6Ü�N‰N˜K¨¯©Ð5Ó6ð
Ø:@Ø—‘œvŸ}™}¨XÓ6Ó7ˆØ�|‰|×(Ñ(¨AÒ-Ð-Ð-Ø�‰Ó ˆØ�{‰{˜5Ô!Ð!Ð!Ø�|‰|œyØØ Ø#$Ø"#Ø&'ô 
ò 
ð 	
ñ 
÷
÷ 
÷ 
ñ 
ú÷ 
ð 
ús#   •"C·BCÂ:CÃC	ÃCÃC c                  óÚ  — t        j                  g d¢t        j                  «       ¬«      g} t         j                  j	                  | dg¬«      }t        d¬«      5 }t        j                  d|j                  f«      5 }|j                  t        j                  d«      «      j                  «       }|j                  |«      sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)	z+Make sure Tickets get passed to the server.r7   rH   rZ   r<   s
   the-ticket)r  rÝ   N)r>   r?   râ   r@   rA   r   r
   r©  rª  r{   rH  r±   r’   )r  rz   r’  r¤  rB   s        r   Útest_flight_do_get_ticketrÉ  Ò  sµ   € ä�X‰XÒ)´·±³
Ô;Ð<€EÜ�H‰H× Ñ  ¨s¨eÐ Ó4€EÜ	 °Ô	?ð "À6Ü�N‰N˜K¨¯©Ð5Ó6ð"Ø:@Ø�}‰}œVŸ]™]¨=Ó9Ó:×CÑCÓEˆØ�{‰{˜5Ô!Ð!Ñ!÷"÷ "÷ "ñ "ú÷ "ð "ús%   Á"C!Á=ACÃC!ÃC	ÃC!Ã!C*c                  ó€  — t        «       5 } t        d| j                  f«      }|j                  t        j
                  j                  d«      «      }|j                  dk(  sJ ‚|j                  dk(  sJ ‚|j                  sJ ‚|j                  dk(  sJ ‚|j                  t        j                  dt        j                  «       fg«      k(  sJ ‚t        |j                  «      dk(  sJ ‚t        |j                  d   j                   «      dk(  sJ ‚|j                  d   j"                  �J ‚|j                  d   j                  dk(  sJ ‚|j                  d   j                   d   t	        j$                  d
«      k(  sJ ‚|j                  d   j"                  t        j&                  d«      j)                  t        j*                  dd«      «      k(  sJ ‚|j                  d   j                  dk(  sJ ‚|j                  d   j                   d   t        j$                  j-                  dd«      k(  sJ ‚	 d	d	d	«       y	# 1 sw Y   y	xY w)z8Make sure FlightEndpoint accepts string and object URIs.rÝ   r   rK   rá   s   info app metadatarZ   rL   r   NrÜ   z#2023-04-05T12:34:56.789012345+00:00rà   ÚUTCr?  rÞ   )rÚ   r   rª  rê   r
   rp   rF  rw  rz  r|  rU  ro   r>   râ   r¬  Ú	endpointsr‘  rC  rä   ræ   rç   rè   rå   ©r’  r¤  rí   s      r   Útest_flight_get_inforÎ  Ü  sþ  € ä	Ó	ð < &Ü˜{¨F¯K©KÐ8Ó9ˆØ×%Ñ%¤f×&=Ñ&=×&IÑ&IÈ#Ó&NÓOˆØ×!Ñ! QÒ&Ð&Ð&Ø×Ñ 2Ò%Ð%Ð%Ø�|Š|Ðˆ|Ø× Ñ Ð$8Ò8Ð8Ð8Ø�{‰{œbŸi™i¨#¬r¯x©x«zÐ):Ð(;Ó<Ò<Ð<Ð<Ü�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Ü�I‰IÐ;Ó<ß‰t”B—L‘L  uÓ-Ó.ò/ð 	/ð /ð �~‰~˜aÑ ×-Ñ-Ð1IÒIÐIÐIØ�~‰~˜aÑ ×*Ñ*¨1Ñ-Ü�O‰O×(Ñ(¨°dÓ;ò<ð 	<ñ <÷#<÷ <ñ <ús   ‹HH4È4H=c                  ój  — t        «       5 } t        d| j                  f«      5 }|j                  t        j
                  j                  d«      «      }|j                  t        j                  dt        j                  «       fg«      k(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z+Make sure GetSchema returns correct schema.rÝ   r   rZ   N)
rÚ   r   rª  rî   r
   rp   rF  ro   r>   râ   rÍ  s      r   Útest_flight_get_schemarÐ  ó  s’   € ä	Ó	ð = &Ü˜+ v§{¡{Ð3Ó4ð=Ø8>Ø× Ñ ¤×!8Ñ!8×!DÑ!DÀSÓ!IÓJˆØ�{‰{œbŸi™i¨#¬r¯x©x«zÐ):Ð(;Ó<Ò<Ð<Ñ<÷=÷ =÷ =ñ =ú÷ =ð =ús#   ‹B)£A(BÂB)ÂB&	Â"B)Â)B2c                  ó8  — t        «       5 } t        d| j                  f«      5 }t        j                  t
        j                  d¬«      5  t        |j                  «       «       ddd«       ddd«       ddd«       t        «       5 } t        d| j                  f«      5 }t        |j                  «       «      t        j                  «       k(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   Œ~xY w# 1 sw Y   Œ‚xY w# 1 sw Y   Œ†xY w# 1 sw Y   Œ6xY w# 1 sw Y   yxY w)z6Make sure the return type of ListActions is validated.rÝ   z3Results of list_actions must be ActionType or tupler·  N)rý   r   rª  rI  rJ  r
   ræ  r«  r¾   rð   rù   r±  s     r   Útest_list_actionsrÒ  û  s  € ô 
&Ó	'ð (¨6Ü˜+ v§{¡{Ð3Ó4ð(Ø8>Ü�]‰]Ü×(Ñ(ð-ô
ñ 	(ô
 �×$Ñ$Ó&Ô'÷	(÷(÷ (ô 
!Ó	"ð 7 fÜ˜+ v§{¡{Ð3Ó4ð7Ø8>Ü�F×'Ñ'Ó)Ó*Ü#×4Ñ4Ó6ò7ð 	7ñ 7÷7÷ 7ð 7÷	(ð 	(ú÷(ð (ú÷ (ð (ú÷7ð 7ú÷ 7ð 7ús^   ‹C8£&C,Á	C Á#C,Á+C8ÂDÂ1DÃDÃ C)Ã%C,Ã,C5	Ã1C8Ã8DÄD	Ä	DÄDc                   ó&   — e Zd ZdZed„ «       Zd„ Zy)ÚConvenienceServerzT
    Server for testing various implementation conveniences (auto-boxing, etc.)
    c                 ó
   — g d¢S )N)r<  r^  s   bazr"   r†  s    r   Úsimple_action_resultsz'ConvenienceServer.simple_action_results  s   € â'Ð'r   c                 ó  ‡— |j                   dk(  r| j                  S |j                   dk(  r|j                  gS |j                   dk(  rdgS |j                   dk(  rt        j                  «       ‚|j                   dk(  rˆfd„} |«       S y )Núsimple-actionÚechoú
bad-actionrE   úarrow-exceptionÚforeverc               3   óZ   •K  — ‰ j                  «       sd–— ‰ j                  «       sŒy y ­wrs  )Úis_cancelled)rs   s   €r   rƒ  z(ConvenienceServer.do_action.<locals>.gen   s&   øè ø€ Ø!×.Ñ.Ô0Ø ’Lð "×.Ñ.×0ùs   ƒ%+©+)rI   rÖ  Úbodyr>   ÚArrowMemoryError)rg   rs   rÊ   rƒ  s    `  r   rË   zConvenienceServer.do_action  s�   ø€ Ø�;‰;˜/Ò)Ø×-Ñ-Ð-Ø�[‰[˜FÒ"Ø—K‘K�=Ð Ø�[‰[˜LÒ(Ø�7ˆNØ�[‰[Ð-Ò-Ü×%Ñ%Ó'Ð'Ø�[‰[˜IÒ%ô!ñ “5ˆLð	 &r   N)r}   r~   r   r€   ÚpropertyrÖ  rË   r"   r   r   rÔ  rÔ    s    „ ñð ñ(ó ð(ór   rÔ  c                  óŠ  — t        «       5 } t        d| j                  f«      5 }|j                  d«      D �cg c]  }|j                  ‘Œ }}|| j
                  k(  sJ ‚d}|j                  d|f«      D �cg c]  }|j                  ‘Œ }}||gk(  sJ ‚	 d d d «       d d d «       y c c}w c c}w # 1 sw Y   ŒxY w# 1 sw Y   y xY w)NrÝ   rØ  s   the-bodyrÙ  )rÔ  r   rª  rË   rß  rÖ  )r’  r¤  ÚxÚresultsrß  s        r   Ú!test_do_action_result_conveniencerå  &  sÎ   € Ü	Ó	ð 
! Ü˜+ v§{¡{Ð3Ó4ð
!Ø8>ð $*×#3Ñ#3°OÓ#DÖE˜a�1—6“6ÐEˆÐEØ˜&×6Ñ6Ò6Ð6Ð6ð ˆØ#)×#3Ñ#3°V¸T°NÓ#CÖD˜a�1—6“6ÐDˆÐDØ˜4˜&Ò Ð Ñ ÷
!÷ 
!ð 
!ùò Fùò
 E÷
!ð 
!ú÷ 
!ð 
!ús?   ‹B9£B-·B#Á
*B-Á4B(Â
B-ÂB9Â#
B-Â-B6	Â2B9Â9Cc                  óê  — t        «       5 } t        d| j                  f«      5 }t        j                  t
        j                  d¬«      5  t        |j                  d«      «       d d d «       t        j                  t
        j                  d¬«      5  t        |j                  d«      «       d d d «       d d d «       d d d «       y # 1 sw Y   ŒbxY w# 1 sw Y   Œ&xY w# 1 sw Y   Œ*xY w# 1 sw Y   y xY w)NrÝ   za bytes-like object is requiredr·  rÚ  rà  rÛ  )	rÔ  r   rª  rI  rJ  r
   ræ  r«  rË   r±  s     r   Útest_nicer_server_exceptionsrç  4  sÏ   € Ü	Ó	ð 6 Ü˜+ v§{¡{Ð3Ó4ð6Ø8>Ü�]‰]œ6×3Ñ3Ø!BôDñ 	1ä�×!Ñ! ,Ó/Ô0÷	1ô �]‰]œ6×3Ñ3Ø!3ô5ñ 	6ä�×!Ñ!Ð"3Ó4Ô5÷	6÷6÷ 6ð 6÷	1ð 	1ú÷	6ð 	6ú÷6ð 6ú÷ 6ð 6úsR   ‹C)£&CÁ	CÁ$-CÂCÂ,CÂ4C)ÃCÃ
CÃCÃCÃC&	Ã"C)Ã)C2c                  óŠ   — t        d«      } 	 | j                  dkD  sJ ‚	 | j                  «        y# | j                  «        w xY w)zMake sure port() works.r�  r   N)rÚ   rª  Úshutdown)r’  s    r   Útest_get_portrê  C  s7   € ä Ð!5Ó6€FðØ�{‰{˜QŠÐ‰à�‰Õøˆ�‰Õús	   �0 °AÚntz'Unix sockets can't be tested on Windows)Úreasonc                  ó,  — t        j                  «       5 } | j                  «        t        j                  j                  | j                  «      }t        |¬«      5  t        |«      5 }|j                  t        j                  d«      «      }t        «       }|j                  j                  |j                  «      sJ ‚|j                  «       }|j                  |«      sJ ‚|j                  t        j                  d«      «      }t        «       }|j                  j                  |j                  «      sJ ‚|j                  «       }|j                  |«      sJ ‚	 ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)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{   rH  rC   ro   r’   r±   rT   )Úsockrh   r¤  r›   rz   rB   s         r   Útest_flight_domain_socketró  L  s<  € ô 
×	$Ñ	$Ó	&ð &¨$Ø�
‰
ŒÜ—?‘?×0Ñ0°·±Ó;ˆÜ!¨8Ô4ñ 	&Ü˜XÓ&ð	&Ø*0à—]‘]¤6§=¡=°Ó#9Ó:ˆFÜ%Ó'ˆEØ—=‘=×'Ñ'¨¯©Ô5Ð5Ð5Ø—?‘?Ó$ˆDØ—;‘;˜uÔ%Ð%Ð%à—]‘]¤6§=¡=°Ó#:Ó;ˆFÜ&Ó(ˆEØ—=‘=×'Ñ'¨¯©Ô5Ð5Ð5Ø—?‘?Ó$ˆDØ—;‘;˜uÔ%Ð%Ñ%÷	&÷ 	&÷&ð &÷	&ð 	&ú÷ 	&ð 	&ú÷&ð &ús=   •AF
ÁE>Á'C1E2ÅE>Å!F
Å2E;Å7E>Å>F	ÆF
Æ
Fc                  óz  — t         j                  j                  t        j                  t	        dd«      «      gdg¬«      } t        | j                  ¬«      5 }t        d|j                  f«      5 }|j                  t        j                  j                  d«      | j                  «      \  }}|j                  | d«       |j                  «        |j                  t        j                   d«      «      j#                  «       }|j%                  | «      sJ ‚	 d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
z�Try 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    rZ   r<   )r­   rÝ   rÁ  r   N)r>   r@   rA   r?   r  rª   ro   r   rª  r¢   r
   rp   rq   rN  r°  r{   rH  r±   r’   ©rB   r’  r¤  rœ   Ú_re  s         r   Útest_flight_large_messager÷  c  s  € ô �8‰8×ÑÜ
�‰”�qÐ*Ó+Ó,ð!àˆUð  ó €Dô 
¨$¯+©+Ô	6ð #¸&Ü˜+ v§{¡{Ð3Ó4ð#Ø8>Ø—M‘M¤&×"9Ñ"9×"BÑ"BÀ6Ó"JØ"&§+¡+ó/‰	ˆ�ð 	×Ñ˜4Ð!1Ô2Ø�‰ŒØ—‘œvŸ}™}¨SÓ1Ó2×;Ñ;Ó=ˆØ�}‰}˜TÔ"Ð"Ñ"÷#÷ #÷ #ñ #ú÷ #ð #ús%   ÁD1Á/B$D%ÄD1Ä%D.	Ä*D1Ä1D:c                  ó`  — t         j                  j                  t        j                  t	        dd«      «      gdg¬«      } t        «       5 }t        d|j                  f«      5 }|j                  t        j                  j                  d«      | j                  «      \  }}|j                  | «       |j                  «        |j                  t        j                   d«      «      j#                  «       }|j%                  | «      sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)	z?Try downloading a flight of RecordBatches in a GeneratorStream.r   rL  rZ   r<   rÝ   rÁ  r   N)r>   r@   rA   r?   r  r·   r   rª  r¢   r
   rp   rq   ro   rN  r°  r{   rH  r±   r’   rõ  s         r   Ú'test_flight_generator_stream_of_batchesrù  y  sõ   € ä�8‰8×ÑÜ
�‰”�q˜)Ó$Ó%ð!àˆUð  ó €Dô 
 Ó	!ð # VÜ˜+ v§{¡{Ð3Ó4ð#Ø8>Ø—M‘M¤&×"9Ñ"9×"BÑ"BÀ6Ó"JØ"&§+¡+ó/‰	ˆ�à×Ñ˜4Ô Ø�‰ŒØ—‘œvŸ}™}¨SÓ1Ó2×;Ñ;Ó=ˆØ�}‰}˜TÔ"Ð"Ñ"÷#÷ #÷ #ñ #ú÷ #ð #úó%   ÁD$Á#B#DÄD$ÄD!	ÄD$Ä$D-c            
      óð  — t         j                  j                  t        j                  g d¢t        j                  t        j
                  «       t        j                  «       «      «      t        j                  g d¢«      gddg¬«      } t        «       5 }t        d|j                  f«      5 }|j                  t        j                  j                  d«      | j                  «      \  }}|j                  | «       |j!                  «        |j#                  t        j$                  d«      «      j'                  «       }|j)                  | «      sJ ‚	 d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
z_
    Try downloading a flight of RecordBatches with dictionaries
    in a GeneratorStream.
    ©rE   rV   rF   rE   rE   ©é{   éê   iY  iÈ  i7  rZ   r[   r<   rÝ   rÁ  r   N©r>   r@   rA   r?   Ú
dictionaryr6  rO   rÔ   r   rª  r¢   r
   rp   rq   ro   rN  r°  r{   rH  r±   r’   rõ  s         r   Ú1test_flight_generator_stream_of_batches_with_dictr  ‰  ó  € ô
 �8‰8×ÑÜ
�‰Ò4Ü—‘œrŸx™x›z¬2¯7©7«9Ó5ó	7ä
�‰Ò*Ó+ð!ð �3ˆZð	  ó €Dô 
1Ó	2ð #°fÜ˜+ v§{¡{Ð3Ó4ð#Ø8>Ø—M‘M¤&×"9Ñ"9×"BÑ"BÀ6Ó"JØ"&§+¡+ó/‰	ˆ�à×Ñ˜4Ô Ø�‰ŒØ—‘œvŸ}™}¨SÓ1Ó2×;Ñ;Ó=ˆØ�}‰}˜TÔ"Ð"Ñ"÷#÷ #÷ #ñ #ú÷ #ð #úó%   ÂE,Â+B#E ÅE,Å E)	Å%E,Å,E5c                  ó`  — t         j                  j                  t        j                  t	        dd«      «      gdg¬«      } t        «       5 }t        d|j                  f«      5 }|j                  t        j                  j                  d«      | j                  «      \  }}|j                  | «       |j                  «        |j                  t        j                   d«      «      j#                  «       }|j%                  | «      sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)	z7Try downloading a flight of Table in a GeneratorStream.r   rL  rZ   r<   rÝ   rÁ  r   N)r>   r@   rA   r?   r  rÏ   r   rª  r¢   r
   rp   rq   ro   rN  r°  r{   rH  r±   r’   rõ  s         r   Ú%test_flight_generator_stream_of_tabler  ž  sõ   € ä�8‰8×ÑÜ
�‰”�q˜)Ó$Ó%ð!àˆUð  ó €Dô 
%Ó	&ð #¨&Ü˜+ v§{¡{Ð3Ó4ð#Ø8>Ø—M‘M¤&×"9Ñ"9×"BÑ"BÀ6Ó"JØ"&§+¡+ó/‰	ˆ�à×Ñ˜4Ô Ø�‰ŒØ—‘œvŸ}™}¨SÓ1Ó2×;Ñ;Ó=ˆØ�}‰}˜TÔ"Ð"Ñ"÷#÷ #÷ #ñ #ú÷ #ð #úrú  c            
      óð  — t         j                  j                  t        j                  g d¢t        j                  t        j
                  «       t        j                  «       «      «      t        j                  g d¢«      gddg¬«      } t        «       5 }t        d|j                  f«      5 }|j                  t        j                  j                  d«      | j                  «      \  }}|j                  | «       |j!                  «        |j#                  t        j$                  d«      «      j'                  «       }|j)                  | «      sJ ‚	 d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
zW
    Try downloading a flight of Table with dictionaries
    in a GeneratorStream.
    rü  rý  rZ   r[   r<   rÝ   rÁ  r   Nr   rõ  s         r   Ú/test_flight_generator_stream_of_table_with_dictr  ®  r  r  c                  ó`  — t         j                  j                  t        j                  t	        dd«      «      gdg¬«      } t        «       5 }t        d|j                  f«      5 }|j                  t        j                  j                  d«      | j                  «      \  }}|j                  | «       |j                  «        |j                  t        j                   d«      «      j#                  «       }|j%                  | «      sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)	zCTry downloading a flight of RecordBatchReader in a GeneratorStream.r   rL  rZ   r<   rÝ   rÁ  r   N)r>   r@   rA   r?   r  rÔ   r   rª  r¢   r
   rp   rq   ro   rN  r°  r{   rH  r±   r’   rõ  s         r   Ú3test_flight_generator_stream_of_record_batch_readerr
  Ã  sõ   € ä�8‰8×ÑÜ
�‰”�q˜)Ó$Ó%ð!àˆUð  ó €Dô 
1Ó	2ð #°fÜ˜+ v§{¡{Ð3Ó4ð#Ø8>Ø—M‘M¤&×"9Ñ"9×"BÑ"BÀ6Ó"JØ"&§+¡+ó/‰	ˆ�à×Ñ˜4Ô Ø�‰ŒØ—‘œvŸ}™}¨SÓ1Ó2×;Ñ;Ó=ˆØ�}‰}˜TÔ"Ð"Ñ"÷#÷ #÷ #ñ #ú÷ #ð #úrú  c            
      óð  — t         j                  j                  t        j                  g d¢t        j                  t        j
                  «       t        j                  «       «      «      t        j                  g d¢«      gddg¬«      } t        «       5 }t        d|j                  f«      5 }|j                  t        j                  j                  d«      | j                  «      \  }}|j                  | «       |j!                  «        |j#                  t        j$                  d«      «      j'                  «       }|j)                  | «      sJ ‚	 d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
zc
    Try downloading a flight of RecordBatchReader with dictionaries
    in a GeneratorStream.
    rü  rý  rZ   r[   r<   rÝ   rÁ  r   Nr   rõ  s         r   Ú=test_flight_generator_stream_of_record_batch_reader_with_dictr  Ó  r  r  c                  ón  — t        «       5 } t        d| j                  f«      5 }t        j                  t
        j                  «      5  |j                  t        j                  d«      «      j                  «        ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z+Try streaming data with mismatched schemas.rÝ   r   N)r  r   rª  rI  rJ  r>   ÚArrowExceptionr{   r
   rH  r±   r±  s     r   Ú$test_flight_invalid_generator_streamr  è  s’   € ä	"Ó	$ð 9¨Ü˜+ v§{¡{Ð3Ó4ð9Ø8>Ü�]‰]œ2×,Ñ,Ó-ñ 	9Ø�M‰Mœ&Ÿ-™-¨Ó,Ó-×6Ñ6Ô8÷	9÷9÷ 9ð 9÷	9ð 	9ú÷9ð 9ú÷ 9ð 9ús:   ‹B+£$BÁ3BÁ:BÂB+ÂBÂBÂB(	Â$B+Â+B4c            	      óš  — t        «       5 } t        d| j                  f«      5 }t        j                  dd«      }t        j
                  d¬«      }t        j                  t        j                  «      5  t        |j                  ||¬«      «       ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z)Make sure timeouts fire on slow requests.rÝ   rõ   r   gš™™™™™É?rž  rw   N)r  r   rª  r
   rE  r   rI  rJ  r-  r«  rË   )r’  r¤  rÊ   rf   s       r   Útest_timeout_firesr  ð  s°   € ô 
Ó	ð <˜vÜ˜+ v§{¡{Ð3Ó4ð<Ø8>Ü—‘˜r 3Ó'ˆÜ×*Ñ*°3Ô7ˆô �]‰]œ6×5Ñ5Ó6ñ 	<Ü�×!Ñ! &°'Ð!Ó:Ô;÷	<÷<÷ <ð <÷	<ð 	<ú÷<ð <ú÷ <ð <ús;   ‹C£AB5Á3B)ÂB5ÂCÂ)B2Â.B5Â5B>	Â:CÃC
c                  ó.  — t        «       5 } t        d| j                  f«      5 }t        j                  d¬«      }|j                  t        j                  d«      |¬«      j                  «        ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z0Make sure timeouts do not fire on fast requests.rÝ   r	  rž  r`   rw   N)r^   r   rª  r
   r   r{   rH  r±   )r’  r¤  rf   s      r   Útest_timeout_passesr  þ  s‚   € ä	Ó	ð J 6Ü˜+ v§{¡{Ð3Ó4ðJØ8>Ü×*Ñ*°3Ô7ˆØ�‰”f—m‘m GÓ,°gˆÓ>×GÑGÔI÷J÷ J÷ Jñ Jú÷ Jð Jús#   ‹B£AA?Á.BÁ?B	ÂBÂBc                  óŠ  — t         j                  j                  t        j                  g d¢«      gdg¬«      } t	        «       5 }t        d|j                  f«      5 }t        j                  t        dg¬«      ¬«      }|j                  t        j                  d«      |¬	«      j                  «       }|j                  t        j                  d«      «      j                  «       }|j                  d
k(  sJ ‚|j                  dk(  sJ ‚|| k(  sJ ‚|t        «       k(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z"Make sure ReadOptions can be used.rX   r[   r<   rÝ   rK   )Úincluded_fields)Úread_optionsrb   rw   rL   N)r>   r@   rA   r?   r^   r   rª  r
   r   r   r{   rH  r±   Únum_columnsr\   )Úexpectedr’  r¤  rf   Ú	response1Ú	response2s         r   Útest_read_optionsr    s  € ä�x‰x×#Ñ#¤R§X¡XªlÓ%;Ð$<ÀSÀEÐ#ÓJ€HÜ	Ó	ð 4 6Ü˜+ v§{¡{Ð3Ó4ð4Ø8>Ü×*Ñ*Ü'¸¸Ô<ô>ˆà—M‘M¤&§-¡-Øó#Ø&ð "ó (ß(0©«
ð 	à—M‘M¤&§-¡-°Ó"9Ó:×CÑCÓEˆ	à×$Ñ$¨Ò)Ð)Ð)Ø×$Ñ$¨Ò)Ð)Ð)Ø˜HÒ$Ð$Ð$ØÔ1Ó3Ò3Ð3Ñ3÷4÷ 4÷ 4ñ 4ú÷ 4ð 4ús%   ÁD9ÁC D-ÄD9Ä-D6	Ä2D9Ä9Eó   tests   p4ssw0rd)rk  c                  óz  — t        t        ¬«      5 } t        d| j                  f«      5 }t	        j
                  dd«      }t        j                  t        j                  d¬«      5  t        |j                  |«      «       ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z,Test that auth fails when not authenticated.©Úauth_handlerrÝ   rÂ   r   z.*unauthenticated.*r·  N)r·   Úbasic_auth_handlerr   rª  r
   rE  rI  rJ  r/  r«  rË   ©r’  r¤  rÊ   s      r   Útest_http_basic_unauthr"     s¡   € ô 
 Ô-?Ô	@ð +ÀFÜ˜+ v§{¡{Ð3Ó4ð+Ø8>Ü—‘˜z¨3Ó/ˆÜ�]‰]œ6×<Ñ<Ø!6ô8ñ 	+ä�×!Ñ! &Ó)Ô*÷	+÷+÷ +ð +÷	+ð 	+ú÷+ð +ú÷ +ð +ús:   ‘B1©<B%Á%BÂ B%ÂB1ÂB"ÂB%Â%B.	Â*B1Â1B:z,ARROW-10013: gRPC on Windows corrupts peer()c                  óÔ  — t        t        ¬«      5 } t        d| j                  f«      5 }t	        j
                  dd«      }|j                  t        dd«      «       |j                  |«      }t        |«      }|j                  j                  «       dk(  sJ ‚t        |«      }|j                  j                  «       dk7  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)	z:Test a Python implementation of HTTP basic authentication.r  rÝ   rÂ   r   rÁ  Úp4ssw0rdr  N)r·   r   r   rª  r
   rE  rw  r~  rË   Únextrß  r–   )r’  r¤  rÊ   rä  ÚidentityÚpeer_addresss         r   Útest_http_basic_authr(  +  sÍ   € ô 
 Ô-?Ô	@ð 5ÀFÜ˜+ v§{¡{Ð3Ó4ð5Ø8>Ü—‘˜z¨3Ó/ˆØ×ÑÔ6°v¸zÓJÔKØ×"Ñ" 6Ó*ˆÜ˜“=ˆØ�}‰}×'Ñ'Ó)¨WÒ4Ð4Ð4Ü˜G“}ˆØ× Ñ ×+Ñ+Ó-°Ò4Ð4Ñ4÷5÷ 5÷ 5ñ 5ú÷ 5ð 5ús#   ‘C©BCÃCÃC	ÃCÃC'c            	      ó°  — t        t        ¬«      5 } t        d| j                  f«      5 }t	        j
                  dd«      }t        j                  t        j                  d¬«      5  |j                  t        dd«      «       t        |j                  |«      «       d	d	d	«       d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
z-Test that auth fails with the wrong password.r  rÝ   rÂ   r   z.*wrong password.*r·  rÁ  ÚwrongN)r·   r   r   rª  r
   rE  rI  rJ  r/  rw  r~  r%  rË   r!  s      r   Ú%test_http_basic_auth_invalid_passwordr+  :  sµ   € ä	Ô-?Ô	@ð +ÀFÜ˜+ v§{¡{Ð3Ó4ð+Ø8>Ü—‘˜z¨3Ó/ˆÜ�]‰]œ6×<Ñ<Ø!5ô7ñ 	+à×ÑÔ :¸6À7Ó KÔLÜ�×!Ñ! &Ó)Ô*÷	+÷+÷ +ð +÷	+ð 	+ú÷+ð +ú÷ +ð +ús:   ‘C©<C Á%6B4ÂC Â#CÂ4B=Â9C Ã C		ÃCÃCc                  ó|  — t        t        ¬«      5 } t        d| j                  f«      5 }t	        j
                  dd«      }|j                  t        dd«      «       t        |j                  |«      «      }|j                  j                  «       dk(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)	ú-Test an auth mechanism that uses a handshake.r  rÝ   rÂ   r   rÁ  r$  r  N)r·   Útoken_auth_handlerr   rª  r
   rE  rw  r—  r%  rË   rß  r–   )r’  r¤  rÊ   r&  s       r   Útest_token_authr/  E  s¡   € ä	Ô-?Ô	@ð 5ÀFÜ˜+ v§{¡{Ð3Ó4ð5Ø8>Ü—‘˜z¨3Ó/ˆØ×ÑÔ2°6¸:ÓFÔGÜ˜×(Ñ(¨Ó0Ó1ˆØ�}‰}×'Ñ'Ó)¨WÒ4Ð4Ñ4÷5÷ 5÷ 5ñ 5ú÷ 5ð 5ús#   ‘B2©A+B&ÂB2Â&B/	Â+B2Â2B;c            	      óL  — t        t        ¬«      5 } t        d| j                  f«      5 }t	        j
                  t        j                  «      5  |j                  t        dd«      «       ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)r-  r  rÝ   rÁ  r*  N)
r·   r.  r   rª  rI  rJ  r
   r/  rw  r—  r±  s     r   Útest_token_auth_invalidr1  O  sš   € ä	Ô-?Ô	@ð IÀFÜ˜+ v§{¡{Ð3Ó4ðIØ8>Ü�]‰]œ6×<Ñ<Ó=ñ 	IØ×ÑÔ 6°v¸wÓ GÔH÷	I÷I÷ Ið I÷	Ið 	Iú÷Ið Iú÷ Ið Iús:   ‘B©$BÁBÁ)BÁ1BÂBÂBÂB	ÂBÂB#c                  ó
  — t        t        dt        «       i¬«      5 } t        d| j                  f«      5 }|j                  dd«      }|d   dk(  sJ ‚|d   d	k(  sJ ‚	 d
d
d
«       d
d
d
«       y
# 1 sw Y   ŒxY w# 1 sw Y   y
xY w)zATest authenticate_basic_token with bearer token and auth headers.rv  ©r  rÖ  rÝ   r  ó   passwordr   r¸  rK   ó   Bearer token1234N)rÓ  Úno_op_auth_handlerr¼  r   rª  Úauthenticate_basic_token)r’  r¤  Ú
token_pairs      r   Útest_authenticate_basic_tokenr9  [  s—   € ä	Ô-?ØÔ1Ó3ðMô 
ð 4à
Ü˜+ v§{¡{Ð3Ó4ð4ð 9?Ø×4Ñ4°W¸kÓJˆ
Ø˜!‰}Ð 0Ò0Ð0Ð0Ø˜!‰}Ð 3Ò3Ð3Ñ3÷4÷ 4÷ 4ñ 4ú÷ 4ð 4ús"   œA9´'A-ÁA9Á-A6	Á2A9Á9Bc                  óP  — t        t        dt        «       i¬«      5 } t        d| j                  f«      5 }t        j                  t        j                  «      5  |j                  dd«       ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z7Test authenticate_basic_token with an invalid password.rv  r3  rÝ   r  s   badpasswordN)
rÓ  r6  r¼  r   rª  rI  rJ  r
   r/  r7  r±  s     r   Ú.test_authenticate_basic_token_invalid_passwordr;  f  s¨   € ä	Ô-?ØÔ1Ó3ðMô 
ð Eà
Ü˜+ v§{¡{Ð3Ó4ðEð 9?Ü�]‰]œ6×<Ñ<Ó=ñ 	EØ×+Ñ+¨G°^ÔD÷	E÷	E÷ Eð E÷	Eð 	Eú÷	Eð Eú÷ Eð Eús:   œB´$BÁBÁ+BÁ3BÂBÂ	BÂB	ÂBÂB%c            
      óÜ  — t        t        dt        «       i¬«      5 } t        d| j                  f«      5 }|j                  dd«      }|d   dk(  sJ ‚|d   d	k(  sJ ‚t        j                  |g¬
«      }t        |j                  t        j                  dd«      |¬«      «      }|d   j                  j                  «       dk(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z@Test authenticate_basic_token and doAction after authentication.rv  r3  rÝ   r  r4  r   r¸  rK   r5  ©r¢  útest-actionr   ©rÊ   rf   ó	   token1234N)rÓ  r6  r¼  r   rª  r7  r
   r   r«  rË   rE  rß  r–   ©r’  r¤  r8  rf   re  s        r   Ú(test_authenticate_basic_token_and_actionrB  p  sö   € ä	Ô-?ØÔ1Ó3ðMô 
ð 
;à
Ü˜+ v§{¡{Ð3Ó4ð
;ð 9?Ø×4Ñ4°W¸kÓJˆ
Ø˜!‰}Ð 0Ò0Ð0Ð0Ø˜!‰}Ð 3Ò3Ð3Ð3Ü×*Ñ*°J°<Ô@ˆÜ�f×&Ñ&Ü—=‘= °Ó4¸gð 'ó Gó Hˆà�a‰y�~‰~×(Ñ(Ó*¨lÒ:Ð:Ñ:÷
;÷ 
;÷ 
;ñ 
;ú÷ 
;ð 
;ús#   œC"´BCÃC"ÃC	ÃC"Ã"C+c            	      ó  — t        t        dt        «       i¬«      5 } t        «       }t	        d| j
                  f|g¬«      }t        j                  d«      }t        j                  dd|z   fg¬«      }t        |j                  t        j                  d	d
«      |¬«      «      }|d   j                  j                  «       dk(  sJ ‚|j                  d   dk(  sJ ‚|j                  d   dk(  sJ ‚t        |j                  t        j                  d	d
«      |¬«      «      }|d   j                  j                  «       dk(  sJ ‚|j                  d   dk(  sJ ‚|j                  d   dk(  sJ ‚|j!                  «        ddd«       y# 1 sw Y   yxY w)zšTest authenticate_basic_token with client middleware
       to intercept authorization header returned by the
       HTTP header auth enabled server.
    rv  r3  rÝ   ©rÖ  s   test:passwordr¸  s   Basic r=  r>  r   r?  r   r@  rK   r5  N)rÓ  r6  r¼  r¦  r   rª  r�  r‘  r
   r   r«  rË   rE  rß  r–   r©  r°  )r’  Úclient_auth_middlewarer¤  Úencoded_credentialsrf   re  Úresult2s          r   Ú4test_authenticate_basic_token_with_client_middlewarerH    s«  € ô
 
 Ô-?ØÔ1Ó3ðMô 
ð à
Ü!BÓ!DÐÜØ˜&Ÿ+™+Ð&Ø.Ð/ô
ˆô %×.Ñ.Ð/?Ó@ÐÜ×*Ñ*Ø˜yÐ+>Ñ>Ð?ð4
ô ˆô �f×&Ñ&Ü—=‘= °Ó4¸gð 'ó Gó Hˆà�a‰y�~‰~×(Ñ(Ó*¨lÒ:Ð:Ð:Ø%×5Ñ5°aÑ8Ð<LÒLÐLÐLØ%×5Ñ5°aÑ8Ø%ò&ð 	&ð &ä�v×'Ñ'Ü—=‘= °Ó4¸gð (ó Gó Hˆà�q‰z�‰×)Ñ)Ó+¨|Ò;Ð;Ð;Ø%×5Ñ5°aÑ8Ð<LÒLÐLÐLØ%×5Ñ5°aÑ8Ø%ò&ð 	&ð &à�‰Œ÷1÷ ñ ús   œEE?Å?Fc            
      ó6  — t        t        t        «       t        «       dœ¬«      5 } t	        d| j
                  f«      5 }|j                  dd«      }|d   dk(  sJ ‚|d   d	k(  sJ ‚t        j                  |d
dg¬«      }t        |j                  t        j                  dd«      |¬«      «      }|d   j                  j                  «       dk(  sJ ‚|d   j                  j                  «       dk(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z:Test passing multiple arbitrary headers to the middleware.)rv  rå  r3  rÝ   r  r4  r   r¸  rK   r5  )s   test-header-1ó   value1)s   test-header-2ó   value2r=  r>  r   rw   rJ  rK  N)rã  r6  r¼  rÙ  r   rª  r7  r
   r   r«  rË   rE  rß  r–   rA  s        r   Ú-test_arbitrary_headers_in_flight_call_optionsrL  Ÿ  s(  € ä	%Ü'ä5Ó7Ü!HÓ!Jñ
ô
ð 8ð
 Ü˜+ v§{¡{Ð3Ó4ð8ð 9?Ø×4Ñ4°W¸kÓJˆ
Ø˜!‰}Ð 0Ò0Ð0Ð0Ø˜!‰}Ð 3Ò3Ð3Ð3Ü×*Ñ*ØØ)Ø)ð4
ô ˆô
 �f×&Ñ&¤v§}¡}Ø˜3ó( Ø)0ð 'ó 2ó 3ˆà�a‰y�~‰~×(Ñ(Ó*¨iÒ7Ð7Ð7Ø�a‰y�~‰~×(Ñ(Ó*¨iÒ7Ð7Ñ7÷%8÷ 8÷ 8ñ 8ú÷ 8ð 8ús#   ¥D½B4DÃ2DÄD	ÄDÄDc                  ó,  — t        j                  t        j                  d¬«      5  t	        j
                  d«       ddd«       t        j                  t        j                  d¬«      5  t        d«       ddd«       y# 1 sw Y   ŒCxY w# 1 sw Y   yxY w)zTest constructing invalid URIs.z.*Cannot parse URI:.*r·  ú%N)rI  rJ  r>   r1  r
   r©  r^   r"   r   r   Útest_location_invalidrO  ¶  sm   € ä	�‰”r—‘Ð.EÔ	Fñ Ü�‰�sÔ÷ô 
�‰”r—‘Ð.EÔ	Fñ "Ü˜SÔ!÷"ð "÷ð ú÷"ð "ús   ¦A>Á)B
Á>BÂ
Bc                  ó”   — t        j                  d«      j                  dk(  sJ ‚t        j                  d«      j                  dk(  sJ ‚y)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_schemerR  ¿  sD   € ä�?‰?˜:Ó&×*Ñ*¨kÒ9Ð9Ð9Ü�?‰?Ð<Ó=×AÑAØ*ò+ð +ñ +r   c                  ó   — t        «       } t        | d   ¬«      5 }t        dt        |j                  «      z   «      5 }t        j                  t        j                  «      5  |j                  t        j                  d«      «      j                  «        ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z>Make sure clients cannot connect when cert verification fails.r3   ©Útls_certificateszgrpc+tls://localhost:r`   N)r5   r^   r   rR  rª  rI  rJ  r
   ÚFlightUnavailableErrorr{   rH  r±   ©Úcertsr>  r¤  s      r   Útest_tls_failsrY  Æ  s¬   € ô Ó€Eô 
¨u°^Ñ/DÔ	Eð =ÈÜÐ0´3°q·v±v³;Ñ>Ó?ð=ØCIô �]‰]œ6×8Ñ8Ó9ñ 	=Ø�M‰Mœ&Ÿ-™-¨Ó0Ó1×:Ñ:Ô<÷	=÷	=÷ =ð =÷	=ð 	=ú÷	=ð =ú÷ =ð =ús:   š"C¼$B8Á 3B,ÂB8ÂCÂ,B5Â1B8Â8C	Â=CÃCc                  ób  — t        «       } t        «       }t        |d   ¬«      5 }t        d|j                  f|d   ¬«      5 }|j                  t        j                  d«      «      j                  «       }|j                  | «      sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z"Try a simple do_get call over TLS.r3   rT  rÝ   r2   )Útls_root_certsr`   N)
rC   r5   r^   r   rª  r{   r
   rH  r±   r’   ©rz   rX  r>  r¤  rB   s        r   Útest_tls_do_getr]  Ö  s�   € ô Ó€EÜÓ€Eä	¨u°^Ñ/DÔ	Eð "ÈÜ�k 1§6¡6Ð*Ø$)¨+Ñ$6ô	8ð"à;AØ�}‰}œVŸ]™]¨7Ó3Ó4×=Ñ=Ó?ˆØ�{‰{˜5Ô!Ð!Ñ!÷	"÷ "÷ "ñ "ú÷ "ð "ús$   ¤B%ÁABÂB%ÂB"	ÂB%Â%B.c                  óš  — t        «       } t        «       }t        |d   ¬«      5 }	 t        d|j                  fd¬«      }j                  t        j                  d«      «      j                  «       }|j                  | «      sJ ‚|j                  «        ddd«       y# t
        $ r t        j                  d«       Y Œ~w xY w# 1 sw Y   yxY w)	zDTry a simple do_get call over TLS with server verification disabled.r3   rT  rÝ   T©Údisable_server_verificationz4disable_server_verification feature is not availabler`   N)rC   r5   r^   r   rª  rÈ   rI  Úskipr{   r
   rH  r±   r’   r°  r\  s        r   Ú$test_tls_disable_server_verificationrb  ã  s¹   € ô Ó€EÜÓ€Eä	¨u°^Ñ/DÔ	Eð Èð	PÜ! ;°·±Ð"7Ø>BôDˆFð �}‰}œVŸ]™]¨7Ó3Ó4×=Ñ=Ó?ˆØ�{‰{˜5Ô!Ð!Ð!Ø�‰Œ÷ð øô #ò 	PÜ�K‰KÐNÖOð	Pú÷	ð ús.   ¤C¦B¿ACÂB>Â;CÂ=B>Â>CÃC
c                  ó�  — t        «       } t        | d   ¬«      5 }t        j                  d|j                  f| d   d¬«      5 }t        j                  t        j                  «      5  |j                  t        j                  d«      «       ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)	z5Check that incorrectly overriding the hostname fails.r3   rT  rÝ   r2   Úfakehostname)r[  Úoverride_hostnamer`   N)
r5   r^   r
   r©  rª  rI  rJ  rV  r{   rH  rW  s      r   Útest_tls_override_hostnamerf  ô  s®   € ô Ó€Eä	¨u°^Ñ/DÔ	Eð 2ÈÜ�‰˜ Q§V¡VÐ,Ø&+¨KÑ&8Ø)7ô	9ð2ð =CÜ�]‰]œ6×8Ñ8Ó9ñ 	2Ø�M‰Mœ&Ÿ-™-¨Ó0Ô1÷	2÷	2÷ 2ð 2÷	2ð 	2ú÷	2ð 2ú÷ 2ð 2ús;   š(B<Á$B0Á&%B$ÂB0ÂB<Â$B-Â)B0Â0B9	Â5B<Â<Cc                  ó^  — t        j                  g d¢«      g} t         j                  j                  | dg¬«      }g }t	        «       5 }t        d|j                  f«      5 }|j                  t        j                  d«      «      }d}|D ]H  \  }}|j                  |«       t        j                  d|j                  «       «      \  }	||	k(  sJ ‚|dz  }ŒJ t         j                  j                  |«      } | j                  |«      sJ ‚	 d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
z'Try a simple do_get call with metadata.r7   rZ   r<   rÝ   r   r   rŽ   rK   N)r>   r?   r@   rA   r„   r   rª  r{   r
   rH  r  r”   r•   r–   Úfrom_batchesr’   )
rB   rz   Úbatchesr’  r¤  r›   r¦   rŸ   ÚmetadataÚ
server_idxs
             r   Útest_flight_do_get_metadatarl    s  € ô 	�‰Ò$Ó%ð€Dô �H‰H× Ñ  ¨c¨UÐ Ó3€Eà€GÜ	Ó	ð 
" 6Ü˜+ v§{¡{Ð3Ó4ð
"Ø8>Ø—‘œvŸ}™}¨SÓ1Ó2ˆØˆØ%ò 	‰OˆE�8Ø�N‰N˜5Ô!Ü Ÿ-™-¨¨h×.AÑ.AÓ.CÓD‰KˆJØ˜*Ò$Ð$Ð$Ø�1‰H‰Cð		ô
 �x‰x×$Ñ$ WÓ-ˆØ�{‰{˜5Ô!Ð!Ñ!÷
"÷ 
"÷ 
"ñ 
"ú÷ 
"ð 
"ús%   ÁD#ÁB&DÄD#ÄD 	ÄD#Ä#D,c                  óT  — g } g }t        «       5 }t        d|j                  f«      5 }|j                  t	        j
                  d«      «      }d}	 	 |j                  «       \  }}| j                  |«       t        j                  d|j                  «       «      \  }||k(  sJ ‚|dz  }ŒX# t        $ r Y nw xY w	 ddd«       n# 1 sw Y   nxY wddd«       n# 1 sw Y   nxY wt        «       5 }t        d|j                  f«      5 }|j                  t	        j
                  d«      «      }d}|D ]H  \  }}|j                  |«       t        j                  d|j                  «       «      \  }||k(  sJ ‚|dz  }ŒJ 	 ddd«       n# 1 sw Y   nxY wddd«       n# 1 sw Y   nxY w| |k(  sJ ‚y)z0Verify the iterator interface works as expected.rÝ   r   r   rŽ   rK   N)r„   r   rª  r{   r
   rH  Ú
read_chunkr  r”   r•   r–   ÚStopIteration)	Úbatches1Úbatches2r’  r¤  r›   r¦   rŸ   rj  rk  s	            r   Ú1test_flight_metadata_record_batch_reader_iteratorrr    s§  € à€HØ€Hä	Ó	ð  6Ü˜+ v§{¡{Ð3Ó4ðØ8>Ø—‘œvŸ}™}¨SÓ1Ó2ˆØˆØðØ"(×"3Ñ"3Ó"5‘��xØ—‘ Ô&Ü$Ÿm™m¨D°(×2EÑ2EÓ2GÓH‘�
Ø˜jÒ(Ð(Ð(Ø�q‘�ð øô !ò ÙðúØ÷÷ ñ ú÷ ÷ ñ úô 
Ó	ð  6Ü˜+ v§{¡{Ð3Ó4ðØ8>Ø—‘œvŸ}™}¨SÓ1Ó2ˆØˆØ%ò 	‰OˆE�8Ø�O‰O˜EÔ"Ü Ÿ-™-¨¨h×.AÑ.AÓ.CÓD‰KˆJØ˜*Ò$Ð$Ð$Ø�1‰H‰Cñ		÷	÷ ñ ú÷ ÷ ñ úð �xÒÐÑsl   �C§(C ÁAB'Â&C Â'	B3Â0C Â2B3Â3C Â7	CÃ C		ÃCÃCÃ+FÄA4FÅ8	FÆF
	ÆFÆFc                  ó"  — t         j                  j                  t        j                  g d¢«      gdg¬«      } t         j                  j                  t         j                  j                  j                  ¬«      }t        |¬«      5 }t        d|j                  f«      5 }|j                  t        j                  d«      «      }|j                  «       }|j                  | «      sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)	z2Try a simple do_get call with V4 metadata version.r7   rZ   r<   rµ  rw   rÝ   r   N)r>   r@   rA   r?   r¹  rº  r»  r¼  r„   r   rª  r{   r
   rH  r±   r’   )rz   rf   r’  r¤  r›   rB   s         r   Útest_flight_do_get_metadata_v4rt  6  sØ   € ä�H‰H× Ñ Ü	�‰Ò%Ó	&Ð'°¨uð !ó 6€Eä�f‰f×$Ñ$ÜŸ™×/Ñ/×2Ñ2ð %ó 4€Gä	 gÔ	.ð "°&Ü˜+ v§{¡{Ð3Ó4ð"Ø8>Ø—‘œvŸ}™}¨SÓ1Ó2ˆØ�‰Ó ˆØ�{‰{˜5Ô!Ð!Ñ!÷	"÷ "÷ "ñ "ú÷ "ð "ús%   ÂDÂAC9Ã(DÃ9D	Ã>DÄDc            	      óÎ  — t        j                  g d¢«      g} t         j                  j                  | dg¬«      }t	        «       5 }t        d|j                  f«      5 }|j                  t        j                  j                  d«      |j                  «      \  }}|5  t        |j                  d¬«      «      D ]n  \  }}t        j                  d|«      }|j!                  ||«       |j#                  «       }	|	€J ‚t        j$                  d|	j'                  «       «      \  }
||
k(  rŒnJ ‚ 	 d	d	d	«       d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
z'Try a simple do_put call with metadata.r7   rZ   r<   rÝ   rõ   rK   rº   rŽ   N)r>   r?   r@   rA   r„   r   rª  r¢   r
   rp   rq   ro   r¤   r¥   r”   r˜   rV  r'   r•   r–   )rB   rz   r’  r¤  rœ   Úmetadata_readerr¦   rŸ   rj  r    rk  s              r   Útest_flight_do_put_metadatarw  C  sM  € ô 	�‰Ò$Ó%ð€Dô �H‰H× Ñ  ¨c¨UÐ Ó3€Eä	Ó	ð ) 6Ü˜+ v§{¡{Ð3Ó4ð)Ø8>Ø"(§-¡-Ü×#Ñ#×,Ñ,¨RÓ0Ø�L‰Ló#Ñˆ�ð ñ 	)Ü'¨×(8Ñ(8ÀqÐ(8Ó(IÓJò )‘
��UÜ!Ÿ;™; t¨SÓ1�Ø×*Ñ*¨5°(Ô;Ø%×*Ñ*Ó,�Ø�Ð&�Ü$Ÿm™m¨D°#·.±.Ó2BÓC‘�
Ø˜jÓ(Ð(Ð(ñ)÷	)÷)÷ )ð )÷
	)ð 	)ú÷)ð )ú÷ )ð )úsC   ÁEÁ?EÂB	EÄ&EÄ*EÄ2EÅEÅEÅE	ÅEÅE$c            	      óö  — t         j                  j                  t        j                  t	        j
                  dt	        j                  «       ¬«      «      gdg¬«      } t        «       5 }t        d|j                  fd¬«      5 }|j                  t        j                  j                  d«      | j                  «      \  }}|5  t        j                   t        j"                  d	¬
«      5 }|j%                  | «       ddd«       j&                  j(                  dk(  sJ ‚| j+                  dd«      | j+                  d«      g}|D ]  }|j%                  |«       Œ 	 ddd«       t         j,                  j/                  | g«      }|j1                  t        j2                  d«      «      j5                  «       }	||	k(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒÓxY w# 1 sw Y   Œ€xY w# 1 sw Y   Œ*xY w# 1 sw Y   yxY w)z+Try a simple do_put call with a size limit.i   )ÚdtyperZ   r<   rÝ   i   )Úwrite_size_limit_bytesrõ   zexceeded soft limitr·  Nr   i€  r   )r>   r“   rA   r?   ÚnpÚonesr6  rª   r   rª  r¢   r
   rp   rq   ro   rI  rJ  ÚFlightWriteSizeExceededErrorrW  rd  ÚlimitÚslicer@   rh  r{   rH  r±   )
Úlarge_batchr’  r¤  rœ   rv  ÚexcinfoÚsmaller_batchesrŸ   r  Úactuals
             r   Útest_flight_do_put_limitr„  Y  sÁ  € ô —.‘.×,Ñ,Ü
�‰”—‘˜¤B§H¡H£JÔ/Ó0ð.àˆUð -ó €Kô 
Ó	ð "˜vÜ�k 6§;¡;Ð/Ø,0ô	2ð"à5;Ø"(§-¡-Ü×#Ñ#×,Ñ,¨RÓ0Ø×Ñó# Ñˆ�ð ñ 
	*Ü—‘œv×BÑBØ%:ô<ð 0Ø?FØ×"Ñ" ;Ô/÷0ð —=‘=×&Ñ&¨$Ò.Ð.Ð.à×!Ñ! ! SÓ)Ø×!Ñ! #Ó&ðˆOð )ò *�Ø×"Ñ" 5Õ)ñ*÷
	*ô —8‘8×(Ñ(¨+¨Ó7ˆØ—‘œvŸ}™}¨SÓ1Ó2×;Ñ;Ó=ˆØ˜6Ò!Ð!Ñ!÷'"÷ "ð "÷0ð 0ú÷
	*ð 
	*ú÷"ð "ú÷ "ð "úsV   Á(G/Â?G#Ã&GÃ'G	Ã9AGÅA!G#Æ:G/ÇGÇGÇG ÇG#Ç#G,	Ç(G/Ç/G8c                  ó–  — t        «       5 } t        d| j                  f«      5 }|j                  t	        j
                  d«      «      }|j                  «        t        j                  t        j                  d¬«      5  |j                  «        ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z4Test canceling a DoGet operation on the client side.rÝ   r`   z(?i).*cancel.*r·  N)r^   r   rª  r{   r
   rH  r'  rI  rJ  r.  rn  )r’  r¤  r›   s      r   Útest_cancel_do_getr†  v  s§   € ô 
Ó	ð   6Ü˜+ v§{¡{Ð3Ó4ð Ø8>Ø—‘œvŸ}™}¨WÓ5Ó6ˆØ�‰ŒÜ�]‰]œ6×6Ñ6Ø!1ô3ñ 	 à×ÑÔ÷	 ÷	 ÷  ð  ÷	 ð 	 ú÷	 ð  ú÷  ð  ús;   ‹B?£AB3Á=B'ÂB3ÂB?Â'B0Â,B3Â3B<	Â8B?Â?Cc                  óÈ  ‡‡‡‡‡— t        «       5 } t        d| j                  f«      5 }|j                  t	        j
                  d«      «      Št        j                  «       Št        j                  «       Št        j                  «       Št        j                  «       Šˆˆˆˆˆfd„}t        j                  |d¬«      }|j                  «        ‰j                  d¬«       ‰j                  «        ‰j                  «        |j                  d¬«       ‰5  ‰j                  «       sJ ‚	 d	d	d	«       d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
z5Test canceling a DoGet operation from another thread.rÝ   r`   c                  ó  •— ‰j                  «        ‰j                  «        ‰j                  d¬«       	 ‰j                  «        y # t        j                  $ r+ ‰5  ‰ j                  «        d d d «       Y y # 1 sw Y   Y y xY ww xY w)Nr9   rž  )rn  ÚsetÚwaitr
   r.  )Úraised_proper_exceptionÚread_first_messager›   Úresult_lockÚstream_canceleds   €€€€€r   Ú
block_readz/test_cancel_do_get_threaded.<locals>.block_read�  sv   ø€ Ø×ÑÔØ×"Ñ"Ô$Ø× Ñ ¨Ð Ô+ð2Ø×!Ñ!Õ#øÜ×.Ñ.ò 2Ø ñ 2Ø+×/Ñ/Ô1÷2÷ 2ó 2úð2ús)   µA ÁBÁA6Á,BÁ6B 	Á;BÂ BTr›  r9   rž  rK   N)r  r   rª  r{   r
   rH  r   ÚEventÚLockr¡  r¢  rŠ  r'  r‰  ÚjoinÚis_set)	r’  r¤  r�  r¥  r‹  rŒ  r›   r�  rŽ  s	       @@@@@r   Útest_cancel_do_get_threadedr”  ‚  s  ü€ ô 
Ó	ð 4˜vÜ˜+ v§{¡{Ð3Ó4ð4Ø8>Ø—‘œvŸ}™}¨WÓ5Ó6ˆä&Ÿ_™_Ó.ÐÜ#Ÿ/™/Ó+ˆÜ—n‘nÓ&ˆÜ"+§/¡/Ó"3Ð÷	2ð 	2ô ×!Ñ!¨¸DÔAˆØ�‰ŒØ×Ñ¨ÐÔ*Ø�‰ŒØ×ÑÔØ�‰˜AˆÔàñ 	4Ø*×1Ñ1Ô3Ð3Ñ3÷	4÷54÷ 4ð 4÷4	4ð 	4ú÷54ð 4ú÷ 4ð 4ús;   �E¨C+EÄE Ä'EÄ/EÅ E	ÅEÅE	ÅEÅE!c                  ó  — t        «       5 } t        d| j                  f«      5 }|j                  t	        j
                  dd«      «      }t        |«      j                  dk(  sJ ‚~d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)NrÝ   rÜ  r   r<  )rÔ  r   rª  rË   r
   rE  r%  rß  )r’  r¤  rä  s      r   Útest_streaming_do_actionr–  ¤  s~   € Ü	Ó	ð  Ü˜+ v§{¡{Ð3Ó4ðØ8>Ø×"Ñ"¤6§=¡=°¸CÓ#@ÓAˆÜ�G‹}×!Ñ! VÒ+Ð+Ð+à÷÷ ÷ ñ ú÷ ð ús#   ‹B£AA5Á$BÁ5A>	Á:BÂB
c                  ó 	  — t        j                  dd«      } | t         j                  j                  | j                  «       «      k(  sJ ‚t        j                  d«      }|t         j                  j                  |j                  «       «      k(  sJ ‚t        j
                  d«      }|t         j
                  j                  |j                  «       «      k(  sJ ‚t        j                  dd«      }|t         j                  j                  |j                  «       «      k(  sJ ‚t        j                  t        j                  dt        j                  «       fg«      «      }|t         j                  j                  |j                  «       «      k(  sJ ‚t         j                  j                  d«      }|t         j                  j                  |j                  «       «      k(  sJ ‚t         j                  j                  dd	d
«      }|t         j                  j                  |j                  «       «      k(  sJ ‚t        j                  t        j                  dt        j                  «       fg«      |t        j                  ddg«      t        j                  dt         j                   j#                  dd«      gt        j$                  d«      j'                  t        j(                  d«      «      d«      gdddd«      }t         j                  j                  |j                  «       «      }|j                  |j                  k(  sJ ‚|j*                  |j*                  k(  sJ ‚|j,                  |j,                  k(  sJ ‚|j.                  |j.                  k(  sJ ‚|j0                  |j0                  k(  sJ ‚|j2                  |j2                  k(  sJ ‚|j4                  |j4                  k(  sJ ‚t        j                  |dt         j                   j#                  dd«      gt        j$                  d«      j'                  t        j(                  d«      «      d«      }|t         j                  j                  |j                  «       «      k(  sJ ‚y)z(Make sure serializable types round-trip.Úaction1s   action1-bodyrE   s   result1Ú	username1Ú	password1rZ   rÁ  r[   z
test.arrowr   rÜ   rÝ   rÞ   rß   rà   r?  rK   rá   Tr@  r=  r>  N)r
   rE  rq  rƒ  rH  rG  rp  rì   r>   ro   râ   rp   rF  rq   rn   rã   rä   rå   ræ   rç   rè   rš   rz  rw  r|  rU  rÌ  )	rÊ   rx   re  r€  Úschema_resultÚdescrí   Úinfo2rW  s	            r   Útest_roundtrip_typesrž  ­  s�  € ä�]‰]˜9 oÓ6€FØ”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Ñ5°j×6JÑ6JÓ6LÓMÒMÐMÐMä×'Ñ'¬¯	©	°C¼¿¹»Ð3DÐ2EÓ(FÓG€MØœF×/Ñ/×;Ñ;Ø×ÑÓ!ó#ò #ð #ð #ô ×"Ñ"×.Ñ.¨vÓ6€DØ”6×*Ñ*×6Ñ6°t·~±~Ó7GÓHÒHÐHÐHä×"Ñ"×+Ñ+¨C°°lÓC€DØ”6×*Ñ*×6Ñ6°t·~±~Ó7GÓHÒHÐHÐHä×ÑÜ
�	‰	�CœŸ™›Ð$Ð%Ó&Øä×!Ñ! #¨ Ó7Ü×!Ñ!ØÜ—‘×-Ñ-¨k¸4Ó@Ð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Ü
�	‰	Ð'Ó(×-Ñ-¬b¯l©l¸3Ó.?Ó@Ø ó	€Hð ”v×,Ñ,×8Ñ8¸×9KÑ9KÓ9MÓNÒNÐNÑNr   c                  ó’  — t        «       5 } t        d| j                  f«      5 }t         j                  «       j	                  «       D ]S  \  }}t        j                  |d¬«      5  t        |j                  t        j                  |d«      «      «       ddd«       ŒU t        j                  t        j                  d¬«      5  t        |j                  «       «       ddd«       t        j                  g d¢«      g}t        j                  j!                  |dg¬«      }t        j                  t        j"                  t        j$                  t        j&                  t        j(                  d	œ}|j	                  «       D ]î  \  }}t        j                  |d¬«      5  |j+                  t        j,                  j/                  |«      |j0                  «      \  }	}
|	j3                  |«       |	j5                  «        ddd«       t        j                  |d¬«      5  |j+                  t        j,                  j/                  |«      |j0                  «      \  }	}
|	j5                  «        ddd«       Œð 	 ddd«       ddd«       y# 1 sw Y   �ŒBxY w# 1 sw Y   �Œ²xY w# 1 sw Y   Œ£xY w# 1 sw Y   �Œ3xY w# 1 sw Y   ŒExY w# 1 sw Y   yxY w)
z:Ensure that Flight errors propagate from server to client.rÝ   z.*foo.*r·  r   Nr7   rZ   r<   )r%  r&  r'  r(  r)  )r#  r   rª  r3  r‚  rI  rJ  r«  rË   r
   rE  r,  ru   r>   r?   r@   rA   r-  r.  r/  r0  r¢   rp   rF  ro   rN  r°  )r’  r¤  ÚargÚexc_typerB   rz   Ú
exceptionsr:  Ú	exceptionrœ   r›   s              r   Útest_roundtrip_errorsr¤  è  sJ  € ä	Ó	ð ! Ü˜+ v§{¡{Ð3Ó4ð!Ø8>ä.×:Ñ:Ó<×BÑBÓDò 	@‰MˆC�Ü—‘˜x¨yÔ9ñ @Ü�V×%Ñ%¤f§m¡m°C¸Ó&=Ó>Ô?÷@ð @ð	@ô �]‰]œ6×5Ñ5¸YÔGñ 	(Ü�×$Ñ$Ó&Ô'÷	(ô —‘Ò,Ó-Ð.ˆÜ—‘×$Ñ$ T°#°Ð$Ó7ˆô ×2Ñ2Ü×2Ñ2Ü×1Ñ1Ü%×@Ñ@Ü"×:Ñ:ñ
ˆ
ð #-×"2Ñ"2Ó"4ò 	ÑˆG�Yä—‘˜y°	Ô:ñ Ø!'§¡Ü×+Ñ+×7Ñ7¸Ó@Ø—L‘Ló""‘�˜ð ×"Ñ" 5Ô)Ø—‘”÷ô —‘˜y°	Ô:ñ Ø!'§¡Ü×+Ñ+×7Ñ7¸Ó@Ø—L‘Ló""‘�˜ð —‘”÷	ð ñ	÷)!÷ !ð !÷@ñ @ú÷	(ñ 	(ú÷ ð ú÷ñ ú÷;!ð !ú÷ !ð !ús†   ‹J=£A J1Á#/I>	Â/J1ÃJÃB=J1ÆAJ	Ç6J1ÈAJ$	É"
J1É-J=É>JÊJ1ÊJÊJ1ÊJ!ÊJ1Ê$J.Ê)J1Ê1J:	Ê6J=Ê=Kc                  ó  ‡‡— t        j                  g d¢«      g} t         j                  j                  | dg¬«      }t	        «       5 }t        d|j                  f«      5 }|j                  t        j                  j                  d«      |j                  «      \  }ŠdgŠˆˆfd„}t        j                  |¬«      }|j                  «        |j                  d	¬
«      }|5  t!        |«      D ]-  \  }}	t#        j$                  d|«      }
|j'                  |	|
«       Œ/ |j)                  «        |j+                  «        ddd«       ‰d   t-        |«      k(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   Œ.xY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z7Ensure that separate threads can read/write on a DoPut.r7   rZ   r<   rÝ   rõ   r   c                  ód   •— ‰j                  «       �‰ dxx   dz  cc<   ‰j                  «       �Œy y )Nr   rK   )r'   )Úcountrv  s   €€r   Ú_reader_threadz:test_do_put_independent_read_write.<locals>._reader_thread   s0   ø€ Ø!×&Ñ&Ó(Ð4Ø�a“˜A‘“ð "×&Ñ&Ó(Ó4r   ©rœ  rK   rº   rŽ   N)r>   r?   r@   rA   r„   r   rª  r¢   r
   rp   rq   ro   r   r¡  r¢  r¥   r¤   r”   r˜   rV  Údone_writingr’  r¬  )rB   rz   r’  r¤  rœ   r¨  r¥  ri  r¦   rŸ   rj  r§  rv  s              @@r   Ú"test_do_put_independent_read_writer«    sj  ù€ ô 	�‰Ò$Ó%ð€Dô �H‰H× Ñ  ¨c¨UÐ Ó3€Eä	Ó	ð ( 6Ü˜+ v§{¡{Ð3Ó4ð(Ø8>Ø"(§-¡-Ü×#Ñ#×,Ñ,¨RÓ0Ø�L‰Ló#Ñˆ�ð �ˆõ	ô ×!Ñ!¨Ô8ˆØ�‰Œà×"Ñ"°Ð"Ó3ˆØñ 	Ü'¨Ó0ò <‘
��UÜ!Ÿ;™; t¨SÓ1�Ø×*Ñ*¨5°(Õ;ð<ð ×ÑÔ!à�K‰KŒM÷	ð �Q‰xœ3˜w›<Ò'Ð'Ñ'÷5(÷ (ð (÷ 	ð 	ú÷!(ð (ú÷ (ð (ús>   ÁF ÁB E4ÃAE(Ä;E4ÅF Å(E1Å-E4Å4E=	Å9F Æ F	c            
      óx  — t        dt        «       i¬«      5 } t        d| j                  f«      5 }t	        |j                  t        j                  dd«      «      «      }t        |«      dk(  sJ ‚|d   j                  j                  «       }d|k(  sJ ‚	 d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
z@Ensure that server middleware run on the same thread as the RPC.rÁ  rD  rÝ   r  r   rK   r   s   right valueN)ró  rð  r   rª  r«  rË   r
   rE  r¬  rß  r–   )r’  r¤  rä  rd  s       r   Ú"test_server_middleware_same_threadr­  5  s±   € ä	ØÔ-Ó/ð(ô 
ð 'à
Ü˜+ v§{¡{Ð3Ó4ð'ð 9?Ü�v×'Ñ'¬¯©°g¸sÓ(CÓDÓEˆÜ�7‹|˜qÒ Ð Ð Ø˜‘
—‘×*Ñ*Ó,ˆØ Ò&Ð&Ñ&÷'÷ '÷ 'ñ 'ú÷ 'ð 'ús#   —B0¯A#B$ÂB0Â$B-	Â)B0Â0B9c                  ó   — t        dt        «       i¬«      5 } t        d| j                  f«      5 }t	        j
                  t        j                  «      5  t        |j                  «       «       ddd«       t	        j
                  t        j                  «      5  t        |j                  t        j                  dd«      «      «       ddd«       t        d| j                  ft        «       g¬«      }t        |j                  t        j                  dd«      «      «      }d|j                   j#                  «       k(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒäxY w# 1 sw Y   Œ–xY w# 1 sw Y   Œ*xY w# 1 sw Y   yxY w)z-Test rejecting an RPC with server middleware.rÁ  rD  rÝ   Nr   r4  )ró  rû  r   rª  rI  rJ  r>   ÚArrowNotImplementedErrorr«  r¾   r
   r/  rË   rE  r  r%  rß  r–   )r’  r¤  Úresponses      r   Útest_middleware_rejectr±  A  s=  € ä	ØÔ4Ó6ð(ô 
ð 9à
Ü˜+ v§{¡{Ð3Ó4ð9ð 9?ä�]‰]œ2×6Ñ6Ó7ñ 	(Ü�×$Ñ$Ó&Ô'÷	(ô �]‰]œ6×<Ñ<Ó=ñ 	<Ü�×!Ñ!¤&§-¡-°°SÓ"9Ó:Ô;÷	<ô Ø˜&Ÿ+™+Ð&Ü<Ó>Ð?ô
ˆô ˜×(Ñ(¬¯©°s¸CÓ)@ÓAÓBˆØ˜hŸm™m×6Ñ6Ó8Ò8Ð8Ñ8÷#9÷ 9ð 9÷
	(ð 	(ú÷	<ð 	<ú÷9ð 9ú÷ 9ð 9úsS   —E4¯$E(ÁEÁ-+E(Â/EÃA7E(Ä?E4ÅEÅE(ÅE%Å!E(Å(E1	Å-E4Å4E=c                  óÜ  — t        «       } t        «       }t        d| i¬«      5 }t        d|j                  f|g¬«      5 }t
        j                  j                  d«      }t        j                  t        «      5  t        |j                  «       «       ddd«       t        j                  t        «      5  |j                  |«       ddd«       t        j                  t        «      5  |j                  |«       ddd«       t        j                  t        «      5  |j                  t        j                   d«      «       ddd«       t        j                  t        «      5  |j#                  |t%        j&                  g «      «      \  }}|j)                  «        ddd«       t        j                  t        «      5  t        |j+                  t        j,                  dd«      «      «       ddd«       t        j                  t        «      5  t        |j/                  «       «       ddd«       t        j                  t        «      5  |j1                  |«      \  }}|j)                  «        ddd«       t
        j2                  j4                  t
        j2                  j6                  t
        j2                  j8                  t
        j2                  j:                  t
        j2                  j<                  t
        j2                  j>                  t
        j2                  j@                  t
        j2                  jB                  g}| jD                  |k(  sJ ‚|jD                  |k(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   �ŒßxY w# 1 sw Y   �Œ¹xY w# 1 sw Y   �Œ“xY w# 1 sw Y   �ŒZxY w# 1 sw Y   �ŒxY w# 1 sw Y   �ŒÊxY w# 1 sw Y   �ŒœxY w# 1 sw Y   �ŒcxY w# 1 sw Y   ŒzxY w# 1 sw Y   yxY w)z/Test that middleware records methods correctly.rÁ  rD  rÝ   r   N)#r  r  r   r   rª  r
   rp   rF  rI  rJ  rÈ   r«  ru   rê   rî   r{   rH  r¢   r>   ro   r°  rË   rE  r¾   rµ   rÿ  ÚLIST_FLIGHTSÚGET_FLIGHT_INFOÚ
GET_SCHEMAÚDO_GETÚDO_PUTÚ	DO_ACTIONr   ÚDO_EXCHANGEr  )Úserver_middlewareÚclient_middlewarer’  r¤  rš   rœ   rö  r  s           r   Útest_middleware_mappingr¼  W  sù  € ä8Ó:ÐÜ8Ó:ÐÜ	 fÐ.?Ð%@Ô	Að %5ÀVÜØ˜&Ÿ+™+Ð&Ø)Ð*ô	ð%5ð 
ä×,Ñ,×8Ñ8¸Ó=ˆ
Ü�]‰]Ô.Ó/ñ 	(Ü�×$Ñ$Ó&Ô'÷	(ä�]‰]Ô.Ó/ñ 	/Ø×"Ñ" :Ô.÷	/ä�]‰]Ô.Ó/ñ 	*Ø×Ñ˜jÔ)÷	*ä�]‰]Ô.Ó/ñ 	.Ø�M‰Mœ&Ÿ-™-¨Ó,Ô-÷	.ä�]‰]Ô.Ó/ñ 	ØŸ™ j´"·)±)¸B³-Ó@‰IˆF�AØ�L‰LŒN÷	ô �]‰]Ô.Ó/ñ 	<Ü�×!Ñ!¤&§-¡-°°SÓ"9Ó:Ô;÷	<ä�]‰]Ô.Ó/ñ 	(Ü�×$Ñ$Ó&Ô'÷	(ä�]‰]Ô.Ó/ñ 	Ø×*Ñ*¨:Ó6‰IˆF�AØ�L‰LŒN÷	ô
 ×Ñ×,Ñ,Ü×Ñ×/Ñ/Ü×Ñ×*Ñ*Ü×Ñ×&Ñ&Ü×Ñ×&Ñ&Ü×Ñ×)Ñ)Ü×Ñ×,Ñ,Ü×Ñ×+Ñ+ð	
ˆð !×(Ñ(¨HÒ4Ð4Ð4Ø ×(Ñ(¨HÒ4Ð4Ñ4÷K%5÷ %5ð %5÷	(ñ 	(ú÷	/ñ 	/ú÷	*ñ 	*ú÷	.ñ 	.ú÷	ñ 	ú÷	<ñ 	<ú÷	(ñ 	(ú÷	ñ 	ú÷-%5ð %5ú÷ %5ð %5úsã   £O"¾9OÁ7M.Â!OÂ2M;Ã!OÃ%NÃ7!OÄ%NÄ=!OÅ9N"Æ!OÆ8/N/Ç'!OÈN<È"!OÉ%O	É(C4OÍO"Í.M8Í3OÍ;NÎ OÎNÎOÎNÎOÎ"N,Î'OÎ/N9Î4OÎ<OÏOÏ	OÏOÏO	ÏO"Ï"O+c            
      ó‚  — t        «       5 } t        d| j                  f«      5 }	 t        |j	                  t        j                  dd«      «      «       J ‚# t
        j                  $ r+}|j                  €J ‚|j                  }|dk(  sJ ‚Y d }~nd }~ww xY w	 d d d «       n# 1 sw Y   nxY wd d d «       y # 1 sw Y   y xY w)NrÝ   r5  r   r6  )	r#  r   rª  r«  rË   r
   rE  r0  Ú
extra_info)r’  r¤  ÚeÚeis       r   Útest_extra_inforÁ  ƒ  s³   € Ü	Ó	ð 5 Ü˜+ v§{¡{Ð3Ó4ð5Ø8>ð	5Ü�×!Ñ!¤&§-¡-°
¸CÓ"@ÓAÔBØ�5øÜ×-Ñ-ò 	5Ø—<‘<Ð+Ð+Ð+Ø—‘ˆBØÐ4Ò4Ð4Õ4ûð	5úð 5÷5÷ 5ñ 5ú÷ 5÷ 5ñ 5úsE   ‹B5£B ¥0AÁBÁ(!BÂ	B ÂBÂB Â	B5Â B)	Â%B5Â5B>c                  ó¸  — t        «       } t        «       }t        | d   d   gd| d   ¬«      5 }t        d|j                  f| d   | d   d   j
                  | d   d   j                  ¬«      5 }|j                  t        j                  d«      «      j                  «       }|j                  |«      sJ ‚	 d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)
z!Test mutual TLS (mTLS) with gRPC.r3   r   Tr2   )rU  Úverify_clientÚroot_certificatesrÝ   )r[  Ú
cert_chainÚprivate_keyr`   N)r5   rC   r^   r   rª  r0   r1   r{   r
   rH  r±   r’   )rX  rz   r>  r¤  rB   s        r   Ú	test_mtlsrÇ  �  sà   € ô Ó€EÜÓ€Eä	Ø# NÑ3°AÑ6Ð7ØØ# KÑ0ô
2ð 
"ð 67ÜØ˜!Ÿ&™&Ð!Ø  Ñ-Ø˜^Ñ,¨QÑ/×4Ñ4Ø˜nÑ-¨aÑ0×4Ñ4ô		6ð	
"ð :@Ø�}‰}œVŸ]™]¨7Ó3Ó4×=Ñ=Ó?ˆØ�{‰{˜5Ô!Ð!Ñ!÷
"÷ 
"÷ 
"ñ 
"ú÷ 
"ð 
"ús$   ­?CÁ,ACÂ3CÃC	Ã	CÃCc                  óÞ  — t         j                  j                  t        j                  t	        dd«      «      gdg¬«      } t        «       5 }t        d|j                  f«      5 }t        j                  j                  d«      }|j                  |«      \  }}|5  |j                  «       }ddd«       | k(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   Œ"xY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)rK  r   rL  rZ   r<   rÝ   r@  N)r>   r@   rA   r?   r  r<  r   rª  r
   rp   rF  rµ   r±   )r  r’  r¤  rš   rœ   r›   rz   s          r   Útest_doexchange_getrÉ  ¢  sá   € ä�x‰x×#Ñ#Ü
�‰”�q˜)Ó$Ó%ð%àˆUð $ó €Hô 
Ó	ð ! 6Ü˜+ v§{¡{Ð3Ó4ð!Ø8>Ü×,Ñ,×8Ñ8¸Ó@ˆ
Ø×+Ñ+¨JÓ7‰ˆ�Øñ 	&Ø—O‘OÓ%ˆE÷	&à˜5Ò Ð Ñ ÷!÷ !ð !÷	&ð 	&ú÷	!ð !ú÷ !ð !ús<   ÁC#Á#6CÂCÂ*CÂ:C#ÃCÃCÃC 	ÃC#Ã#C,c                  ó4  — t         j                  j                  t        j                  t	        dd«      «      gdg¬«      } | j                  d¬«      }t        «       5 }t        d|j                  f«      5 }t        j                  j                  d«      }|j                  |«      \  }}|5  |j                  | j                  «       |D ]  }|j                  |«       Œ |j!                  «        |j#                  «       }|j$                  �J ‚t'        t)        |«      «      j+                  d
«      }	|j,                  |	k(  sJ ‚|j.                  j0                  dk(  sJ ‚	 d	d	d	«       d	d	d	«       d	d	d	«       y	# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   y	xY w)rP  r   rL  rZ   r<   é   rº   rÝ   rA  NrÃ   )r>   r@   rA   r?   r  r¥   r<  r   rª  r
   rp   rF  rµ   rM  ro   rW  rª  rn  rB   rR  r¬  rÇ   rU  r�   r‘   )
rB   ri  r’  r¤  rš   rœ   r›   rŸ   r´   Úexpected_bufs
             r   Útest_doexchange_putrÍ  ±  ss  € ä�8‰8×ÑÜ
�‰”�q˜)Ó$Ó%ð!àˆUð  ó €Dð �o‰o¨CˆoÓ0€Gä	Ó	ð 2 6Ü˜+ v§{¡{Ð3Ó4ð2Ø8>Ü×,Ñ,×8Ñ8¸Ó@ˆ
Ø×+Ñ+¨JÓ7‰ˆ�Øñ 
	2Ø�L‰L˜Ÿ™Ô%Ø ò *�Ø×"Ñ" 5Õ)ð*à×ÑÔ!Ø×%Ñ%Ó'ˆEØ—:‘:Ð%Ð%Ð%Üœs 7›|Ó,×3Ñ3°GÓ<ˆLØ×%Ñ%¨Ò5Ð5Ð5à—<‘<×,Ñ,°Ò1Ð1Ñ1÷
	2÷	2÷ 2ð 2÷
	2ð 
	2ú÷	2ð 2ú÷ 2ð 2ús=   ÁFÁ56FÂ+B1E6ÅFÅ%FÅ6E?Å;FÆF	ÆFÆFc                  ó  — t         j                  j                  t        j                  t	        dd«      «      gdg¬«      } | j                  d¬«      }t        «       5 }t        d|j                  f«      5 }t        j                  j                  d«      }|j                  |«      \  }}|5  t	        d	«      D ]\  }t        |«      j                  d
«      }|j                  |«       |j!                  «       }	|	j"                  �J ‚|	j$                  |k(  rŒ\J ‚ |j'                  | j(                  «       d}
|D ]}  }|j+                  |«       |j(                  | j(                  k(  sJ ‚|j!                  «       }	|	j"                  |k(  sJ ‚|	j$                  �J ‚|
dz  }
|j,                  j.                  |
k(  rŒ}J ‚ t1        |«      D ]ƒ  \  }}t        |«      j                  d
«      }|j3                  ||«       |j!                  «       }	|	j"                  |k(  sJ ‚|	j$                  |k(  sJ ‚|
dz  }
|j,                  j.                  |
k(  rŒƒJ ‚ 	 ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)zTry a DoExchange echo server.r   rL  rZ   r<   rË  rº   rÝ   r?  r:   rÃ   NrK   )r>   r@   rA   r?   r  r¥   r<  r   rª  r
   rp   rF  rµ   rR  rÇ   rQ  rn  rB   rU  rM  ro   rW  r�   r™   r¤   rV  )rB   ri  r’  r¤  rš   rœ   r›   Úir    r´   rS  rŸ   s               r   Útest_doexchange_echorÐ  É  s}  € ä�8‰8×ÑÜ
�‰”�q˜)Ó$Ó%ð!àˆUð  ó €Dð �o‰o¨CˆoÓ0€Gä	Ó	ð !F 6Ü˜+ v§{¡{Ð3Ó4ð!FØ8>Ü×,Ñ,×8Ñ8¸ÓAˆ
Ø×+Ñ+¨JÓ7‰ˆ�Øñ 	Fä˜2“Yò 1�Ü˜!“f—m‘m GÓ,�Ø×%Ñ% cÔ*Ø×)Ñ)Ó+�Ø—z‘zÐ)Ð)Ð)Ø×)Ñ)¨SÓ0Ð0Ð0ð1ð �L‰L˜Ÿ™Ô%ØˆKØ ò F�Ø×"Ñ" 5Ô)Ø—}‘}¨¯©Ò3Ð3Ð3Ø×)Ñ)Ó+�Ø—z‘z UÒ*Ð*Ð*Ø×)Ñ)Ð1Ð1Ð1Ø˜qÑ �Ø—|‘|×6Ñ6¸+ÓEÐEÐEðFô & gÓ.ò F‘��5Ü˜!“f—m‘m GÓ,�Ø×*Ñ*¨5°#Ô6Ø×)Ñ)Ó+�Ø—z‘z UÒ*Ð*Ð*Ø×)Ñ)¨SÒ0Ð0Ð0Ø˜qÑ �Ø—|‘|×6Ñ6¸+ÓEÐEÐEñF÷-	F÷	!F÷ !Fð !F÷	Fð 	Fú÷	!Fð !Fú÷ !Fð !FúsQ   ÁI8Á56I,Â+A'I ÄBI Æ2BI ÉI ÉI,ÉI8É I)É%I,É,I5	É1I8É8Jc                  óZ  — t         j                  j                  t        j                  t	        dd«      «      gdg¬«      } | j                  d¬«      }t         j                  j                  t         j                  j                  j                  ¬«      }t        |¬«      5 }t        d	|j                  f«      5 }t        j                  j                  d
«      }|j!                  |«      \  }}|5  |j#                  | j$                  |¬«       |D ]]  }|j'                  |«       |j$                  | j$                  k(  sJ ‚|j)                  «       }	|	j*                  |k(  sJ ‚|	j,                  €Œ]J ‚ 	 ddd«       ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z;Try a DoExchange echo server using the V4 metadata version.r   rL  rZ   r<   rË  rº   rµ  rw   rÝ   r?  N)r>   r@   rA   r?   r  r¥   r¹  rº  r»  r¼  r<  r   rª  r
   rp   rF  rµ   rM  ro   rW  rn  rB   rU  )
rB   ri  rf   r’  r¤  rš   rœ   r›   rŸ   r´   s
             r   Útest_doexchange_echo_v4rÒ  ô  s~  € ä�8‰8×ÑÜ
�‰”�q˜)Ó$Ó%ð!àˆUð  ó €Dð �o‰o¨CˆoÓ0€Gä�f‰f×$Ñ$ÜŸ™×/Ñ/×2Ñ2ð %ó 4€Gä	 gÔ	.ð 2°&Ü˜+ v§{¡{Ð3Ó4ð2Ø8>Ü×,Ñ,×8Ñ8¸ÓAˆ
Ø×+Ñ+¨JÓ7‰ˆ�Øñ 	2à�L‰L˜Ÿ™¨gˆLÔ6Ø ò 2�Ø×"Ñ" 5Ô)Ø—}‘}¨¯©Ò3Ð3Ð3Ø×)Ñ)Ó+�Ø—z‘z UÒ*Ð*Ð*Ø×)Ñ)Ñ1Ð1Ð1ñ2÷	2÷	2÷ 2ð 2÷	2ð 	2ú÷	2ð 2ú÷ 2ð 2úsC   Â!F!Â96FÃ/A<F	Å,F	Å0FÅ8F!Æ	FÆFÆF	ÆF!Æ!F*c            
      óR  — t         j                  j                  t        j                  t	        dd«      «      t        j                  t	        dd«      «      t        j                  t	        dd«      «      gg d¢¬«      } t         j                  j                  t        j                  t	        d	d
d	«      «      gdg¬«      }t        «       5 }t        d|j                  f«      5 }t        j                  j                  d«      }|j                  |«      \  }}|5  |j                  | j                  «       |j                  | «       |j                  «        |j!                  «       }ddd«       |k(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   Œ"xY w# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z!Transform a table with a service.r   r¹   rK   i  rL   i  )rZ   r[   Úcr<   rM   i  rZ  rÝ   rB  N)r>   r@   rA   r?   r  r<  r   rª  r
   rp   rF  rµ   rM  ro   rN  rª  r±   )rB   r  r’  r¤  rš   rœ   r›   rz   s           r   Útest_doexchange_transformrÕ  	  sj  € ä�8‰8×ÑÜ
�‰”�q˜$“Ó Ü
�‰”�q˜$“Ó Ü
�‰”�q˜$“Ó ð!ò ð	  ó €Dô
 �x‰x×#Ñ#Ü
�‰”�q˜,¨Ó*Ó+ð%àˆWð $ó €Hô 
Ó	ð 	! 6Ü˜+ v§{¡{Ð3Ó4ð	!Ø8>Ü×,Ñ,×8Ñ8¸ÓFˆ
Ø×+Ñ+¨JÓ7‰ˆ�Øñ 	&Ø�L‰L˜Ÿ™Ô%Ø×Ñ˜tÔ$Ø×ÑÔ!Ø—O‘OÓ%ˆE÷		&ð
 ˜5Ò Ð Ñ ÷	!÷ 	!ð 	!÷	&ð 	&ú÷		!ð 	!ú÷ 	!ð 	!ús=   Ã	FÃ!6FÄAFÅ$FÅ4FÆFÆ
FÆF	ÆFÆF&c            
      óÀ  — t        dt        «       i¬«      5 } t        «       }t        d| j                  f|g¬«      5 }t        |j                  t        j                  dd«      «      «      }|j                  j                  «       j                  d«      }t        j                  |«      }t        j                  j!                  «       D ]l  \  }}|j#                  «       }t%        |t&        «      r|j                  d«      }|j)                  |«      |k(  sJ ‚|j*                  j)                  |«      |k(  rŒlJ ‚ 	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)r÷  rÁ  rD  rÝ   r   rÃ   ÚasciiN)rö  r(  r  r   rª  r%  rË   r
   rE  rß  r–   rÅ  ÚastÚliteral_evalr  r$  r‚  r¡  r�  Úbytesr   r  )r’  r¢  r¤  r°  Úraw_headersrù  ÚheaderrÇ  s           r   Útest_middleware_multi_headerrÝ  #	  sC  € ä	 ØÔ2Ó4ð-ô 
ð Bà
Ü4Ó6ˆÜØ˜fŸk™kÐ*Ø#˜9ô&ð 	Bà)/Ü˜F×,Ñ,¬V¯]©]¸3ÀÓ-DÓEÓFˆHà"Ÿ-™-×2Ñ2Ó4×;Ñ;¸GÓDˆKÜ ×-Ñ-¨kÓ:ˆNä"=×"FÑ"F×"LÑ"LÓ"Nò B‘�˜ØŸ™›�Ü˜f¤eÔ,Ø#Ÿ]™]¨7Ó3�FØ%×)Ñ)¨&Ó1°VÒ;Ð;Ð;Ø×+Ñ+×/Ñ/°Ó7¸6ÓAÐAÐAñB÷	B÷	Bð B÷	Bð 	Bú÷	Bð Bús)   —%E¼C6EÄ3EÄ7EÅE	ÅEÅEc                  óØ  — t        «       } t        | d   ¬«      5 }dg}t        j                  d|j                  f| d   |¬«      }t        j                  t        j                  «      5  |j                  t        j                  d«      «       ddd«       |j                  «        d	g}t        j                  d|j                  f| d   |¬«      }t        j                  t        j                  t        j                  f«      5  |j                  t        j                  d«      «       ddd«       |j                  «        ddd«       y# 1 sw Y   Œ¼xY w# 1 sw Y   Œ.xY w# 1 sw Y   yxY w)
z$Test setting generic client options.r3   rT  )zgrpc.ssl_target_name_overriderd  rÝ   r2   )r[  Úgeneric_optionsr`   N)zgrpc.max_receive_message_lengthé    )r5   r^   r
   r©  rª  rI  rJ  rV  r{   rH  r°  r>   r1  r.  )rX  r>  rf   r¤  s       r   Útest_generic_optionsrá  9	  s$  € ô Ó€Eä	¨u°^Ñ/DÔ	Eð ÈàDÐEˆÜ—‘ ¨a¯f©fÐ 5Ø/4°[Ñ/AØ07ô9ˆô �]‰]œ6×8Ñ8Ó9ñ 	2Ø�M‰Mœ&Ÿ-™-¨Ó0Ô1÷	2à�‰Œà:Ð;ˆÜ—‘ ¨a¯f©fÐ 5Ø/4°[Ñ/AØ07ô9ˆô �]‰]œBŸO™O¬V×-HÑ-HÐIÓJñ 	2Ø�M‰Mœ&Ÿ-™-¨Ó0Ô1÷	2à�‰Œ÷!ð ÷	2ð 	2ú÷	2ð 	2ú÷ð ús=   šAE Á(%EÂA5E Ä%EÄ'E ÅE	ÅE ÅE	ÅE Å E)c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚCancelFlightServerzA server for testing StopToken.c                 óÀ   — t        j                  g «      }t         j                  j                  g |¬«      }t	        j
                  |t        j                  |«      «      S )Nr  )r>   ro   r“   rA   r
   r‹   r  r  )rg   rs   rx   ro   r%   s        r   r{   zCancelFlightServer.do_getT	  sF   € Ü—‘˜2“ˆÜ�^‰^×'Ñ'¨°6Ð'Ó:ˆÜ×%Ñ% f¬i×.>Ñ.>¸rÓ.BÓCÐCr   c                 ó"  — t        j                  g «      }t         j                  j                  g |¬«      }|j	                  |«       |j                  «       s8|j                  |«       t        j                  d«       |j                  «       sŒ7y y )Nr  r  )	r>   ro   r“   rA   rM  rÞ  rW  r  r   )rg   rs   rš   r›   rœ   ro   r%   s          r   rµ   zCancelFlightServer.do_exchangeY	  sg   € Ü—‘˜2“ˆÜ�^‰^×'Ñ'¨°6Ð'Ó:ˆØ�‰�VÔØ×&Ñ&Ô(Ø×Ñ˜rÔ"Ü�J‰J�sŒOð ×&Ñ&×(r   N)r}   r~   r   r€   r{   rµ   r"   r   r   rã  rã  Q	  s   „ Ù)òDó
r   rã  c                  óÖ  ‡‡— t        j                  «       j                  t        j                  «       j                  k7  rt	        j
                  d«       d„ Št        t        j                  fŠˆˆfd„} t        «       5 }t        d|j                  f«      5 }|j                  t        j                  d«      «      } | |j                  «       t        j                   j#                  d«      }|j%                  |«      \  }} | |j                  «       	 |j'                  «        d d d «       d d d «       y # t        t        j(                  f$ r Y Œ,w xY w# 1 sw Y   Œ1xY w# 1 sw Y   y xY w)Nz'test only works from main Python threadc                  ót   — t        j                  d«       t        j                  t        j                  «       y r  )r  r   ÚsignalÚraise_signalÚSIGINTr"   r   r   Úsignal_from_threadz*test_interrupt.<locals>.signal_from_threadg	  s   € Ü�
‰
�3ŒÜ×ÑœFŸM™MÕ*r   c                 óþ  •— 	 	 t        j                  ‰¬«      }t        j                  ‰«      5 }|j	                  «         | «        d d d «       |j                  «        	 j                  }t        |t        j                  t        f«      s-t        |j                  t        j                  t        f«      sJ ‚y y # 1 sw Y   ŒtxY w# j                  «        w xY w# t        $ r t        j                  d«       Y Œ›w xY w)Nr©  z2KeyboardInterrupt didn't interrupt Flight read_all)r   r¡  rI  rJ  r¢  r’  ÚKeyboardInterruptÚfailrd  r�  r>   ÚArrowCancelledÚ__context__)r±   ÚtÚexc_infor¿  Ú	exc_typesrë  s       €€r   rÁ  ztest_interrupt.<locals>.testm	  sÖ   ø€ ð	NðÜ×$Ñ$Ð,>Ô?�Ü—]‘] 9Ó-ð °Ø—G‘G”IÙ”J÷ð —‘•ð �N‰NˆÜ˜!œb×/Ñ/Ô1BÐCÔDÜ�q—}‘}¤r×'8Ñ'8Ô:KÐ&LÔMð	Nð NØMð E÷ð ûð —‘•ûÜ ò 	Nô �K‰KÐLÖMð	Nús:   „+C ¯B:ÁC ÁC Â:CÂ?C ÃCÃC ÃC<Ã;C<rÝ   r   r?  )r   Úcurrent_threadÚidentÚmain_threadrI  ra  rí  r>   rï  rã  r   rª  r{   r
   rH  r±   rp   rF  rµ   r°  r.  )rÁ  r’  r¤  r›   rš   rœ   ró  rë  s         @@r   Útest_interruptr÷  b	  s&  ù€ ä×ÑÓ!×'Ñ'¬9×+@Ñ+@Ó+B×+HÑ+HÒHÜ�‰Ð=Ô>ò+ô #¤B×$5Ñ$5Ð6€IõNô$ 
Ó	ð  Ü˜+ v§{¡{Ð3Ó4ðØ8>à—‘œvŸ}™}¨SÓ1Ó2ˆÙˆV�_‰_Ôä×,Ñ,×8Ñ8¸ÓAˆ
Ø×+Ñ+¨JÓ7‰ˆ�ÙˆV�_‰_Ôð	Ø�L‰LŒN÷÷ ð øô "¤6×#>Ñ#>Ð?ò 	áð	ú÷ð ú÷ ð úsC   Á>EÂA<EÄD4Ä#EÄ4EÅEÅEÅEÅE	ÅEÅE(c                  ó  — d} t        «       5 }t        j                  d|j                  f«      5 }t	        j
                  t        j                  | ¬«      5  |j                  t        j                  d«      «      j                  «        d d d «       |j                  t        j                  d«      «      j                  «       }|j                  dk(  sJ ‚	 d d d «       d d d «       y # 1 sw Y   Œ^xY w# 1 sw Y   ŒxY w# 1 sw Y   y xY w)Nz'application server implementation errorrÝ   r·  r   r  r9   )r  r
   r©  rª  rI  rJ  ræ  r{   rH  r±   r^  )r¸  r’  r¤  rz   s       r   Útest_never_sends_datarù  �	  sÑ   € à5€EÜ	#Ó	%ð #¨Ü�N‰N˜K¨¯©Ð5Ó6ð#Ø:@Ü�]‰]œ6×3Ñ3¸5ÔAñ 	9Ø�M‰Mœ&Ÿ-™-¨Ó,Ó-×6Ñ6Ô8÷	9ð
 —‘œfŸm™m¨MÓ:Ó;×DÑDÓFˆØ�~‰~ Ò"Ð"Ñ"÷#÷ #ð #÷	9ð 	9ú÷#ð #ú÷ #ð #ús;   �"C=¯&C1Á3C%ÂAC1ÃC=Ã%C.Ã*C1Ã1C:	Ã6C=Ã=Dc            	      óX  — t         j                  j                  ddz  «      } t        «       5 }t        j                  d|j
                  f«      5 }t        j                  t        d¬«      5  |j                  | t        j                  g «      «      \  }}|j                  «        d d d «       t        j                  t        j                  d¬«      5  |j                  | «       d d d «       d d d «       d d d «       y # 1 sw Y   ŒYxY w# 1 sw Y   Œ&xY w# 1 sw Y   Œ*xY w# 1 sw Y   y xY w)Nr1  r2  rÝ   z%Failed to serialize Flight descriptorr·  )r
   rp   rF  r   r©  rª  rI  rJ  ÚOSErrorr¢   r>   ro   r°  r  rµ   )Úlarge_descriptorr’  r¤  rœ   rö  s        r   Útest_large_descriptorrý  �	  sý   € ô
 ×.Ñ.×:Ñ:Ø�ÑóÐä	Ó	ð 1˜vÜ�N‰N˜K¨¯©Ð5Ó6ð1Ø:@Ü�]‰]œ7Ø!HôJñ 	àŸ™Ð&6¼¿	¹	À"»ÓF‰IˆF�AØ�L‰LŒN÷	ô �]‰]œ2×,Ñ,Ø!HôJñ 	1à×ÑÐ/Ô0÷	1÷1÷ 1ð 1÷	ð 	ú÷	1ð 	1ú÷1ð 1ú÷ 1ð 1úsS   ­"D ÁDÁ+9C<Â$-DÃDÃ#DÃ+D Ã<DÄDÄDÄDÄD	ÄD Ä D)c            	      ó”  — t         j                  j                  d«      } ddz  }t        «       5 }t        j                  d|j
                  f«      5 }t        j                  t        j                  d¬«      5  |j                  | t        j                  g «      «      \  }}|5  |j                  |«       |j                  «        d d d «       d d d «       t        j                  t        j                  d¬«      5  |j                  | «      \  }}|5  |j                  |«       d d d «       d d d «       d d d «       d d d «       ~t        «       5 }t        j                  d|j
                  f«      5 }t        j                  t         j                   d¬«      5  |j#                  t        j$                  d«      «      }|j'                  «        d d d «       t        j                  t        j(                  d¬«      5  |j                  | «      \  }}|5  |j'                  «        d d d «       d d d «       d d d «       d d d «       y # 1 sw Y   �Œ~xY w# 1 sw Y   �ŒƒxY w# 1 sw Y   �Œ:xY w# 1 sw Y   �Œ?xY w# 1 sw Y   �ŒDxY w# 1 sw Y   �ŒIxY w# 1 sw Y   ŒÅxY w# 1 sw Y   Œ|xY w# 1 sw Y   Œ€xY w# 1 sw Y   Œ„xY w# 1 sw Y   y xY w)Nr   r1  r2  rÝ   zapp_metadata size overflowr·  )r
   rp   rF  rª   r©  rª  rI  rJ  r>   ÚArrowCapacityErrorr¢   ro   rQ  r°  rµ   r/  ræ  r{   rH  r±   r  )rš   rj  r’  r¤  rœ   rö  r›   s          r   Útest_large_metadata_clientr   ¯	  sR  € ô ×(Ñ(×4Ñ4°SÓ9€JØ�{Ñ#€HÜ	Ó	ð 0˜vÜ�N‰N˜K¨¯©Ð5Ó6ð0Ø:@Ü�]‰]œ2×0Ñ0Ø!=ô?ñ 	àŸ™ j´"·)±)¸B³-Ó@‰IˆF�AØñ Ø×%Ñ% hÔ/Ø—‘”÷÷	ô �]‰]œ2×0Ñ0Ø!=ô?ñ 	0à#×/Ñ/°
Ó;‰NˆF�FØñ 0Ø×%Ñ% hÔ/÷0÷	0÷0÷ 0ð 	Ü	"Ó	$ð 
"¨Ü�N‰N˜K¨¯©Ð5Ó6ð
"Ø:@Ü�]‰]œ6×3Ñ3Ø!=ô?ñ 	à—]‘]¤6§=¡=°Ó#5Ó6ˆFØ�O‰OÔ÷	ô �]‰]œ2×,Ñ,Ø!=ô?ñ 	"à#×/Ñ/°
Ó;‰NˆF�FØñ "Ø—‘Ô!÷"÷	"÷
"÷ 
"ð 
"÷ñ ú÷	ñ 	ú÷0ñ 0ú÷	0ñ 	0ú÷0ñ 0ú÷ 0ñ 0ú÷"	ð 	ú÷"ð "ú÷	"ð 	"ú÷
"ð 
"ú÷ 
"ð 
"úsï   ¯"JÁ&I4Á7+IÂ""I 	ÃIÃ-I4Ã9I'ÄI	Ä"I'Ä*I4Ä2JÅ"J>Å/&J2Æ5JÇ
-J2Ç7J&ÈJ	ÈJ&È'J2È/J>É I
ÉIÉIÉI4ÉI$ÉI'É'I1É,I4É4I>	É9JÊJÊJÊJ2ÊJ#ÊJ&Ê&J/Ê+J2Ê2J;	Ê7J>Ê>Kc                   ó   — e Zd ZdZg Zd„ Zy)ÚActionNoneFlightServerz@A server that implements a side effect to a non iterable action.c                 óà   — |j                   dk(  r/t        j                  | j                  «      j	                  d«      gS |j                   dk(  r| j                  j                  d«       y t        ‚)NÚ	get_valuerÃ   r  T)rI   ÚjsonÚdumpsÚVALUESrÇ   r  rÈ   rÉ   s      r   rË   z ActionNoneFlightServer.do_actionÕ	  sV   € Ø�;‰;˜+Ò%Ü—J‘J˜tŸ{™{Ó+×2Ñ2°7Ó;Ð<Ð<Ø�[‰[˜HÒ$Ø�K‰K×Ñ˜tÔ$ØÜ!Ð!r   N)r}   r~   r   r€   r  rË   r"   r   r   r  r  Ñ	  s   „ ÙJØ€Fó"r   r  c                  ó¨  — t        «       5 } t        d| j                  f«      5 }|j                  t	        j
                  dd«      «       |j                  t	        j
                  dd«      «      }t        j                  t        |«      j                  j                  «       «      dgk(  sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z…Ensure that actions are executed even when we don't consume iterator.

    See https://issues.apache.org/jira/browse/ARROW-14255
    rÝ   r  r   r  TN)r  r   rª  rË   r
   rE  r  Úloadsr%  rß  r–   )r’  r¤  Úrs      r   Útest_none_action_side_effectr  Þ	  s¨   € ô 
 Ó	!ð ? VÜ˜+ v§{¡{Ð3Ó4ð?Ø8>Ø×ÑœŸ™ x°Ó5Ô6Ø×ÑœVŸ]™]¨;¸Ó<Ó=ˆÜ�z‰zœ$˜q›'Ÿ,™,×1Ñ1Ó3Ó4¸¸Ò>Ð>Ñ>÷	?÷ ?÷ ?ñ ?ú÷ ?ð ?ús#   ‹C£BB<Â+CÂ<C	ÃCÃCc            	      ó  ‡‡— d} d}t        j                  | |¬«      Št         j                  j                  d«      }t	        j
                  dt	        j                  «       fg«      } G ˆfd„dt         j                  «      } |«       5 }t        d|j                  f«      5 }|j                  ||«      \  }Šˆfd	„}t        j                  |d
¬«      }	|	j                  «        t        j                  t         j                  «      5 }
	 |j!                  t	        j"                  dgg|¬«      «       Œ)# 1 sw Y   nxY w
j$                  j&                  |k(  sJ ‚t        j                  t         j                  «      5 }
|j)                  «        ddd«       n# 1 sw Y   nxY w|
j$                  j&                  |k(  sJ ‚|	j+                  «        |j-                  |«      \  }Šˆfd„}t        j                  |d
¬«      }	|	j                  «        t        j                  t         j                  «      5 }
	 |j/                  d«       Œ# 1 sw Y   nxY w|
j$                  j&                  |k(  sJ ‚t        j                  t         j                  «      5 }
|j)                  «        ddd«       n# 1 sw Y   nxY w|
j$                  j&                  |k(  sJ ‚|	j+                  «        ddd«       n# 1 sw Y   nxY wddd«       y# 1 sw Y   yxY w)zƒ
    Ensure that exceptions during writing preserve error context.

    See https://issues.apache.org/jira/browse/ARROW-16592.
    rE   r^  )r¾  r   r6  c                   ó"   •— e Zd Zˆ fd„Zˆ fd„Zy)ú0test_write_error_propagation.<locals>.FailServerc                 ó   •— ‰‚r§   r"   ©rg   rs   rš   r›   rœ   Úexcs        €r   r¢   z7test_write_error_propagation.<locals>.FailServer.do_putú	  ó   ø€ ØˆIr   c                 ó   •— ‰‚r§   r"   r  s        €r   rµ   z<test_write_error_propagation.<locals>.FailServer.do_exchangeý	  r  r   N)r}   r~   r   r¢   rµ   )r  s   €r   Ú
FailServerr  ù	  s   ø„ ô	õ	r   r  rÝ   c                  ó\   •— 	 	 ‰ j                  «        Œ# t        j                  $ r Y y w xY wr§   )r'   r
   ÚFlightError©r›   s   €r   Ú_readerz-test_write_error_propagation.<locals>._reader
  s1   ø€ ðØØ—K‘K”Mð øä×%Ñ%ò Ùðúó   ƒ •+ª+Tr›  rK   r  Nc                  ó\   •— 	 	 ‰ j                  «        Œ# t        j                  $ r Y y w xY wr§   )rn  r
   r  r  s   €r   r  z-test_write_error_propagation.<locals>._reader
  s4   ø€ ðØØ×%Ñ%Ô'ð øä×%Ñ%ò Ùðúr  r1  )r
   r.  rp   rF  r>   ro   r6  r   r   rª  r¢   r   r¡  r¢  rI  rJ  rW  r7  rd  r¾  r°  r’  rµ   rQ  )Úexpected_messageÚexpected_inforš   ro   r  r’  r¤  rœ   r  r¥  rò  r  r›   s              @@r   Útest_write_error_propagationr  ë	  s  ù€ ð ÐØ€MÜ
×
%Ñ
%Ø ]ô4€Cä×(Ñ(×4Ñ4°SÓ9€JÜ�Y‰Y˜¤"§(¡(£*Ð-Ð.Ó/€Fö”V×,Ñ,ô ñ 
‹ð /˜Ü˜+ v§{¡{Ð3Ó4ð/Ø8>àŸ™ z°6Ó:‰ˆ�ô	ô ×!Ñ!¨¸Ô>ˆØ�‰Œä�]‰]œ6×6Ñ6Ó7ð 	J¸8ØØ×"Ñ"¤2§?¡?°Q°C°5ÀÔ#HÔIð ÷	Jð 	Júð �~‰~×(Ñ(¨MÒ9Ð9Ð9ä�]‰]œ6×6Ñ6Ó7ð 	¸8Ø�L‰LŒN÷	÷ 	ñ 	úà�~‰~×(Ñ(¨MÒ9Ð9Ð9Ø�‰Œð  ×+Ñ+¨JÓ7‰ˆ�ô	ô ×!Ñ!¨¸Ô>ˆØ�‰ŒÜ�]‰]œ6×6Ñ6Ó7ð 	,¸8ØØ×%Ñ% dÔ+ð ÷	,ð 	,úð �~‰~×(Ñ(¨MÒ9Ð9Ð9ä�]‰]œ6×6Ñ6Ó7ð 	¸8Ø�L‰LŒN÷	÷ 	ñ 	úà�~‰~×(Ñ(¨MÒ9Ð9Ð9Ø�‰Œ÷_/÷ /ñ /ú÷ /÷ /ñ /ús|   Â	K<Â!A%K'Ä+D1Ä1D:Ä6AK'Å;FÆ	K'ÆFÆBK'È/IÉIÉAK'ÊJ'Ê	K'Ê'J0Ê,2K'Ë	K<Ë'K0	Ë,K<Ë<Lc                  ó.   — t        j                  d«       y)z…
    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   2
  s   € ô 	×ÑÐ'Õ(r   c                   ó   — e Zd ZdZd„ Zy)ÚTracingFlightServerz/A server that echoes back trace context values.c                 óf   — |j                  d«      j                  }d„ |j                  «       D «       S )NÚtracingc              3   óN   K  — | ]  \  }}|› d |› �j                  d«      –— Œ y­w)z: rÃ   N)rÇ   )Ú.0r1   rd  s      r   ú	<genexpr>z0TracingFlightServer.do_action.<locals>.<genexpr>C
  s2   è ø€ ò ;Ù �S˜%ð �5˜˜5˜'Ð"×*Ñ*¨7×3ñ ;ùs   ‚#%)rÕ  Útrace_contextr‚  )rg   rs   rÊ   r(  s       r   rË   zTracingFlightServer.do_action>
  s3   € Ø×.Ñ.¨yÓ9×GÑGˆñ;Ø$1×$7Ñ$7Ó$9ô;ð 	;r   Nr×  r"   r   r   r"  r"  ;
  s
   „ Ù9ó;r   r"  c                  ó(  — t        dt        j                  «       i¬«      5 } t        d| j                  f«      5 }t        j
                  ddg¬«      }|j                  d|¬«      D ]  }Œ 	 d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)	Nr$  rD  rÝ   )s   traceparents7   00-000ff00f00f0ff000f0f00ff0f00fff0-000f0000f0f00000-00)s
   tracestater   r=  )r   r   rw   )r"  r
   ÚTracingServerMiddlewareFactoryr   rª  r   rË   )r’  r¤  rf   rd  s       r   Útest_tracingr+  G
  s£   € Ü	Ø”v×<Ñ<Ó>ð)ô 
ð à
Ü˜+ v§{¡{Ð3Ó4ðð 9?ô ×*Ñ*ð5à ð	4
ô ˆð ×%Ñ% j¸'Ð%ÓBò 	ˆEØñ	÷÷ ÷ ñ ú÷ ð ús"   ¡B¹1A<Á+BÁ<B	ÂBÂBÚwin32z6Opentelemetry traces don't appear on stdout on Windowsc                  óV  — t        «       st        j                  d«       d} t        j                  j                  «       }d|d<   d|d<   t        j                  t        j                  d| g|d¬	«      }|j                  d
k(  sJ |j                  «       ‚d}d|j                  v sJ |«       ‚y )Nz"Arrow not built with OpenTelemetryaå  if 1:
        import pyarrow.flight as flight
        from pyarrow.flight import FlightServerBase, FlightClient

        class SimpleServer(FlightServerBase):
            def do_action(self, context, action):
                return []

        with SimpleServer(
            middleware={"otel": flight.TracingServerMiddlewareFactory()}
        ) as server:
            with FlightClient(('localhost', server.port)) as client:
                list(client.do_action((b"", b"")))
        ÚostreamÚARROW_TRACING_BACKENDzpyarrow-testing-serviceÚOTEL_SERVICE_NAMEz-cT)ÚenvÚcapture_outputr   z%Expected service name in trace outputs%   service.name: pyarrow-testing-service)r   rI  ra  r   r   ÚcopyÚ
subprocessÚrunÚsysÚ
executableÚ
returncodeÚstderrÚstdout)Úcoder1  ÚresÚmsgs       r   Ú+test_tracing_server_middleware_emits_tracesr>  Z
  s�   € ô
 $Ô%Ü�‰Ð8Ô9ð€Dô �*‰*�/‰/Ó
€CØ#,€CÐÑ Ø8€CÐÑÜ
�.‰.œ#Ÿ.™.¨$°Ð5¸3Ø(,ô.€Cà�>‰>˜QÒÐ* §
¡
Ó*ÐØ
1€CØ3°s·z±zÑAÐFÀ3ÓFÑAr   c                  óâ   — t        dd¬«      } d}t        j                  t        |¬«      5  | j	                  t
        j                  j                  d«      d ¬«       d d d «       y # 1 sw Y   y xY w)Nzgrpc+tls://localhost:9643Tr_  zRArgument 'schema' has incorrect type \(expected pyarrow.lib.Schema, got NoneType\)r·  rE   r  )r   rI  rJ  rK  r¢   r
   rp   rF  )r¤  r=  s     r   Ú.test_do_put_does_not_crash_when_schema_is_noner@  y
  sc   € ÜÐ5Ø6:ô<€Fð<€Cä	�‰”y¨Ô	,ñ #Ø�‰”f×-Ñ-×9Ñ9¸%Ó@Ø!ð 	ô 	#÷#÷ #ñ #ús   «1A%Á%A.c                  óæ  ‡—  G d„ dt         «      }  G ˆfd„dt        «      } G d„ dt        «      Š |«       } | «       5 }t        d|j                  f|g¬«      5 }|j                  t        j                  j                  d	«      «       d
|j                  v sJ ‚d|j                  v sJ ‚d|j                  v sJ ‚d|j                  v sJ ‚	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w)z9Ensure that server-sent headers/trailers make it through.c                   ó   — e Zd Zd„ Zy)ú:test_headers_trailers.<locals>.HeadersTrailersFlightServerc                 óæ   — |j                  dd«       |j                  dd«       |j                  dd«       |j                  dd«       t        j                  t	        j
                  g «      |g «      S )	Núx-headerúheader-valueúx-header-binzheadervalueú	x-trailerútrailer-valueúx-trailer-binztrailervalue)Ú
add_headerÚadd_trailerr
   rn   r>   ro   ré   s      r   rê   zJtest_headers_trailers.<locals>.HeadersTrailersFlightServer.get_flight_info‡
  sh   € Ø×Ñ˜z¨>Ô:Ø×Ñ˜~Ð/@ÔAØ×Ñ ¨_Ô=Ø×Ñ Ð1CÔDÜ×$Ñ$Ü—	‘	˜"“ØØóð r   N)r}   r~   r   rê   r"   r   r   ÚHeadersTrailersFlightServerrC  †
  s   „ ó		r   rM  c                   ó   •— e Zd Zd„ Zˆ fd„Zy)ú?test_headers_trailers.<locals>.HeadersTrailersMiddlewareFactoryc                 ó   — g | _         y r§   r=  r†  s    r   rd   zHtest_headers_trailers.<locals>.HeadersTrailersMiddlewareFactory.__init__“
  s	   € ØˆD�Lr   c                 ó   •—  ‰| «      S r§   r"   )rg   rí   ÚHeadersTrailersMiddlewares     €r   r­  zJtest_headers_trailers.<locals>.HeadersTrailersMiddlewareFactory.start_call–
  s   ø€ Ù,¨TÓ2Ð2r   N)r}   r~   r   rd   r­  )rR  s   €r   Ú HeadersTrailersMiddlewareFactoryrO  ’
  s   ø„ ò	õ	3r   rS  c                   ó   — e Zd Zd„ Zd„ Zy)ú8test_headers_trailers.<locals>.HeadersTrailersMiddlewarec                 ó   — || _         y r§   r²  r´  s     r   rd   zAtest_headers_trailers.<locals>.HeadersTrailersMiddleware.__init__š
  s	   € Ø"ˆD�Lr   c                 ó�   — |j                  «       D ]3  \  }}|D ])  }| j                  j                  j                  ||f«       Œ+ Œ5 y r§   )r‚  r³  r¢  r  )rg   r¢  r1   rÇ  rd  s        r   rº  zItest_headers_trailers.<locals>.HeadersTrailersMiddleware.received_headers�
  sF   € Ø&Ÿ}™}›ò >‘��VØ#ò >�EØ—L‘L×(Ñ(×/Ñ/°°e°Õ=ñ>ñ>r   N)r}   r~   r   rd   rº  r"   r   r   rR  rU  ™
  s   „ ò	#ó	>r   rR  rÝ   rD  rõ   )rE  rF  )rG  s   headervalue)rH  rI  )rJ  s   trailervalueN)
r   r   r   r   rª  rê   r
   rp   rq   r¢  )rM  rS  r³  r’  r¤  rR  s        @r   Útest_headers_trailersrX  ƒ
  sí   ø€ ô
Ô&6ô 
ö3Ô+Bô 3ô>Ô$4ô >ñ /Ó0€GÙ	$Ó	&ð I¨&Ü˜+ v§{¡{Ð3ÀÀ	ÔJðIØNTØ×Ñœv×6Ñ6×?Ñ?ÀÓCÔDØ+¨w¯©Ñ>Ð>Ð>Ø3°w·±ÑFÐFÐFØ-°·±Ñ@Ð@Ð@Ø5¸¿¹ÑHÐHÑH÷I÷ I÷ Iñ Iú÷ Ið Iús$   ¿C'ÁA/CÃ
C'ÃC$	Ã C'Ã'C0c                  óJ  ‡	— t        ddddd¬«      t        ddddd¬«      dœŠ	 G ˆ	fd„d	t        «      }  | «       5 }t        d
|j                  f«      5 }t	        «       }dD �]  }t
        j                  j                  |«      }|j                  |t        j                  t        j                  j                  d¬«      ¬«      ¬«      \  }}|5  |j                  |j                  t        j                  j                  |dk(  ¬«      ¬«       |j                  |«       |j!                  «        |j#                  «       }d d d «       j%                  |«      sJ ‚|j&                  ‰	|   k(  r�ŒJ ‚ 	 d d d «       d d d «       y # 1 sw Y   ŒExY w# 1 sw Y   ŒxY w# 1 sw Y   y xY w)Nr�   rM   rL   rK   r   rÃ  )Údict_deltasÚdict_replacementc                   ó   •— e Zd Zˆ fd„Zy)úDtest_flight_dictionary_deltas_do_exchange.<locals>.DeltaFlightServerc                 óê  •— t        «       }|j                  «       }|j                  |«      sJ ‚|j                  ‰|j                  j                  «          k(  sJ ‚|j                  dk(  rNt        j                  j                  d¬«      }|j                  |j                  |¬«       |j                  |«       |j                  dk(  r-|j                  |j                  «       |j                  |«       y y )Ns   dict_deltasT©Úemit_dictionary_deltasrw   s   dict_replacement)rT   r±   r’   r�   r:  rÅ  r>   r¹  rº  rM  ro   rN  )	rg   rs   rš   r›   rœ   Úexpected_tableÚreceived_tablerf   Úexpected_statss	           €r   rµ   zPtest_flight_dictionary_deltas_do_exchange.<locals>.DeltaFlightServer.do_exchange¿
  sÎ   ø€ Ü/Ó1ˆNØ#Ÿ_™_Ó.ˆNØ!×(Ñ(¨Ô8Ð8Ð8Ø—<‘< >°*×2DÑ2D×2KÑ2KÓ2MÑ#NÒNÐNÐNØ×!Ñ! ^Ò3ÜŸ&™&×0Ñ0ÈÐ0ÓM�Ø—‘˜^×2Ñ2¸G�ÔDØ×"Ñ" >Ô2Ø×!Ñ!Ð%8Ò8Ø—‘˜^×2Ñ2Ô3Ø×"Ñ" >Õ2ð 9r   N)r}   r~   r   rµ   )rc  s   €r   ÚDeltaFlightServerr]  ¾
  s   ø„ õ	3r   rd  rÝ   Tr_  )Úwrite_optionsrw   rZ  )r   r^   r   rª  rT   r
   rp   rF  rµ   r   r>   r¹  rº  rM  ro   rN  rª  r±   r’   r�   )
rd  r’  r¤  ra  r:  rš   rœ   r›   rb  rc  s
            @r   Ú)test_flight_dictionary_deltas_do_exchangerf  ¬
  s©  ø€ ä ØØ Ø#$Ø"#Ø&'ô
ô &ØØ Ø#$Ø"#Ø&'ô
ñ€Nö"3Ô0ô 3ñ 
Ó	ð ; Ü˜+ v§{¡{Ð3Ó4ð;Ø8>Ü+Ó-ˆØ:ó 	;ˆGÜ×0Ñ0×<Ñ<¸WÓEˆJØ#×/Ñ/ØÜ×0Ñ0Ü"$§&¡&×"8Ñ"8Ø/3ð #9ó #5ôð 0ó ‰NˆF�Fð ñ 3Ø—‘˜^×2Ñ2¼B¿F¹F×<RÑ<RØ,3°}Ñ,Dð =Só =G�ô Hà×"Ñ" >Ô2Ø×#Ñ#Ô%Ø!'§¡Ó!2�÷3ð "×(Ñ(¨Ô8Ð8Ð8Ø—<‘< >°'Ñ#:Ô:Ð:Ð:ñ%	;÷;÷ ;ð ;÷3ð 3ú÷;ð ;ú÷ ;ð ;úsC   »FÁA:FÃA0F	Ä=-FÅ,FÅ0FÆF
ÆFÆF	ÆFÆF"c                 ó  — | j                   dk(  rdd d d dœS | j                   dk(  rgddgt        j                  j                  d¬«      t        j                  j	                  d	t        j                  j
                  j                  ¬
«      dœS i S )NÚdefaultrM   )rŸ  r¢  re  r  Úallr“  )s   abcs   defÚzstd)ÚcompressionF)Úuse_threadsÚensure_alignment)Úparamr>   r¹  rº  r   Ú	AlignmentÚDataTypeSpecific)Úrequests    r   Úcall_options_argsrr  ä
  sŽ   € à‡}�}˜	Ò!àØØ!Ø ñ	
ð 	
ð 
�‰˜%Ò	àØ(Ð)ÜŸV™V×3Ñ3ÀÐ3ÓGÜŸF™F×1Ñ1Ø!Ü!#§¡×!1Ñ!1×!BÑ!Bð 2ó ñ	
ð 	
ð ˆ	r   rr  rh  ri  T)Úindirectc                 ó’   — t        di | ¤Ž}|j                  «       }| j                  «       D ]  \  }}|€||v sJ ‚Œ|› d|› �|v rŒJ ‚ y )Nú=r"   )r   Ú__repr__r‚  )rr  Úcall_optionsr]  r   Úvals        r   Útest_call_options_reprry  û
  sh   € ô %Ñ9Ð'8Ñ9€LØ× Ñ Ó"€Dà%×+Ñ+Ó-ò &‰ˆˆSØˆ;Ø˜$‘;Ð�;Øà��a˜�uˆ~ Ò%Ð%Ð%ñ&r   )ÂrØ  r�  r  r   r    rè  r”   r4  r6  rî  r   r  r)   r  r   Únumpyr{  ÚImportErrorrI  r   r>   Úpyarrow.libr   r   r   r   Úpyarrow.utilr   Úpyarrow.testsr	   r
   r   r   r   r   r   r   r   r   r   r   rL  ÚmarkÚ
pytestmarkr   r#   r.   r5   rC   rT   r\   r^   r„   rª   r·   rÏ   rÔ   rÚ   rð   rý   r   r  r  r  r#  r<  rg  r~  r‹  r—  r�  r¤  r¦  r«  r¼  rÆ  rÓ  rÙ  rÛ  rã  rì  rð  ró  rö  rû  r  r  r  r  r  r  r(  r*  r/  rX  rˆ  r�  r“  r–  Úslowr§  r®  r²  r½  ÚpandasrÁ  rÇ  rÉ  rÎ  rÐ  rÒ  rÔ  rå  rç  rê  Úskipifrñ  ró  r÷  rù  r  r  r  r
  r  r  r  r  r  r   r.  r"  r(  r+  r/  r1  Ú%header_auth_server_middleware_factoryr6  r9  r;  rB  rH  rL  rO  rR  Úrequires_testing_datarY  r]  rb  rf  rl  rr  rt  rw  r„  r†  r”  r–  rž  r¤  r«  r­  r±  r¼  rÁ  rÇ  rÉ  rÍ  rÐ  rÒ  rÕ  rÝ  rá  rã  r÷  rù  Úlarge_memoryrý  r   r  r  r  r   r"  r+  Úplatformr>  r@  rX  rf  Úfixturerr  Úparametrizery  r"   r   r   ú<module>rŠ     sO  ðó$ Û Û Û 	Û Û Û Û Û 
Û Û Û Û Û Ý ðÛó Û ç TÓ TÝ 'Ý ðÝ÷÷ õ ð" �[‰[×Ñ€
òò
Bò
òò";ò
<ò2ôEÐ+ô EôD&Ð+ô &ôRÐ'ô ô*"Ð-ô "ô""Ð"2ô "ô""Ð.>ô "ô"0Ð*ô 0ô6+Ð.ô +ôÐ#3ô ô.Ð.ô .ô"EÐ 0ô Eô FÐ!1ô Fô&7Ð'ô 7ô*.AÐ(ô .AôbJ#Ð+ô J#ôZÐ!2ô ô0Ð!2ô ô"Ð.ô ô.Ð.ô ô$Ð'ô ò$ô
/Ð(?ô 
/ô1Ð!1ô 1ô61Ð(?ô 1ô8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òð ‡�×Ñ�B—G‘G˜t‘OØDð ó Fñ&óFð&ð* ‡�×Ññ#ó ð#ò*#ò #ò*#ò #ò*#ò #ò*9ò<òJò4ñ" 0Øˆ[ð7ô Ð ñ ,Øˆ[ð3ô Ð ð
 ‡�×Ññ+ó ð+ð ‡�×Ñ�B—G‘G˜t‘OØIð ó Kñ
5óKð
5ò+ò5òIñ )JÓ(KÐ %Ù$Ó&Ð ò4òEò;òò@8ò."ò+ð ‡�×ÑØ‡�×"Ò"ñ=ó #ó ð=ð ‡�×"Ò"ñ	"ó #ð	"ð ‡�×"Ò"ñó #ðð  ‡�×"Ò"ñ	2ó #ð	2ò"ò* ò@
"ò)ð, ‡�×Ññ"ó ð"ð8 ‡�×Ññ ó ð ð ‡�×ÑØ‡�×Ññ4ó ó ð4ò@ò8Oòv#òL$(òN	'ò9ò,)5òX	5ð ‡�×"Ò"ñ"ó #ð"ò$!ò2ò0(FòV2ò0!ò.Bð, ‡�×"Ò"ñó #ðô.Ð)ô ð" ‡�×Ññ)ó ð)òX#ð ‡�×ÒØ‡�×Ññ1ó ó ð1ð  ‡�×ÒØ‡�×Ññ"ó ó ð"ô@
"Ð-ô 
"ò
?ð ‡�×ÑñCó ðCòL)ô	;Ð*ô 	;òð& ‡�×Ñ�C—L’L GÑ+ØSð ó UñGóUðGò:#ò&IòR5;ðp ‡‚ñó ðð, ‡�×ÒØ˜) UÐ+°dð ó <ñ
&ó<ñ
&øðsV ò Ø	ƒBðûð$ ò Ø€FØ%+¨VÐ"€LÐ"Ø+1°6Ð(ÐÐ(Ø06¸Ð-ÐÐ-Ø06¸Ð-ÐÐ-ØÓðús$   Á Z1 Á%Z? Ú1Z<Ú;Z<Ú?[ Û[ 