e}iB5dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlmZddlZddlZddlZdZejdZdZdZdZ d d ZdZdZejdZejdZejdZdZ GddZ!Gddej"j#Z$ejdddZ%dZ&dZ'dZ(dZ)dZ*dS)!z Utility functions for testing N)tagsc*tjdS)zLRandomly choose either 1 or -1. Returns ------- sign : int )randomchoice@C:\PYTHON\_runtimes\venv\Lib\site-packages\pyarrow/tests/util.pyrandsignr +s = ! !!r c#Ktj}tj| dVtj|dS#tj|wxYw)aSet the random seed inside of a context manager. Parameters ---------- seed : int The seed to set Notes ----- This function is useful when you want to set a random seed but not affect the random state of other functions using the random module. N)rgetstateseedsetstate)roriginal_states r random_seedr5s__&&N K( '''''''''s AAczd|cxkrdks nJd|dkrtdd||z zdz }tj| |}|stj|Sd|zdz }tjd|}tj|dt ||dS) aGenerate a random decimal value with specified precision and scale. Parameters ---------- precision : int The maximum number of digits to generate. Must be an integer between 1 and 38 inclusive. scale : int The maximum number of digits following the decimal point. Must be an integer greater than or equal to 0. Returns ------- decimal_value : decimal.Decimal A random decimal.Decimal object with the specified precision and scale. r&z,precision must be between 1 and 38 inclusiverzHranddecimal does not yet support generating decimals with negative scale .0) ValueErrorrrandintdecimalDecimalstrrjust) precisionscalemax_whole_valuewholemax_fractional_value fractionals r randdecimalr%Ks"    R     !O    qyy    Y./!3O NO+_ = =E &u%%%;?#788J ? 663z??((4466  r cNtdt|DS)Nc8g|]}tjddS)Az)rr).0is r z random_ascii..qs$AAAa&.S))AAAr )bytesrange)lengths r random_asciir0ps% AA5==AAA B BBr cttjtjzdfdt |DS)z% Generate one random string. c3@K|]}tjVdSNr)r*r+ RANDS_CHARSs r zrands..ys-EE!6=--EEEEEEr )liststring ascii_lettersdigitsjoinr.)ncharsr5s @r randsr=tsIv+fm;<._get_uses* t''))6222r c`}|z krtd|z dddS)Nz.Memory leak detected. Departure from baseline z after z iterations) Exception) current_userH baseline_user+ thresholds r _leak_checkz&memory_leak_check.._leak_checksghjj  % 1 1E-EE67EEE  2 1r )psutilProcessr.) frFrM iterationscheck_intervalrOrNrHrLr+rGs `` @@@@r memory_leak_checkrT|s*MMM >>  D3333338::L:    ~  " " KMMMr ctj}|dd}tjtjtjtj}|r"tj ||f}n|}||d<|S)N PYTHONPATHr2) osenvironcopygetpathabspathdirnamepa__file__pathsepr;)envexisting_pythonpath module_pathnew_pythonpaths r get_modified_env_with_pythonpathres *//  C'',33'//  445577K%+7J)KLL$&C  Jr cVt}tjtjt }tj||}tj|g}| |tj ||dS)N)ra) rerWr[r]realpathr_r;sys executableextend subprocess check_call) script_nameargssubprocess_envdir_path python_filecmds r invoke_scriptrss577Nwrw//99::H',,x55K >; 'CJJt#>222222r c#Ktj|}|tj|< dV|tj|=dS|tj|<dS#|tj|=n|tj|<wxYw)zA Temporarily set environment variable *name* to *value*. N)rWrXrZ)namevalue orig_values r changed_environrxs %%JBJt*    4   )BJt      4  )BJt  ) ) ) )s A!A9c#Ktj}tjt| dVtj|dS#tj|wxYwr4)rWgetcwdchdirr)r[curdirs r change_cwdr}sa Y[[FHSYY  s AA(c#Ktj dVtjdS#tjwxYwr4)rBdisableenabler r r disabled_gcrs>JLLL   s 0Ac<tjdkrd|}nd|}|S)Nntzfile:///zfile://)rWru)r[uris r _filesystem_urirs. w$ Jr ceZdZdZdZdS)FSProtocolClassc||_dSr4)_pathselfr[s r __init__zFSProtocolClass.__init__s  r c*t|jSr4)rrrs r __fspath__zFSProtocolClass.__fspath__s4:r N)__name__ __module__ __qualname__rrr r r rrs2r rc~eZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdS) ProxyHandlerz A dataset handler that proxies to an underlying filesystem. Useful to partially wrap an existing filesystem with partial changes. c||_dSr4)_fs)rfss r rzProxyHandler.__init__s r cZt|tr|j|jkStSr4 isinstancerrNotImplementedrothers r __eq__zProxyHandler.__eq__) e\ * * )8uy( (r cZt|tr|j|jkStSr4rrs r __ne__zProxyHandler.__ne__rr c d|jjzS)Nzproxy::)r type_namers r get_type_namezProxyHandler.get_type_name s48---r c6|j|Sr4)rnormalize_pathrs r rzProxyHandler.normalize_pathsx&&t,,,r c6|j|Sr4r get_file_info)rpathss r rzProxyHandler.get_file_infosx%%e,,,r c6|j|Sr4r)rselectors r get_file_info_selectorz#ProxyHandler.get_file_info_selectorsx%%h///r c:|j||S)N) recursive)r create_dir)rr[rs r rzProxyHandler.create_dirsx""49"===r c6|j|Sr4)r delete_dirrs r rzProxyHandler.delete_dirsx""4(((r c:|j||S)N)missing_dir_okrdelete_dir_contents)rr[rs r rz ProxyHandler.delete_dir_contentss)x++D;I,KK Kr c:|jddS)Nr2T)accept_root_dirrrs r delete_root_dir_contentsz%ProxyHandler.delete_root_dir_contents!sx++B+EEEr c6|j|Sr4)r delete_filers r rzProxyHandler.delete_file$sx##D)))r c8|j||Sr4)rmoversrcdests r rzProxyHandler.move'sx}}S$'''r c8|j||Sr4)r copy_filers r rzProxyHandler.copy_file*sx!!#t,,,r c6|j|Sr4)ropen_input_streamrs r rzProxyHandler.open_input_stream-sx))$///r c6|j|Sr4)ropen_input_filers r rzProxyHandler.open_input_file0sx''---r c:|j||SN)metadata)ropen_output_streamrr[rs r rzProxyHandler.open_output_stream3x**4(*CCCr c:|j||Sr)ropen_append_streamrs r rzProxyHandler.open_append_stream6rr N)rrr__doc__rrrrrrrrrrrrrrrrrrr r r rrs:   ...------000>>>)))KKKFFF***(((---000...DDDDDDDDr rFwarn_on_full_bufferc#Ktj\}}d} |d|dtj||}|V|tj|||dS#|tj|||wxYw)NFr)socket socketpair setblockingsignal set_wakeup_fdfilenoclose)rrwold_fds r signal_wakeup_fdr:s    DAq F  e e% HHJJ,?AAA     ( ( (         ( ( (    s AB22AC2c|dg}tj|tjtjd5}|ddkr ddddS|j}|dz}t j||}|r4|d}t||kcdddStd #1swxYwYdS) Nz --versionutf-8stdoutstderrencodingrrFz version RELEASE\.(\d+)-.*rz+minio component older than the minimum year) rkPopenPIPEwaitrreadresearchgroupintFileNotFoundError) component minimum_year full_argsrGrpattern version_match version_years r _ensure_minio_component_versionrMsIK(I  )JO!+7 D D D ?GK 99R==A   ? ? ? ? ? ? ? ?!!##;; '622  ?(..q11L|$$ 4 ? ? ? ? ? ? ? ?$=?? ? ? ? ? ? ? ? ? ? ? ?sCACCCCc ,tj}tj|z dkrY t|dddd|||dS#t$rtjdYnwxYwtj|z dkYt d)Nraliassetmyminiozhttp://rz+mc command could not connect to local minio)time_run_mc_commandChildProcessErrorsleeprJ)mcdiraddress access_key secret_keystarts r _wait_for_minio_startupr^s IKKE )++  " "  E7E9/g//Z I I I F     JqMMMMM  )++  " " A B BBsA A*)A*c&dd|gt|z}tj|tjtjd5}|d}d|}t d|t d|t d |jt d |j |d krtd  ddddS#1swxYwYdS) Nmcz-Crrr zCmd: z Return: z Stdout: z Stderr: rzCould not run mc) r7rkrrrr;printrrrr)rrnrrGretvalcmd_strs r rrjsXtU#d4jj0I  )JO!+7 D D D 8GK2((9%% g    #6##$$$ /4;++--//000 /4;++--//000 Q;;#$677 7  8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8sB6DD  D c tjdkrtjd t ddt dd|d}|d\}}}}|d|} t j|d} t j| rtj | t j | t j|d } t| d 5} | |d d d n #1swxYwYt| | ||t| d ddd||t| d dddd| t| d ddddd|t| dddt| dddd S#t $rtjdYd SwxYw)ab Attempts to use the mc command to configure the minio server with a special user limited:limited123 which does not have permission to create buckets. This mirrors some real life S3 configurations where users are given strict permissions. Arrow S3 operations should still work in such a configuration (e.g. see ARROW-13685) win32z*The mc command is not installed on Windowsriminiotempdir connection:zlimited-buckets-policy.jsonr)modeNadminuseraddzmyminio/policycreatezno-create-bucketsattachz--usermbzmyminio/existing-bucketz--ignore-existingzmyminio/no-delete-bucketz"Configuring limited s3 user failed)rhplatformpytestskiprrWr[r;existsshutilrmtreemkdiropenwriterrr) s3_serverrusernamepasswordr hostportrrrr policy_path policy_files r _configure_s3_limited_userr&xsP |w  @AAA":'d333'666I&-6|-D*dJ ""D"" Wd++ 7>>%  ! M%  gll7,IJJ +C ( ( ( &K   f % % % & & & & & & & & & & & & & & & w JGGGw"Hh 8 8 8w("$7 F F Fw("$78 M M M t%>+ - - - t%?+ - - - - - ::: 8999999:s7CF:D FD  F#D $A9FGGcbtjD]}|drdSdS)z= Checks whether it's running on musl systems or not. musllinuxTF)r platform_tags startswith) platform_tags r running_on_musllinuxr,sC*,,  " "; / / 44  5r )r>r?rr)+r contextlibrrBrWrrrrrr8rkrhr packagingrrpyarrowr^ pyarrow.fsr contextmanagerrr%r0r=rTrersrxr}rrrrFileSystemHandlerrrrrrr&r,r r r r3s$   """ (((*"""JCCCFFFFH%&))))X    3 3 3  * * *  ?D?D?D?D?D7:/?D?D?DD ,1$???" C C C 8 8 83:3:3:lr