o
    h)                     @   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 ejdkrejdddu rd dlmZ zejeddejd< W n e y   e!d Y nw 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+d@d1d2Z,ej&d"d#d3d4 Z-ej&d"d#d5d6 Z.ej&d"d#d7d8 Z/ej&d9d:gd"d;d<d= Z0ej&d"d#d>d9 Z1ej&d"d#d?d: Z2dS )A    N   )groupsdefaults)set_timezone_db_pathfind_free_portcii  )max_examplesdev2   debug
   )r	   	verbosityHYPOTHESIS_PROFILEz	/dev/nullAWS_CONFIG_FILEwin32PYARROW_TZDATA_PATHTZDIR)	resourcestzdatazoneinfozCPackage "tzdata" not found. Not setting TZDIR environment variable.c                 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>   1yonyestrueT>   0nnoofffalseFz {}={} is not parsable as boolean)osenvirongetupperlower
ValueErrorformat)namedefaultvalue r+   J/var/www/vscode/kcb/lib/python3.10/site-packages/pyarrow/tests/conftest.pybool_envL   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   	addoption)parserr-   groupr)   r+   r+   r,   pytest_addoptionJ   s   
r7   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )PyArrowConfigc                 C   s
   i | _ d S r3   )
is_enabled)selfr+   r+   r,   __init__d   s   
zPyArrowConfig.__init__c                 C   s    |j }|tv r| | d S d S r3   )r(   r   requires)r:   markr6   r+   r+   r,   
apply_markg   s   zPyArrowConfig.apply_markc                 C   s"   | j | std| d S d S )Nz{} NOT enabled)r9   pytestskipr'   )r:   r6   r+   r+   r,   r<   l   s   
zPyArrowConfig.requiresN)__name__
__module____qualname__r;   r>   r<   r+   r+   r+   r,   r8   c   s    r8   c                 C   sX   t  | _tD ]#}| d| d|}d|}| |o"| | }|| jj|< qd S )Nmarkersr.   r2   )r8   pyarrowr   addinivalue_liner'   	getoptionr9   )configr=   enable_flagdisable_flagr9   r+   r+   r,   pytest_configureq   s   


rK   c                 C   s    |   D ]	}| jj| qd S r3   )iter_markersrH   rE   r>   )itemr=   r+   r+   r,   pytest_runtest_setup   s   rN   c                 C   s   t | jS r3   )pathlibPathstrpath)tmpdirr+   r+   r,   tempdir   s   rS   session)scopec                   C   s   t tjd S )Ndata)rO   rP   __file__parentr+   r+   r+   r,   base_datadir   s   rY   T)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.
    AWS_EC2_METADATA_DISABLEDr   N)setenv)monkeypatchr+   r+   r,   disable_aws_metadata   s   r^   c                  C   s8   t jdd} tt jdd}t jdd}| ||fS )NARROW_HDFS_TEST_HOSTr)   ARROW_HDFS_TEST_PORTr   ARROW_HDFS_TEST_USERhdfs)r!   r"   r#   int)hostportuserr+   r+   r,   hdfs_connection   s   
rg   c                  C   s    dt  } }d\}}| |||fS )N	127.0.0.1)arrowapachearrowr   )rd   re   
access_key
secret_keyr+   r+   r,   s3_connection   s   rm            ?   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   rp   )	Exceptionmintimesleep)argskwargsremaining_attempts
curr_delayerrlast_exception)attemptsbackoffdelayfunc	max_delayr+   r,   wrapper   s    

z(retry.<locals>.decorate.<locals>.wrapper)	functoolswraps)r~   r   r{   r|   r}   r   )r~   r,   decorate   s   zretry.<locals>.decorater+   )r{   r}   r   r|   r   r+   r   r,   retry   s   r   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   rp   r   )r{   r}   r|   c                 S   s(   t jd|  d}| dksJ d S )Nzhttp://z/minio/health/live   )urllibrequesturlopengetcode)addressrespr+   r+   r,   minio_server_health_check   s   z,s3_server.<locals>.minio_server_health_checkz{}:{})MINIO_ACCESS_KEYMINIO_SECRET_KEYminioz--compatserverz--quietz	--addressenvz!`minio` command cannot be located
connectionprocessrS   )r   getbasetempr'   r!   r"   copyupdate
subprocessPopenOSErrorr?   r@   killwait)rm   tmpdir_factoryr   rR   rd   re   rk   rl   r   r   ru   procr+   r+   r,   	s3_server   sB   



r   c               
   c   s    t  } tj }d}|dt| g}d }zOztj||d}| d ur,t	d| d W n t
yJ } zt	d| d|  W Y d }~nd }~ww d| f|dV  W |d urb|  |  d S d S |d urq|  |  w w )	Nzstorage-testbenchz--portr   Command # did not start server successfully! failed to execute: 	localhost)r   r   )r   r!   r"   r   strr   r   pollr?   r@   r   r   r   )re   r   exeru   r   er+   r+   r,   
gcs_server   s4   
"
r   c              
   c   s    t  }tj }|  }dd|dt|g}|dg7 }d }zTztj||d}| d ur5t	
d| d W n ttfyU } zt	
d| d|  W Y d }~nd }~ww d	|d
df||dV  W |d urp|  |  d S d S |d ur|  |  w w )Nzazurite-blobz
--locationz
--blobPortz--skipApiVersionCheckr   r   r   r   rh   devstoreaccount1zXEby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==r   )r   r!   r"   r   r   r   r   r   r   r?   r@   ModuleNotFoundErrorr   r   r   )r   re   r   rR   ru   r   r   r+   r+   r,   azure_server  s<   

"

r   builtin_picklecloudpickle)paramsrU   c                 C   s   |  | jS r3   )getfixturevalueparam)r   r+   r+   r,   pickle_module5  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)r?   importorskip__dict__DEFAULT_PROTOCOLr   )cpr+   r+   r,   r   F  s   

)rn   ro   Nrp   )3r   r!   rO   r   sysrs   urllib.requestr   r?   
hypothesishconftestr   r   rE   r   pyarrow.utilr   settingsregister_profile	Verbosityverboseload_profiler"   r#   platformtzdata_set_path	importlibr   pathjoinfilesr   printr7   r8   rK   rN   fixturerS   rY   r^   rg   rm   r   r   r   r   r   r   r   r+   r+   r+   r,   <module>   s   














#

&


!



