
    d&.                        d Z ddlZddlZddlmZ ddlZddlZddlZddl	Z
ddlZddlmZ ddlmc mZ ddlZddlmZ ej                             e            d          Z G d dej        j                  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          Z# G d de          Z$ G d dej        j                  Z%d Z&d Z'ej(        d             Z)ej        *                    deej+        dfeej,        dfe!ej-        df ej.        e"ej-        d ej/        g!          e#ej0        dfe$ej1        dfeej+        dfe ej,        dfgd"g#          d$             Z2ej        *                    deej+        dfeej,        dfe!ej-        df ej.        e"ej-        d ej/        g!          e#ej0        dfe$ej1        dfeej+        dfe ej,        dfgd"g#          d%             Z3ej        *                    d&e%ej+        fgd"g#          d'             Z4ej        *                    d(dd g          d)             Z5dS )*z9
Tests for the pandas custom headers in http(s) requests
    N)BytesIO)is_ci_environmentzThis test can hang in our CI min_versions build and leads to '##[error]The runner has received a shutdown signal...' in GHA. GH 45651)reasonc                   $    e Zd ZdZd Zd Zd ZdS )BaseUserAgentResponderz
    Base class for setting up a server that can be set up to respond
    with a particular file format with accompanying content-type headers.
    The interfaces on the different io methods are different enough
    that this seemed logical to do.
    c                     |                      d           | j        d         | _        t          j        d| j        gi          }|S )z<
        shared logic at the start of a GET request
           
User-Agentheader)send_responseheadersrequested_from_user_agentpd	DataFrame)selfresponse_dfs     [/var/www/html/t/fyr/venv311/lib/python3.11/site-packages/pandas/tests/io/test_user_agent.pystart_processing_headersz/BaseUserAgentResponder.start_processing_headers$   sP     	3)-l)C&l49:
 

     c                     t                      5 }t          j        |d          5 }|                    |           ddd           n# 1 swxY w Y   |                                }ddd           n# 1 swxY w Y   |S )zQ
        some web servers will send back gzipped files to save bandwidth
        w)fileobjmodeN)r   gzipGzipFilewritegetvalue)r   response_bytesbiozippers       r   
gzip_bytesz!BaseUserAgentResponder.gzip_bytes1   s     YY 	,#s555 -^,,,- - - - - - - - - - - - - - - \\^^N	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, s3   A3AA3A	A3A	A33A7:A7c                 :    | j                             |           dS )z:
        shared logic at the end of a GET request
        N)wfiler   )r   r   s     r   write_back_bytesz'BaseUserAgentResponder.write_back_bytes;   s      	
