1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
U
­ý°d /ã @s„dZddlZddlZddlmZddlZddlZddlZddl    Z
ddl Z ddl m Z ddlmmZddlZddlmZe jje ƒddZGdd„dejjƒZGd    d
„d
eƒZGd d „d eƒZGd d„deƒZGdd„deƒZ Gdd„deƒZ!Gdd„deƒZ"Gdd„deƒZ#Gdd„deƒZ$Gdd„dejjƒZ%dd„Z&dd„Z'e j(dd „ƒZ)e jj*d!eej+dfeej,dfe!ej-d"fe j.e"ej-d#ej/gd$e#ej0dfe$ej1dfeej+dfe ej,dfgd gd%d&d'„ƒZ2e jj*d!eej+dfeej,dfe!ej-d"fe j.e"ej-d#ej/gd$e#ej0dfe$ej1dfeej+dfe ej,dfgd gd%d(d)„ƒZ3e jj*d*e%ej+fgd gd%d+d,„ƒZ4e j *d-d"d#g¡d.d/„ƒZ5dS)0z9
Tests for the pandas custom headers in http(s) requests
éN)ÚBytesIO)Úis_ci_environmentz…This 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@s(eZdZdZdd„Zdd„Zdd„ZdS)    Ú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.
    cCs,| d¡|jd|_t d|jgi¡}|S)z<
        shared logic at the start of a GET request
        éÈú
User-AgentÚheader)Ú send_responseÚheadersZrequested_from_user_agentÚpdÚ    DataFrame)ÚselfÚ response_df©rúVd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/tests/io/test_user_agent.pyÚstart_processing_headers$s
 ÿÿz/BaseUserAgentResponder.start_processing_headersc
CsBtƒ2}tj|dd}| |¡W5QRX| ¡}W5QRX|S)zQ
        some web servers will send back gzipped files to save bandwidth
        Úw)ÚfileobjÚmode)rÚgzipÚGzipFileÚwriteÚgetvalue)r Úresponse_bytesÚbioZzipperrrrÚ
gzip_bytes1s
z!BaseUserAgentResponder.gzip_bytescCs|j |¡dS)z:
        shared logic at the end of a GET request
        N)Úwfiler)r rrrrÚwrite_back_bytes;sz'BaseUserAgentResponder.write_back_bytesN)Ú__name__Ú
__module__Ú __qualname__Ú__doc__rrrrrrrrs 
rc@seZdZdd„ZdS)ÚCSVUserAgentRespondercCs<| ¡}| dd¡| ¡|jdd d¡}| |¡dS)Nú Content-Typeútext/csvF©Úindexúutf-8)rÚ send_headerÚ end_headersÚto_csvÚencoder©r rrrrrÚdo_GETCs
 zCSVUserAgentResponder.do_GETN©rrr r-rrrrr"Bsr"c@seZdZdd„ZdS)ÚGzippedCSVUserAgentRespondercCsR| ¡}| dd¡| dd¡| ¡|jdd d¡}| |¡}| |¡dS)Nr#r$úContent-EncodingrFr%r')rr(r)r*r+rrr,rrrr-Ns  
z#GzippedCSVUserAgentResponder.do_GETNr.rrrrr/Msr/c@seZdZdd„ZdS)ÚJSONUserAgentRespondercCs8| ¡}| dd¡| ¡| ¡ d¡}| |¡dS)Nr#úapplication/jsonr')rr(r)Úto_jsonr+rr,rrrr-[s
 zJSONUserAgentResponder.do_GETNr.rrrrr1Zsr1c@seZdZdd„ZdS)ÚGzippedJSONUserAgentRespondercCsN| ¡}| dd¡| dd¡| ¡| ¡ d¡}| |¡}| |¡dS)Nr#r2r0rr')rr(r)r3r+rrr,rrrr-fs  
z$GzippedJSONUserAgentResponder.do_GETNr.rrrrr4esr4c@seZdZdd„ZdS)Ú ParquetPyArrowUserAgentRespondercCs8| ¡}| dd¡| ¡|jddd}| |¡dS)Nr#úapplication/octet-streamFÚpyarrow)r&Úengine)rr(r)Ú
to_parquetrr,rrrr-ss
 z'ParquetPyArrowUserAgentResponder.do_GETNr.rrrrr5rsr5c@seZdZdd„ZdS)Ú$ParquetFastParquetUserAgentResponderc    Csd| ¡}| dd¡| ¡ddl}|jddddd| dd¡}| ¡}W5QRX| |¡dS)    Nr#r6rz'memory://fastparquet_user_agent.parquetFÚ fastparquet)r&r8Ú compressionÚrb)rr(r)Úfsspecr9ÚopenÚreadr)r rr>Úfrrrrr-~s üz+ParquetFastParquetUserAgentResponder.do_GETNr.rrrrr:}sr:c@seZdZdd„ZdS)ÚPickleUserAgentRespondercCsB| ¡}| dd¡| ¡tƒ}| |¡| ¡}| |¡dS)Nr#r6)rr(r)rZ    to_picklerr©r rrrrrrr-˜s 
