o
    Zh!                     @   s  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mZ d dlmZ d dlmZ e
jjddd e
jjd	d
d e
jjdde
jjd e
jejdd	 dejd< ejdkruejddZeruee dd ZG dd dZdd Zdd Zejdd Z ejdddd  Z!ejd!d"d#d$ Z"ejddd%d& Z#ejddd'd( Z$d9d,d-Z%ejddd.d/ Z&ejddd0d1 Z'ejd2d3gdd4d5d6 Z(ejddd7d2 Z)ejddd8d3 Z*dS ):    N   )groupsdefaults)set_timezone_db_pathfind_free_portcii  )max_examplesdev2   debug
   )r	   	verbosityZHYPOTHESIS_PROFILEz	/dev/nullZAWS_CONFIG_FILEwin32ZPYARROW_TZDATA_PATHc                 C   sh   ddd}t D ]*}|d|t| }| jd|d|d|d | jd|dd	d
|d qd S )Nc                 S   sL   t j|  }|s|S | }|dv rdS |dv rdS td|  |)N>   true1onyyesT>   nfalseno0offFz {}={} is not parsable as boolean)osenvirongetupperlower
ValueErrorformat)namedefaultvalue r$   M/var/www/html/lang_env/lib/python3.10/site-packages/pyarrow/tests/conftest.pybool_env;   s   z"pytest_addoption.<locals>.bool_envzPYARROW_TEST_{}--enable-{}
store_truezEnable the {} test group)actionr"   help--disable-{}FzDisable the {} test groupN)r   r    r   Z	addoption)parserr&   groupr"   r$   r$   r%   pytest_addoption9   s   
r/   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )PyArrowConfigc                 C   s
   i | _ d S r,   )
is_enabled)selfr$   r$   r%   __init__S   s   
zPyArrowConfig.__init__c                 C   s    |j }|tv r| | d S d S r,   )r!   r   requires)r2   markr.   r$   r$   r%   
apply_markV   s   zPyArrowConfig.apply_markc                 C   s"   | j | std| d S d S )Nz{} NOT enabled)r1   pytestskipr    )r2   r.   r$   r$   r%   r4   [   s   
zPyArrowConfig.requiresN)__name__
__module____qualname__r3   r6   r4   r$   r$   r$   r%   r0   R   s    r0   c                 C   sX   t  | _tD ]#}| d| d|}d|}| |o"| | }|| jj|< qd S )Nmarkersr'   r+   )r0   pyarrowr   Zaddinivalue_liner    Z	getoptionr1   )configr5   Zenable_flagZdisable_flagr1   r$   r$   r%   pytest_configure`   s   


r?   c                 C   s    |   D ]	}| jj| qd S r,   )Ziter_markersr>   r=   r6   )itemr5   r$   r$   r%   pytest_runtest_setupq   s   rA   c                 C   s   t | jS r,   )pathlibPathZstrpath)tmpdirr$   r$   r%   tempdirw   s   rE   session)scopec                   C   s   t tjd S )Ndata)rB   rC   __file__parentr$   r$   r$   r%   base_datadir}   s   rK   T)Zautousec                 C   s   |  dd dS )zStop the AWS SDK from trying to contact the EC2 metadata server.

    Otherwise, this causes a 5 second delay in tests that exercise the
    S3 filesystem.
    ZAWS_EC2_METADATA_DISABLEDr   N)Zsetenv)Zmonkeypatchr$   r$   r%   disable_aws_metadata   s   rL   c                  C   s8   t jdd} tt jdd}t jdd}| ||fS )NZARROW_HDFS_TEST_HOSTr"   ZARROW_HDFS_TEST_PORTr   ZARROW_HDFS_TEST_USERZhdfs)r   r   r   int)hostportuserr$   r$   r%   hdfs_connection   s   
rQ   c                  C   s    dt  } }d\}}| |||fS )N	localhost)arrowZapachearrowr   )rN   rO   
access_key
secret_keyr$   r$   r%   s3_connection   s   rV            ?   c                    s    fdd}|S )aP  
    Retry decorator

    Parameters
    ----------
    attempts : int, default 3
        The number of attempts.
    delay : float, default 1
        Initial delay in seconds.
    max_delay : float, optional
        The max delay between attempts.
    backoff : float, default 1
        The multiplier to delay after each attempt.
    c                    s"   t   fdd}|S )Nc               
      s~    }}|dkr=z| i |W S  t y8 } z|d8 }|}|9 }r)t|}t| W Y d }~nd }~ww |dks|)Nr   rY   )	Exceptionmintimesleep)argskwargsZremaining_attemptsZ
curr_delayerrZlast_exception)attemptsbackoffdelayfunc	max_delayr$   r%   wrapper   s    

z(retry.<locals>.decorate.<locals>.wrapper)	functoolswraps)rd   rf   ra   rb   rc   re   )rd   r%   decorate   s   zretry.<locals>.decorater$   )ra   rc   re   rb   rj   r$   ri   r%   retry   s   rk   c                 c   s    t dddddd }| }| \}}}}d||}tj }	|	||d d	d
ddd||g}
d }z4z	tj|
|	d}W n t	yL   t
d Y nw || | ||dV  W |d urg|  |  d S d S |d urv|  |  w w )N   g?r   )ra   rc   rb   c                 S   s(   t jd|  d}| dksJ d S )Nzhttp://z/minio/health/cluster   )urllibrequesturlopengetcode)addressrespr$   r$   r%   minio_server_health_check   s   z,s3_server.<locals>.minio_server_health_checkz{}:{})ZMINIO_ACCESS_KEYZMINIO_SECRET_KEYZminioz--compatserverz--quietz	--addressenvz!`minio` command cannot be located)
connectionprocessrE   )rk   Zgetbasetempr    r   r   copyupdate
subprocessPopenOSErrorr7   r8   killwait)rV   Ztmpdir_factoryrt   rD   rN   rO   rT   rU   rr   rw   r^   procr$   r$   r%   	s3_server   sB   



r   c               
   c   s    t  } tj }tjdddt| g}d }zUzdd l}tj	||d}|
 d ur1td| d W n ttfyQ } ztd| d|  W Y d }~nd }~ww d	| f|d
V  W |d uri|  |  d S d S |d urx|  |  w w )Nz-m	testbenchz--portr   rv   zCommand z# did not start server successfully!z failed to execute: rR   )rx   ry   )r   r   r   rz   sys
executablestrr   r|   r}   pollr7   r8   ModuleNotFoundErrorr~   r   r   )rO   rw   r^   r   r   er$   r$   r%   
gcs_server   s4   
"
r   builtin_picklecloudpickle)paramsrG   c                 C   s   |  | jS r,   )Zgetfixturevalueparam)ro   r$   r$   r%   pickle_module  s   r   c                  C   s   dd l } | S )Nr   pickler   r$   r$   r%   r     s   c                  C   s    t d} d| jvr| j| _| S )Nr   HIGHEST_PROTOCOL)r7   Zimportorskip__dict__DEFAULT_PROTOCOLr   )cpr$   r$   r%   r     s   

)rW   rX   NrY   )+rg   r   rB   r|   r   r\   urllib.requestrn   r7   Z
hypothesishZconftestr   r   r=   r   Zpyarrow.utilr   settingsZregister_profileZ	VerbosityverboseZload_profiler   r   platformZtzdata_set_pathr/   r0   r?   rA   ZfixturerE   rK   rL   rQ   rV   rk   r   r   r   r   r   r$   r$   r$   r%   <module>   sj   













#

&