(((((r   N)__name__
__module____qualname____doc__r   r!   r$    r   r   r   r      sK             ) ) ) ) )r   r   c                       e Zd Zd ZdS )CSVUserAgentResponderc                     |                                  }|                     dd           |                                  |                    d                              d          }|                     |           d S )NContent-Typetext/csvFindexutf-8)r   send_headerend_headersto_csvencoder$   r   r   r   s      r   do_GETzCSVUserAgentResponder.do_GETC   sy    3355444$++%+88??HHn-----r   Nr%   r&   r'   r7   r)   r   r   r+   r+   B   #        . . . . .r   r+   c                       e Zd Zd ZdS )GzippedCSVUserAgentResponderc                 T   |                                  }|                     dd           |                     dd           |                                  |                    d                              d          }|                     |          }|                     |           d S )Nr-   r.   Content-Encodingr   Fr/   r1   )r   r2   r3   r4   r5   r!   r$   r6   s      r   r7   z#GzippedCSVUserAgentResponder.do_GETN   s    3355444+V444$++%+88??HH88n-----r   Nr8   r)   r   r   r;   r;   M   #        	. 	. 	. 	. 	.r   r;   c                       e Zd Zd ZdS )JSONUserAgentResponderc                     |                                  }|                     dd           |                                  |                                                    d          }|                     |           d S )Nr-   application/jsonr1   )r   r2   r3   to_jsonr5   r$   r6   s      r   r7   zJSONUserAgentResponder.do_GET[   su    3355);<<<$,,..55g>>n-----r   Nr8   r)   r   r   r@   r@   Z   r9   r   r@   c                       e Zd Zd ZdS )GzippedJSONUserAgentResponderc                 P   |                                  }|                     dd           |                     dd           |                                  |                                                    d          }|                     |          }|                     |           d S )Nr-   rB   r=   r   r1   )r   r2   r3   rC   r5   r!   r$   r6   s      r   r7   z$GzippedJSONUserAgentResponder.do_GETf   s    3355);<<<+V444$,,..55g>>88n-----r   Nr8   r)   r   r   rE   rE   e   r>   r   rE   c                       e Zd Zd ZdS ) ParquetPyArrowUserAgentResponderc                     |                                  }|                     dd           |                                  |                    dd          }|                     |           d S )Nr-   application/octet-streamFpyarrow)r0   engine)r   r2   r3   
to_parquetr$   r6   s      r   r7   z'ParquetPyArrowUserAgentResponder.do_GETs   sn    3355)CDDD$//eI/NNn-----r   Nr8   r)   r   r   rH   rH   r   r9   r   rH   c                       e Zd Zd ZdS )$ParquetFastParquetUserAgentResponderc                 j   |                                  }|                     dd           |                                  dd l}|                    dddd            |                    dd          5 }|                                }d d d            n# 1 swxY w Y   |                     |           d S )	Nr-   rJ   r   z'memory://fastparquet_user_agent.parquetFfastparquet)r0   rL   compressionrb)r   r2   r3   fsspecrM   openreadr$   )r   r   rT   fr   s        r   r7   z+ParquetFastParquetUserAgentResponder.do_GET~   s   3355)CDDD 	5 	 	 	
 	
 	
 [[BDII 	&QVVXXN	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	n-----s   2BBBNr8   r)   r   r   rO   rO   }   s#        . . . . .r   rO   c                       e Zd Zd ZdS )PickleUserAgentResponderc                    |                                  }|                     dd           |                                  t                      }|                    |           |                                }|                     |           d S )Nr-   rJ   )r   r2   r3   r   	to_pickler   r$   r   r   r   r   s       r   r7   zPickleUserAgentResponder.do_GET   s    3355)CDDDiic"""n-----r   Nr8   r)   r   r   rY   rY      r>   r   rY   c                       e Zd Zd ZdS )StataUserAgentResponderc                    |                                  }|                     dd           |                                  t                      }|                    |d           |                                }|                     |           d S )Nr-   rJ   F)write_index)r   r2   r3   r   to_statar   r$   r\   s       r   r7   zStataUserAgentResponder.do_GET   s    3355)CDDDiiSe444n-----r   Nr8   r)   r   r   r^   r^      r>   r   r^   c                       e Zd ZdZd ZdS )AllHeaderCSVResponderz?
    Send all request headers back for checking round trip
    c                 `   t          j        | j                                                  }|                     d           |                     dd           |                                  |                    d                              d          }| j	        
                    |           d S )Nr	   r-   r.   Fr/   r1   )r   r   r   itemsr   r2   r3   r4   r5   r#   r   r6   s      r   r7   zAllHeaderCSVResponder.do_GET   s    l4<#5#5#7#7883444$++%+88??HH
(((((r   N)r%   r&   r'   r(   r7   r)   r   r   rc   rc      s-         ) ) ) ) )r   rc   c                       fd}|S )Nc                  v    	 	  | i |S # t           j        j        $ r t          j        d           Y nw xY w8)NT皙?)urlliberrorURLErrortimesleep)argskwargsfuncs     r   innerzwait_until_ready.<locals>.inner   sX    	  tT,V,,,<(      
3 	 s    (77r)   )rp   rn   ro   rq   s   `   r   wait_until_readyrr      s#              Lr   c                     t           j                            d|f|           5 }|                                 d d d            n# 1 swxY w Y   |                                 d S )N	localhost)httpserver
HTTPServerhandle_requestserver_close)	responderportrv   s      r   process_serverr|      s    			d 3Y	?	?  6                             
s   AAAc              #   l  K   t          j                     5 }|                    d           |                                d         }ddd           n# 1 swxY w Y   t          j        t
          | j        |f          }|                                 |V  |                    d           |	                                 d}d}|
                                rH||k    r|                                 n-|dz  }t          j        d           |
                                H|                                 dS )	z
    Fixture that starts a local http server in a separate process on localhost
    and returns the port.

    Running in a separate process instead of a thread to allow termination/killing
    of http server upon cleanup.
    )rt   r      N)targetrn   
      r   rh   )socketbindgetsocknamemultiprocessingProcessr|   paramstartjoin	terminateis_alivekillrl   rm   close)requestsockr{   server_process	kill_time	wait_times         r   rz   rz      s|      
 %D		"###!!!$% % % % % % % % % % % % % % % %,W]D$9  N 
JJJII

!
!
#
# y  !!!S	
3 
!
!
#
#  s   0AAAz&responder, read_method, parquet_enginerK   rQ   )marksrz   )indirectc                     |.t          j        |           |dk    rt          j        d           t          |          }| |d|            }n |d|  |          }|j        rJ d S )NrQ   rT   http://localhost:)rL   )pytestimportorskiprr   empty)rz   read_methodparquet_enginedf_https       r   test_server_and_default_headersr      s    . !N+++]**)))";//K+=)==>>+=)==nUUU}r   c                 0   |.t          j        |           |dk    rt          j        d           d}t          j        d|gi          }t	          |          }| |d|  d|i          }n |d|  d|i|          }t          j        ||           d S )	NrQ   rT   Super Cool Oner   r   r
   storage_optionsr   rL   )r   r   r   r   rr   tmassert_frame_equal)rz   r   r   custom_user_agentdf_truer   s         r   test_server_and_custom_headersr     s    . !N+++]**)))(lH'8&9:;;G";//K++	++)+<=
 
 

 ++	++)+<=!
 
 
 '7+++++r   zresponder, read_methodc                 T   d}d}||dt          |          } |d|            }||d                                                                                }|                    dg                                          }|ddg         }t                                                    }t          j        |fd|D             d	          }|                    dg          }|                                                    d