zPickleUserAgentResponder.do_GETNr.rrrrrB—srBc@seZdZdd„ZdS)ÚStataUserAgentRespondercCsF| ¡}| dd¡| ¡tƒ}|j|dd| ¡}| |¡dS)Nr#r6F)Z write_index)rr(r)rZto_statarrrCrrrr-¥s zStataUserAgentResponder.do_GETNr.rrrrrD¤srDc@seZdZdZdd„ZdS)ÚAllHeaderCSVResponderz?
    Send all request headers back for checking round trip
    cCsPt |j ¡¡}| d¡| dd¡| ¡|jdd d¡}|j     
|¡dS)Nrr#r$Fr%r') r r r
Úitemsr    r(r)r*r+rrr,rrrr-¶s 
 zAllHeaderCSVResponder.do_GETN)rrr r!r-rrrrrE±srEcs‡fdd„}|S)Ncs6z ˆ||ŽWStjjk
r.t d¡YqXqdS)N皙™™™™¹?)ÚurllibÚerrorÚURLErrorÚtimeÚsleep)ÚargsÚkwargs©ÚfuncrrÚinnerÀs zwait_until_ready.<locals>.innerr)rPrMrNrQrrOrÚwait_until_ready¿s rRc    Cs2tj d|f|¡}| ¡W5QRX| ¡dS)NÚ    localhost)ÚhttpÚserverZ
HTTPServerÚhandle_requestÚ server_close)Ú    responderÚportrUrrrÚprocess_serverËsrZc    cs t ¡}| d¡| ¡d}W5QRXtjt|j|fd}| ¡|V| d¡|     ¡d}d}| 
¡r”||kr€|  ¡q”|d7}t   d¡qf| ¡dS)    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.
    )rSré)ÚtargetrMé
érrGN)ÚsocketÚbindÚ getsocknameÚmultiprocessingÚProcessrZÚparamÚstartÚjoinÚ    terminateÚis_aliveÚkillrKrLÚclose)ÚrequestÚsockrYZserver_processZ    kill_timeZ    wait_timerrrrXÑs(
 
 
ÿ
 rXz&responder, read_method, parquet_enginer7r;)Zmarks)ZindirectcCsd|dk    r$t |¡|dkr$t d¡t|ƒ}|dkrD|d|›ƒ}n|d|›|d}|jr`t‚dS)Nr;r>úhttp://localhost:)r8)ÚpytestÚ importorskiprRÚemptyÚAssertionError)rXÚ read_methodÚparquet_engineÚdf_httprrrÚtest_server_and_default_headersñs
 
rucCsˆ|dk    r$t |¡|dkr$t d¡d}t d|gi¡}t|ƒ}|dkr`|d|›d|id}n|d|›d|i|d}t ||¡dS)    Nr;r>úSuper Cool Onerrmr©Ústorage_options©rxr8)rnror r rRÚtmÚassert_frame_equal)rXrrrsÚcustom_user_agentÚdf_truertrrrÚtest_server_and_custom_headerss$
 
þýr~zresponder, read_methodcs¸d}d}||dœ‰t|ƒ}|d|›ˆd}||d ˆ ¡¡}| dg¡ ¡}|ddg}tˆ ¡ƒ}t |‡fdd    „|Dƒd
œ¡}| dg¡}| ¡jd gd d }t     
||¡dS)NrvzSuper Secret One©rZAuthrmrwÚ0Ú1csg|] }ˆ|‘qSrr)Ú.0ÚkrwrrÚ
<listcomp>^sz6test_server_and_all_custom_headers.<locals>.<listcomp>)r€rr&r[)Zaxis) rRÚisinÚkeysZ sort_valuesZ reset_indexÚlistr r Zdroprzr{)rXrrr|Zcustom_auth_tokenrtr†r}rrwrÚ"test_server_and_all_custom_headersEs$þþ   rˆr8c    CsVdddœ}t |¡t ddgi¡}d}tjt|d|jd||d    W5QRXdS)
NZcustomZ other_customrZ column_nameZ column_valuezxstorage_options passed with file object or non-fsspec file path|storage_options passed with buffer, or non-supported URL)Úmatchz/tmp/junk.parquetry)rnror r ZraisesÚ
ValueErrorr9)r8r
Ztrue_dfÚmsgrrrÚ,test_to_parquet_to_disk_with_storage_optionses    þ
ÿrŒ)6r!rZ http.serverrTÚiorrbr_rKÚ urllib.errorrHrnZ pandas.compatrZpandas.util._test_decoratorsÚutilZ_test_decoratorsÚtdZpandasr Zpandas._testingZ_testingrzÚmarkZskipifZ
pytestmarkrUZBaseHTTPRequestHandlerrr"r/r1r4r5r:rBrDrErRrZZfixturerXZ parametrizeZread_csvÚ    read_jsonZ read_parquetrdZ&skip_array_manager_not_yet_implementedZ read_pickleZ
read_statarur~rˆrŒrrrrÚ<module>s¨   þ&        
 
 
 
ÿû    
 
 
 
ðì
 
 
 
ÿû    
 
 
 
ðì
ÿû
þþ