gd          }t          j
        ||           d S )Nr   zSuper Secret Oner
   Authr   r   01c                      g | ]
}|         S r)   r)   ).0kr   s     r   
<listcomp>z6test_server_and_all_custom_headers.<locals>.<listcomp>^  s    ,N,N,NA_Q-?,N,N,Nr   )r   r   r0   r~   )axis)rr   isinkeyssort_valuesreset_indexlistr   r   dropr   r   )rz   r   r   custom_auth_tokenr   r   r   r   s          @r   "test_server_and_all_custom_headersr   E  sH    )*'! O #;//Kk'I'''  G
 gcl''(<(<(>(>??@G!!3%((4466GsCj!G$$&&''Dl,N,N,N,N,N,N,NOOPPG!!3%((G!!##(('(;;G'7+++++r   rL   c                    ddd}t          j        |            t          j        ddgi          }d}t          j        t
          |          5  |                    d|| 	           d d d            d S # 1 swxY w Y   d S )
Ncustomother_customr   column_namecolumn_valuezxstorage_options passed with file object or non-fsspec file path|storage_options passed with buffer, or non-supported URL)matchz/tmp/junk.parquetr   )r   r   r   r   raises
ValueErrorrM   )rL   r   true_dfmsgs       r   ,test_to_parquet_to_disk_with_storage_optionsr   e  s      G
 lMN+;<==G	C  
z	-	-	- X X.PVWWWX X X X X X X X X X X X X X X X X Xs   A44A8;A8)6r(   r   http.serverru   ior   r   r   rl   urllib.errorri   r   pandas.compatr   pandas.util._test_decoratorsutil_test_decoratorstdpandasr   pandas._testing_testingr   markskipif
pytestmarkrv   BaseHTTPRequestHandlerr   r+   r;   r@   rE   rH   rO   rY   r^   rc   rr   r|   fixturerz   parametrizeread_csv	read_jsonread_parquetr   &skip_array_manager_not_yet_implementedread_pickle
read_statar   r   r   r   r)   r   r   <module>r      s                           + + + + + + ) ) ) ) ) ) ) ) )          [6    
#) #) #) #) #)T[? #) #) #)L. . . . .2 . . .
. 
. 
. 
. 
.#9 
. 
. 
.. . . . .3 . . .
. 
. 
. 
. 
.$: 
. 
. 
.. . . . .'= . . .. . . . .+A . . .4
. 
. 
. 
. 
.5 
. 
. 
.
. 
. 
. 
. 
.4 
. 
. 
.) ) ) ) )DK> ) ) )	 	 	     > ,	T2	t4	)2?IF0O 9	
 	
 	
 
"2>48	 "-6	%r{D9	&d;!$ ])   , - , ,	T2	t4	)2?IF0O 9	
 	
 	
 
"2>48	 "-6	%r{D9	&d;!$ ])   ,, ,- ,,2 	, ]   , , ,2  X X X X Xr   